Linux常用命令-文件和目录类

1.Linux常用命令(二)

1.文件及目录操作相关命令

pwd 显示当前用户目录(Print Working Directory)

[root@aspen network-scripts]# pwd
/etc/sysconfig/network-scripts

cd 目录名 切换/进入目录(Change Directory)

[root@aspen lib64]# cd /usr/lib64/
[root@aspen lib64]# cd ~
[root@aspen ~]# cd -
/usr/lib64

tree 目录名 以树形模式显示目录结构

  • -L 指定遍历目录的最大层数
  • -d 只显示目录信息
[root@aspen ~]# tree -L 1 /
/
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var

19 directories, 0 files
[root@aspen ~]# tree -dL 1 /etc/sysconfig/
/etc/sysconfig/
├── cbq
├── console
├── modules
└── network-scripts

4 directories

ls 目录名 显示目录内容(list)

  • -l 以长格式显示目录下信息(显示详细信息)
  • -t 按照文件修改时间对输出结果进行排序(顺序:新->旧)
    默认是按字母顺序排序(顺序:a->z)
  • -r 逆序输出结果
  • -i 显示文件索引结点号(inode)
  • -h 结果以人类可读形式显示
  • -a 显示目录下的所有文件(包含隐藏文件)
  • -d 只显示目录本身信息
[root@aspen ~]# ls -a ~
.  ..  anaconda-ks.cfg  .bash_history  .bash_logout  .bash_profile  .bashrc  .cshrc  .lesshst  .tcshrc
[root@aspen ~]# ls ~
anaconda-ks.cfg
[root@aspen ~]# ls -d ~
/root
[root@aspen ~]# ls -ihl ~
total 16K
33595848 -rw-r--r--. 1 root root   41 May  5 09:55 1.txt
33574978 -rw-------. 1 root root 1.5K Mar 20 09:36 anaconda-ks.cfg
51336048 drw-r-----. 3 root root   34 Apr 25 10:07 aspen
33576607 -rw-r--r--. 1 root root  504 Apr 11 16:51 inittab.bak
33593153 -rw-r--r--. 1 root root   75 May  8 16:31 passwd.txt
[root@aspen ~]# ls -lrt /tmp
total 4
-rw-------. 1 root root   0 Mar 20 09:32 yum.log
-rwx------. 1 root root 836 Mar 20 09:36 ks-script-z8idLP
drwx------. 2 root root   6 Mar 20 09:36 vmware-root_5916-960608111
drwx------. 2 root root   6 Mar 29 15:03 vmware-root_6092-994685407

ls -lrt 在实际工作中常用于查看目录下最近被修改过的文件

mkdir 目录名 创建目录(Make Directory )
mkdir默认一次只能创建一个目录

  • -v 显示创建过程
  • -p 递归创建目录(创建多层目录)
  • -m设置新目录默认对应的权限
    存在-p参数时,创建已存在目录名的目录时,不会提示错误
[root@aspen ~]# mkdir /aspen/a/b/c/d/e/f
mkdir: cannot create directory ‘/aspen/a/b/c/d/e/f’: No such file or directory   #不能创建目录‘/aspen/a/b/c/d/e/f’:没有这样的文件或目录
[root@aspen ~]# mkdir -p /aspen/a/b/c/d/e/f  /data
[root@aspen ~]# tree /aspen/ /data/
/aspen/
└── a
    └── b
        └── c
            └── d
                └── e
                    └── f
/data/
[root@aspen ~]# mkdir -m 640 ~/aspen
[root@aspen ~]# ls -l ~
total 4
-rw-------. 1 root root 1508 Mar 20 09:36 anaconda-ks.cfg
drw-r-----. 2 root root    6 Apr 11 14:21 aspen

touch 文件名 修改文件的时间戳(创建空文件)

可以同时创建多个文件

[root@aspen ~]# touch /{aspen/a/b/c/d/e/f,data}/han.txt
[root@aspen ~]# tree /aspen/ /data/
/aspen/
└── a
    └── b
        └── c
            └── d
                └── e
                    └── f
                        └── han.txt
/data/
└── han.txt

ln 源文件名 目的文件名 为文件创建硬链接

  • -s 为文件创建软链接
    无法针对目录或跨文件系统创建硬链接
[root@aspen ~]# ln passwd.txt ./passwd.txt.hardlink
[root@aspen ~]# ln -s passwd.txt ./passwd.txt.softlink
[root@aspen ~]# ll -ih ./passwd.txt*
33593153 -rw-r--r--. 2 root root 75 May  8 16:31 ./passwd.txt
33593153 -rw-r--r--. 2 root root 75 May  8 16:31 ./passwd.txt.hardlink
33617916 lrwxrwxrwx. 1 root root 10 May 13 13:58 ./passwd.txt.softlink -> passwd.txt

cp /源目录/源文件名 /目的目录/目的文件名 复制和备份文件(Copy)
cp命令默认无法复制目录

  • -r 递归复制(复制目录及目录里面的内容)
  • -p 复制的时候保持文件及目录属性不变
  • -d 与软连接有关
    cp -a == cp -pdr
  • -v 显示复制过程
  • -t 调换命令源文件和目标文件的参数位置
[root@aspen ~]# cp /etc/ /aspen/   #复制
cp: omitting directory ‘/etc/’   #cp命令:忽略目录/etc
[root@aspen ~]# cp -r /etc/sysconfig/network-scripts/ /aspen/a/b/
[root@aspen ~]# ls /aspen/a/b
c  network-scripts
[root@aspen c]# cp /aspen/a/b/network-scripts/ifcfg-eth0 /aspen/a/b/network-scripts/ifcfg-eth0.bak   #备份
[root@aspen c]# ls /aspen/a/b/network-scripts/ifcfg-eth0*
/aspen/a/b/network-scripts/ifcfg-eth0  /aspen/a/b/network-scripts/ifcfg-eth0.bak  
[root@aspen aspen]# ls ~/aspen/
Aspen.txt  han
[root@aspen aspen]# cp -rt ~/aspen/ /etc/sysconfig/network-scripts/
[root@aspen aspen]# ls
Aspen.txt  han  network-scripts

mv /源目录/源文件名 /目的目录/目的文件名 移动目录或文件,重命名文件(Move)

可以同时移动多个文件,但最后一个参数永远标示目标位置

[root@aspen /]# mv /aspen/ /root/      #移动目录
[root@aspen /]# ls /root/
anaconda-ks.cfg  aspen
[root@aspen /]# mv /aspen/ /root/
[root@aspen /]# ls /root/
anaconda-ks.cfg  aspen
[root@aspen ~]# mv /root/aspen/a/b/network-scripts/ifcfg-eth0 /root/aspen/a/b/network-scripts/ifcfg-eth1      #重命名文件
[root@aspen ~]# ls /root/aspen/a/b/network-scripts/ifcfg-eth*
/root/aspen/a/b/network-scripts/ifcfg-eth0.bak  /root/aspen/a/b/network-scripts/ifcfg-eth1

rm /目的文件 删除目标文件(Remove)
Linux系统下最危险的命令,没有之一

  • -r 递归删除(用于删除目录;如果仅删除文件,不用使用该参数)
  • -f 强制删除
    -r和-f不用轻易的一起用,这样操作风险很大
  • -i 删除命令执行前需要确认(-i与-f参数同时使用时,-i不生效)
[root@aspen ~]# rm -r /root/data/
rm: descend into directory ‘/root/data/’? y
rm: remove regular empty file ‘/root/data/han.txt’? y
rm: remove directory ‘/root/data/’? y
[root@aspen ~]# rm /root/aspen/
rm: cannot remove ‘/root/aspen/’: Is a directory    #rm指令:不能删除‘/root/aspen/’:这是一个目录
[root@aspen ~]# rm -rf /root/aspen/
[root@aspen ~]# ls /root/
anaconda-ks.cfg

rename 原文件名 替换文件名 目标文件 批量重命名文件
经常与find命令搭配使用

[root@aspen han]# rename .sh .shell *.sh
[root@aspen han]# ls
aspen01.shell  aspen02.shell  aspen03.shell  aspen04.shell  aspen05.shell

file 文件名 查看文件的详细文件类型

[root@aspen 10.0.0.201]# file /usr/bin/ls ./bak-2019-05-10-5.tar.gz ./1.txt ./1.txt.sl /dev/urandom /dev/sr0 /dev/sda
/usr/bin/ls:               ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=ceaf496f3aec08afced234f4f36330d3d13a657b, stripped
./bak-2019-05-10-5.tar.gz: gzip compressed data, from Unix, last modified: Fri May 10 21:48:01 2019
./1.txt:                   ASCII text
./1.txt.sl:                symbolic link to `1.txt'
/dev/urandom:              character special
/dev/sr0:                  block special
/dev/sda:                  block special

md5sum /绝对路径/文件名 计算文件的MD5校验和

  • -c根据MD5校验文件,检查文件是否变动
校验命令家族:sha128sum;sha224sum;sha256sum;sha512sum;
[root@aspen 10.0.0.201]# md5sum /backup/10.0.0.201/* >~/1.md5
[root@aspen 10.0.0.201]# cat ~/1.md5 
e1d72ca53f869821e477424f0793cb4a  /backup/10.0.0.201/1.txt
e1d72ca53f869821e477424f0793cb4a  /backup/10.0.0.201/1.txt.hl
e1d72ca53f869821e477424f0793cb4a  /backup/10.0.0.201/1.txt.sl
f4281114ffc2fa1cdb2fd4fa4e58c3ea  /backup/10.0.0.201/bak-2019-05-10-5.tar.gz
68970c01823e13868e30e201a4ea95aa  /backup/10.0.0.201/bak-2019-05-6-1.tar.gz
[root@aspen 10.0.0.201]# md5sum -c ~/1.md5 
/backup/10.0.0.201/1.txt: OK
/backup/10.0.0.201/1.txt.hl: OK
/backup/10.0.0.201/1.txt.sl: OK
/backup/10.0.0.201/bak-2019-05-10-5.tar.gz: OK
/backup/10.0.0.201/bak-2019-05-6-1.tar.gz: OK
[root@aspen 10.0.0.201]# > ./1.txt
[root@aspen 10.0.0.201]# md5sum -c ~/1.md5 
/backup/10.0.0.201/1.txt: FAILED
/backup/10.0.0.201/1.txt.hl: FAILED
/backup/10.0.0.201/1.txt.sl: FAILED
/backup/10.0.0.201/bak-2019-05-10-5.tar.gz: OK
/backup/10.0.0.201/bak-2019-05-6-1.tar.gz: OK
md5sum: WARNING: 3 computed checksums did NOT match
[root@aspen 10.0.0.201]# md5sum ./1.txt
d41d8cd98f00b204e9800998ecf8427e  ./1.txt

2.查看内容文件及内容处理命令

vi/vim 文件名 进入vi/vim文本编辑器
Cent OS 7系统默认没有安装vim文本编辑器

  • -o 同时打开多个文件,并水平分割视图
  • -O 同时打开多个文件,并垂直分割视图
    使用组合键ctrl+ww在多个文件间切换光标;
  • -r 根据临时文件恢复文件内容(实际工作中不建议恢复)
    恢复文件后,要使用rm命令删除临时文件

vim具体使用方法,请参考初识vim文本编辑器

[root@aspen ~]# vim ~/aspen/Aspen.txt
Hello World
Welcome to Linux
[root@aspen ~]# cat ~/aspen/Aspen.txt
Hello World
Welcome to Linux

cat 文件名 显示文件内容

  • -n 显示文件内容和行号
  • -b 显示文件内容和行号(忽略空行)
  • -A 显示文件行内容中隐藏符号
[root@aspen ~]# cat -n /etc/inittab 
     1  # inittab is no longer used when using systemd.
     2  #
     3  # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
     4  #
     5  # Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
     6  #
     7  # systemd uses 'targets' instead of runlevels. By default, there are two main targets:
......
[root@aspen ~]# cat -b /root/inittab.bak 
     1  # inittab is no longer used when using systemd.

     2  # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.

     3  # Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target

     4  # systemd uses 'targets' instead of runlevels. By default, there are two main targets:
......

[root@aspen 10.0.0.201]# cat -A /root/inittab.bak 
# inittab is no longer used when using systemd.$
$
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.$
$
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target$
$
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:$
......

cat命令的特殊用法-向文件追加多行内容

常用于从Windows主机复制内容到Linux系统文件中
[root@aspen aspen]# cat ./Aspen.txt 
Hello World
Welcome to Linux
[root@aspen aspen]# cat >> ./Aspen.txt  <<EOF
> I
> am
> studying
> Linux
> EOF
[root@aspen aspen]# cat Aspen.txt
Hello World
Welcome to Linux
I
am
studying
Linux

less 文件名 按页查看文件内容(适用于查看大文件)

  • -N 显示行号
操作模式
f/空格 下翻一页
b 上翻一页
G 快速移至文件尾行
q 退出

more 文件名 按页查看文件内容(查看到文件尾行后,自动退出)

操作模式
f/空格 下翻一页
b 上翻一页
q 退出
[root@aspen ~]# less -N /etc/sysconfig/network-scripts/ifcfg-eth0 
      1 TYPE=Ethernet
      2 PROXY_METHOD=none
      3 BROWSER_ONLY=no
      4 BOOTPROTO=none
      5 DEFROUTE=yes
      6 IPV4_FAILURE_FATAL=no
      7 IPV6INIT=yes
      8 IPV6_AUTOCONF=yes
      9 IPV6_DEFROUTE=yes
     10 IPV6_FAILURE_FATAL=no
     11 IPV6_ADDR_GEN_MODE=stable-privacy
     12 NAME=eth0
     13 UUID=6b621622-b6a7-4a4d-84cc-a7daf1a94e81
     14 DEVICE=eth0
     15 ONBOOT=yes
     16 IPADDR=10.0.0.201
     17 PREFIX=24
     18 GATEWAY=10.0.0.254
     19 DNS1=223.5.5.5
     20 IPV6_PRIVACY=no
/etc/sysconfig/network-scripts/ifcfg-eth0 (END)

head 文件名 显示文件前几行内容(默认前十行)

  • -n 数字 == -数字 显示文件前n行内容(n=数字)
  • -c 数字显示文件的前n个字符(n=数字)
[root@aspen ~]# head -5 /var/log/secure
Apr  8 10:33:01 oldboyedu60-Aspen sshd[7547]: pam_unix(sshd:session): session closed for user root
Apr  9 14:02:45 oldboyedu60-Aspen unix_chkpwd[8652]: password check failed for user (root)
Apr  9 14:02:45 oldboyedu60-Aspen login: pam_unix(login:auth): authentication failure; logname=LOGIN uid=0 euid=0 tty=tty1 ruser= rhost=  user=root
Apr  9 14:02:45 oldboyedu60-Aspen login: pam_succeed_if(login:auth): requirement "uid >= 1000" not met by user "root"
Apr  9 14:02:47 oldboyedu60-Aspen login: FAILED LOGIN 1 FROM tty1 FOR root, Authentication failure
[root@aspen 10.0.0.201]# head -c 15 /var/log/messages
May 13 11:01:01[root@aspen 10.0.0.201]# 

tail 文件名 显示文件后几行内容(默认后十行)

  • -n 数字 == -数字 显示文件后n行内容(n=数字)
  • -f 显示文件实时更新 等同于tailf命令
  • -F 显示文件实时更新(如文件不存在,会不断进行重试)
使用-F或-f参数时,如果要指定显示行数,必须加上-n参数
[root@aspen ~]# tail -n 3 -f  /var/log/secure
Apr 11 14:08:52 oldboyedu60-Aspen sshd[11097]: pam_unix(sshd:session): session closed for user root
Apr 11 14:09:06 oldboyedu60-Aspen sshd[11135]: Accepted password for root from 10.0.0.1 port 57227 ssh2
Apr 11 14:09:06 oldboyedu60-Aspen sshd[11135]: pam_unix(sshd:session): session opened for user root by (uid=0)

awk-行处理器

awk '{print $数字}' 取出指定列(默认按空格分割)

'BEGIN{print 数字1^数字2}' 表示输出‘数字1’的‘数字2’次方的计算结果
awk 'END{print $数字}' 表示awk处理文章最后一行内容后,按要求输出指定内容
$0表示按行输出内容

-F "符号" 指定分隔符

awk NR >=/<=/==数字 取出指定行

<=数字 取内容前指定行
>=数字 取指定行到结尾的内容
==数字 取指定行
>=数字&&<=数字或==数字,==数字 取指定范围行
[root@aspen ~]# awk -F":" '{print $1}' /etc/passwd | head -6
root
bin
daemon
adm
lp
sync
[root@aspen ~]# awk -F ":" 'END{print $1}' /etc/passwd 
stu05
[root@aspen ~]# awk -F ":" 'END{print $0}' /etc/passwd 
stu05:x:1006:1006::/home/stu05:/bin/bash
[root@aspen ~]# awk "NR==3,NR==6" /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
[root@aspen ~]# awk "NR>=3&&NR<=6" /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
[root@aspen ~]# ip address s eth0 | sed -n '3p' | awk -F "[ /]+" '{print $3}'
10.0.0.200

sed 's#被替换内容#替换内容#g' 文件名 流编辑器(全局替换,默认不修改文件内容)

  • -i 修改文件内容
  • -i.bak 备份源文件后,修改文件内容
  • -n 取消默认输出
  • '数字p' 重复输出指定行
$p 表示最后一行
  • -r 反向引用
[root@aspen ~]# sed -i.bak 's#200#201#g' ip.txt 
[root@aspen ~]# ls
anaconda-ks.cfg  aspen  ip.txt  ip.txt.bak  num.txt
[root@aspen ~]# cat ./ip.txt 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:c4:ff:80 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.201/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::7f33:52f3:3051:7cb9/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@aspen ~]# cat ./ip.txt.bak 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:c4:ff:80 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::7f33:52f3:3051:7cb9/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@aspen ~]# sed -n '3p' ip.txt | sed -r 's#^.* ([0-9.]+)\/.*#\1#g'
10.0.0.201
[root@aspen ~]# stat /etc/passwd | sed -n '4p'|sed -r 's#^.*\((.*)\/-.*#\1#g'
0644
[root@aspen ~]# stat /etc/passwd | sed -n '4p'| sed -r 's#^.*([0-9]{4}).*#\1#g'
0644
[root@aspen ~]# sed -n '$p' ip.txt
       valid_lft forever preferred_lft forever

grep '关键字' 文件名 过滤文件中关键字内容,并用颜色显示出来

  • -n 显示过滤结果并附上行号
  • -v 过滤文件中与指定关键字无关的内容(按行取反)
  • -i 过滤时候忽略大小写
  • -o 仅显示匹配匹配行中匹配的内容;
  • -w 精确匹配单词,单词的两边必须是非字符符号(即不能是字母数字或下划线)
  • -A 数字 显示匹配行以及其下n行的信息
  • -B 数字 显示匹配行以及其上n行的信息
  • -C 数字 显示匹配行以及其上下各n行的信息
  • -E == egrep 启用增强型grep,支持扩展正则表达式
[root@aspen aspen]# egrep -o '[a-Z]+' ./Aspen.txt | head -5
Hello
World
Welcome
to
Linux
[root@aspen aspen]# grep -vn '[a-z]' ./Aspen.txt 
3:I
8:
11:
14:$$$$$$$$$$$
15:?////????$.$.$.$$$
[root@aspen aspen]# grep -n '[^a-z]' ./Aspen.txt 
1:Hello World
2:Welcome to Linux
3:I
6:Linux
7:I study linux.
9:I like swim,basketball and chinese chess!
10:my qq is 54844637
12:not 548444637.
13:my god ,i am not apen,but Aspen!
14:$$$$$$$$$$$
15:?////????$.$.$.$$$

tr '被替换内容' '替换的内容' < 文件名 一对一替换文件中的字符

  • -d '关键字符' 删除对应的字符
  • -c 取反/排除
[root@aspen aspen]# tr -cd 'a-zA-Z0-9' < /dev/urandom | head -c 16 #设置随机密码
LgiYGzAAq5SNSZAD[root@aspen aspen]# 
[root@aspen aspen]# tr 'a-z' 'A-Z' < ./Aspen.txt 
HELLO WORLD
WELCOME TO LINUX
I
AM
STUDYING
LINUX
I STUDY LINUX.

I LIKE SWIM,BASKETBALL AND CHINESE CHESS!
MY QQ IS 54844637

NOT 548444637.
MY GOD ,I AM NOT APEN,BUT ASPEN!
$$$$$$$$$$$
?////????$.$.$.$$$

sort 文件名 对文件的文本内容排序(默认按首字符排序)

  • -h 按人类可读形式排序
  • -n 按照数字进行排序
  • -r 逆序排序
  • -t "分隔符" 指定分隔符(默认为空格)
  • -k 数字 指定排序字段(第几列,或第几列第几字符排序)
举例:
-k 3 #按第3列排序
-k 3.1,3.1 #按第3列第1个字符排序
-k 4.1,4.3 #按第4列第1个字符至第3个字符排序
[root@aspen /]# du -sh /* | sort -rh
1.4G    /usr
189M    /var
95M /boot
32M /etc
7.7M    /run
......
[root@Tech ~]# sort file.txt 
a:4
b:3
c:2
d:1
e:5
f:11
[root@Tech ~]# sort -t ":" -k2 file.txt 
d:1
f:11
c:2
b:3
a:4
e:5
[root@Tech ~]# sort -t ":" -k2 -n file.txt 
d:1
c:2
b:3
a:4
e:5
f:11

uniq 文件名 去掉文件中相邻的重复行

uniq指令本身仅能去除文件中相邻的重复行,因此常与sort命令一起使用用于统计;

-c 计数(统计重复次数)

[root@Tech ~]# uniq file.txt
abc
123
abc
123
[root@Tech ~]# sort file.txt | uniq
123
abc
[root@Tech ~]# sort file.txt | uniq -c
      2 123
      2 abc

cut 文件名 截取文件内容

  • -d "分隔符" 指定截取分隔符
  • -f 数字 截取指定列(如:-f3,6 截取第3列和第6列)
  • -c 数字 截取指定字符(空格也占字符位)
在实际生产环境中,很少使用cut指令,截取列字段一般使用awk指令;
[root@Tech ~]# cut -d " " -f 2,6 file.txt | cut -d "," -f 1,2
Young, hanyan***7
[root@Tech ~]# history | cut -c 8- | tail -5 | head -2
awk -F ":" '/root/{print $NF":"$2":"$3":"$4":"$5":"$6":"$1}' /etc/passwd
awk -F ":" '/^root/{print $NF":"$2":"$3":"$4":"$5":"$6":"$1}' /etc/passwd

wc 文件名 统计文件的行数、单词数或字节数

wc指令不能直接对目录使用,可以用于文件;
  • -l 只显示行数
  • -w 只显单词数
  • -c 只显字节数
[root@aspen ~]# wc /var/log/messages
  9 104 755 /var/log/messages
[root@aspen ~]# wc -l /var/log/messages
10 /var/log/messages
[root@aspen ~]# wc -w /var/log/messages
104 /var/log/messages
[root@aspen ~]# wc -c /var/log/messages
755 /var/log/messages

diff 文件1 文件2 比较文件的内容差异
vimdiff 文件1 文件2 命令行可视化文件比较工具

[root@aspen ~]# diff ip.txt ip.txt.bak 
3c3
<     inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0
---
>     inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0
[root@aspen ~]# vimdiff ip.txt ip.txt.bak 
2 files to edit
  2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 150|  2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 150
      link/ether 00:0c:29:87:2f:f5 brd ff:ff:ff:ff:f|      link/ether 00:0c:29:87:2f:f5 brd ff:ff:ff:ff:f
      inet 10.0.0.200/24 brd 10.0.0.255 scope global|      inet 10.0.0.201/24 brd 10.0.0.255 scope global
         valid_lft forever preferred_lft forever    |         valid_lft forever preferred_lft forever
      inet6 fe80::20c:29ff:fe87:2ff5/64 scope link  |      inet6 fe80::20c:29ff:fe87:2ff5/64 scope link
         valid_lft forever preferred_lft forever    |         valid_lft forever preferred_lft forever

3.文件压缩及解压缩命令

tar 压缩包名称 目标文件/文件夹 将指定文件/文件夹打包

  • -z 通过gzip工具进行压缩
  • -j 通过bzip或bzip2工具进行压缩
  • -c 创建包
  • -x 解压缩(默认解压到当前目录)
  • -t 列出压缩包内容
  • -v 显示压缩过程
  • -C 目录 指定解压路径
  • -P使用绝对路径创建压缩包
压缩/解压缩不加-P,命令会自动把文件路径首个‘/’去掉变为相对路径
  • -f 指定压缩包名称
    -f 参数一般放在参数末位,防止报错
压缩一般用zcf参数
解压缩一般用xf参数
查看压缩包一般用tf参数
  • -h打包软链接对应的源文件
  • --exclude 文件/目录 创建压缩包时,排除某个文件/目录
[root@aspen aspen]# tar -zcf ./network-bak.tar.gz /etc/sysconfig/network-scripts/ --exclude /etc/sysconfig/network-scripts/ifcfg-eth0 
tar: Removing leading `/' from member names
[root@aspen aspen]# ls
Aspen.txt  han  network-bak.tar.gz
[root@aspen aspen]# tar -xf ./network-bak.tar.gz etc/sysconfig/network-scripts/ifcfg-lo 
[root@aspen aspen]# ls
Aspen.txt  etc  han  network-bak.tar.gz
[root@aspen aspen]# tree ./etc/
./etc/
└── sysconfig
    └── network-scripts
        └── ifcfg-lo
[root@aspen aspen]# tar xf ./network-bak.tar.gz -C /tmp/
[root@aspen aspen]# ls /tmp/etc/sysconfig/
network-scripts

4.搜索文件命令

which 命令 查询命令的别名及绝对路径

[root@aspen aspen]# which ls
alias ls='ls --color=auto'
    /usr/bin/ls
[root@aspen aspen]# \which ls
/usr/bin/ls

whereis 命令 查询命令的及其相关文件的绝对路径

  • -b 仅显示命令的绝对路径,不显示相关文件;
[root@aspen aspen]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

type 命令 查询命令的相关信息

whichwhereis 指令无法查询到内核相关的一些命令;查找内核相关命令时,需使用type指令。
  • -a 显示命令的绝对路径
[root@Tech ~]# whereis for 
for:
[root@Tech ~]# which for
/usr/bin/which: no for in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@Tech ~]# type for
for is a shell keyword
[root@Tech ~]# type ls
ls is aliased to `ls --color=auto'
[root@Tech ~]# type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls

locate 从数据库 (/var/lib/mlocate/mlocate.db) 查找命令,使用updatedb更新库(不推荐使用)

Cent OS 7中默认没有安装该命令,需使用 yum install -y mlocate 指令进行安装
[root@Tech ~]# updatedb
[root@Tech ~]# locate ls| head -5
/boot/grub2/i386-pc/blscfg.mod
/boot/grub2/i386-pc/cbls.mod
/boot/grub2/i386-pc/command.lst
/boot/grub2/i386-pc/crypto.lst
/boot/grub2/i386-pc/fs.lst

find 搜索路径 在指定路径下搜索文件

  • -maxdepth 数字 指定搜索的最大深度
maxdepth 参数要放到其他参数之前,否则会有警告
  • -type 文件类型 指定搜索文件的类型
f 普通文件
d 目录
l 软链接
p 管道文件
c 字符设备
b 块设备
  • -name "文件名" 指定搜索文件的名字
  • -iname "文件名" 指定搜索文件的名字(忽略大小写)
  • -size +/- 容量 指定搜索文件的大小范围(容量仅支持整数,不支持小数)
  • -mtime '+/- 天数' 指定搜索文件修改时间
+表示几天以前
-表示最近几天内
  • -inum inode号码 指定索引文件的索引结点号

  • -samefile 文件名指定搜索与目标文件索引结点号一致的文件

  • -exec 命令 {} \; 将搜索到的文件执行指定命令操作

exec参数后面不支持别名
[root@aspen aspen]# find /etc/ -type f -iname 'ifcfg*' -exec ls -lh {}  \;
-rw-r--r--. 1 root root 254 Aug 24  2018 /etc/sysconfig/network-scripts/ifcfg-lo
-rw-r--r--. 1 root root 356 May 13 09:24 /etc/sysconfig/network-scripts/ifcfg-eth0
[root@aspen aspen]# find /var/log/ -maxdepth 1 -type f -size +100k -exec cp -t /tmp {} \;
[root@aspen aspen]# ls /tmp
dmesg  dmesg.old  etc  lastlog  messages  messages-20190418  vmware-root_6327-1681724229  vmware-root_6482-734103686
[root@aspen aspen]# find /etc/ -type f -size +1M -exec tar zcf /opt/etc-big.tar.gz {} +;
tar: Removing leading `/' from member names
[root@aspen aspen]# tar tf /opt/etc-big.tar.gz 
etc/selinux/targeted/active/policy.kern
etc/selinux/targeted/contexts/files/file_contexts.bin
etc/selinux/targeted/policy/policy.31
etc/udev/hwdb.bin

Linux命令要养成操作前备份,操作后检查的好习惯
未完待续...