1. shutdown

#关机重启的命令

    选项:

    -h        #关机
    -r        #重启
    -c        #取消操作
案例:
    [root@centos ~]# shutdown -h now
    [root@centos ~]# shutdown -h 18:00
    Shutdown scheduled for Thu 2019-11-28 18:00:00 CST, use 'shutdown -c' to cancel.
    [root@centos ~]# shutdown -c
    [root@centos ~]# 
    Broadcast message from root@centos (Thu 2019-11-28 16:08:19 CST):

    The system shutdown has been cancelled at Thu 2019-11-28 16:09:19 CST!
    [root@centos ~]# shutdown -r 18:00
    Shutdown scheduled for Thu 2019-11-28 18:00:00 CST, use 'shutdown -c' to cancel.

2. poweroff

#关机

3. halt

#关机,只关闭系统,不关闭电源

选项:

    -p        #关机,系统和电源都关闭

4. init

#根据切换运行级别进行关机和重启

    0        关机
    6        重启

5. reboot

#重启

6. logout

#注销,不能退出非登录式shell
[root@centos ~]# logout 
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(模板机) at 16:11:11.

Type `help' to learn how to use Xshell prompt.
[E:\~]$ 

7. exit

#注销
[root@centos ~]# exit
logout
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(模板机) at 16:10:41.

Type `help' to learn how to use Xshell prompt.
[E:\~]$ 

8. clear

#清屏

9.显示命令帮助信息

man
    [root@centos ~]# man man
    [root@centos ~]# man help

help
    [root@centos ~]# man --help
    [root@centos ~]# ls --help
    Usage: ls [OPTION]... [FILE]...
    List information about the FILEs (the current directory by default).
    Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

    Mandatory arguments to long options are mandatory for short options too.
      -a, --all                  do not ignore entries starting with .
      -A, --almost-all           do not list implied . and ..
          --author               with -l, print the author of each file
      -b, --escape               print C-style escapes for nongraphic characters
          --block-size=SIZE      scale sizes by SIZE before printing them; e.g.,
                                   '--block-size=M' prints sizes in units of
                                   1,048,576 bytes; see SIZE format below
      -B, --ignore-backups       do not list implied entries ending with ~
      -c                         with -lt: sort by, and show, ctime (time of last
                                   modification of file status information);
                                   with -l: show ctime and sort by name;
                                   otherwise: sort by ctime, newest first

    [root@centos ~]# help help
    help: help [-dms] [pattern ...]
        Display information about builtin commands.

        Displays brief summaries of builtin commands.  If PATTERN is
        specified, gives detailed help on all commands matching PATTERN,
        otherwise the list of help topics is printed.

        Options:
          -d    output short description for each topic
          -m    display usage in pseudo-manpage format
          -s    output only a short usage synopsis for each topic matching
            PATTERN

        Arguments:
          PATTERN    Pattern specifiying a help topic

        Exit Status:
        Returns success unless PATTERN is not found or an invalid option is given.


info

10. ip

#显示ip地址的命令

    ip  address    /   ip   a      #显示所有网卡的ip地址

    ip  address show  eth0   /   ip  a  s eth0   #显示指定网卡信息

11. ifconfig

#显示ip地址的命令,默认显示所有网卡信息

ifconfig   eth0        #显示指定网卡信息

12. hostname

#显示系统主机名 

选项:

    -i        #显示IPv6地址及外网ip地址
    -I        #只显示外网ip地址
[root@centos ~]# hostname -i
fe80::466f:75d3:8e41:406b%eth0 fe80::42:11ff:feba:3a33%docker0     fe80::449c:f6ff:feda:f3df%veth4ebb85c fe80::cc20:1bff:fe93:58c7%veth741145f fe80::c8cf:38ff:fee5:aa9f%vethd439c57 10.0.0.100 172.17.0.1


[root@centos ~]# hostname -I
10.0.0.100 172.17.0.1 

13. history

[root@centos ~]# history 
    1  yum clean all
    2  yum makecache
    3  mkdir /repo
    4  mv /etc/yum.repos.d/* /repo/
    5  cp -p /repo/CentOS-Base.repo /etc/yum.repos.d/
    6  ll
    7  cd /etc/yum.repos.d/
    8  ls
    9  yum clean all

#显示历史命令

选项:

    -W        #将命令记录到文件中
    -d        #删除指定的命令记录  id  
    -c        #清空历史记录
[root@centos ~]# history 
    1  yum clean all
    2  yum makecache
    3  mkdir /repo
    4  mv /etc/yum.repos.d/* /repo/
    5  cp -p /repo/CentOS-Base.repo /etc/yum.repos.d/

[root@centos ~]# history -d 5

14. alias

#设置别名
[root@centos ~]# alias network='cd /etc/sysconfig/network-scripts/'
[root@centos ~]# network 
[root@centos network-scripts]# pwd
/etc/sysconfig/network-scripts

15. unalias

#取消别名
[root@centos ~]# unalias network     #取消别名

16. ping

#网络扫描工具
    -c<完成次数>:设置完成要求回应的次数;
    -s<数据包大小>:设置数据包的大小;
    -t<存活数值>:设置存活数值TTL的大小;
    -i<间隔秒数>:指定收发信息的间隔时间;

[root@centos ~]# ping -c 2 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.026 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.051 ms

--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.026/0.038/0.051/0.013 ms

[root@centos ~]# ping -c 2 -s 100 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 100(128) bytes of data.
108 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.048 ms
108 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.027 ms

--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.027/0.037/0.048/0.012 ms

[root@centos ~]# ping -c 2 -s 100 -i 5 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 100(128) bytes of data.
108 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.025 ms
108 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.030 ms

--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 4999ms
rtt min/avg/max/mdev = 0.025/0.027/0.030/0.005 ms

17.pwd

#显示当前所在的工作目录

案例:

[root@whb ~]# pwd
/root
[root@whb ~]# cd   /etc/sysconfig/
[root@whb sysconfig]# pwd
/etc/sysconfig

18.cd

#切换目录

案例 :

[root@whb /etc/sysconfig]# cd  ~        #快速的回到家目录
[root@whb ~]# cd                #快速的回到家目录
[root@whb ~]# cd .                #保持当前目录不变
[root@whb ~]# cd ..                #当前目录的上一级的目录
[root@whb /]# cd -                #切换到上一次所在的位置
/root
[root@whb ~]# cd  /                #切换到根目录

19.tree

#以树状型显示目录结构

系统中默认没有此命令,需要自行安装    yum install tree

选项:

-a        #显示所有文件,包含隐藏文件
-d        #显示目录
-L        #显示目录的级数,后面跟数字
-F        #给不同类型的文件加以标识符,便于快速区分文件类型

*    #可执行文件
=    #socket文件,套接字文件
|    #管道文件
/    #目录
@    #链接文件
>    #普通文件

案例:
[root@whb /usr/local]# tree      #不加路径的情况下,默认针对的是当前目录操作
.
├── bin
├── etc
├── games
├── include
├── lib
├── lib64
├── libexec
├── sbin
├── share

[root@whb ~]# tree -a          #显示所有的文件和目录,包括隐藏文件,以点开头的文件就是隐藏文件
.
├── 123
├── anaconda-ks.cfg
├── .bash_history
├── .bash_logout
├── .bash_profile
├── .bashrc
├── .cshrc
├── klefgrjm
├── .pki
│   └── nssdb
└── .tcshrc

2 directories, 9 files
[root@whb ~]# tree  
.
├── 123
├── anaconda-ks.cfg
└── klefgrjm

0 directories, 3 files

[root@whb ~]# tree  -d  /var/log    #只显示目录
/var/log
├── anaconda
├── audit
├── mariadb
├── nginx
├── php-fpm
├── rhsm
└── tuned

7 directories

[root@whb ~]# tree  -F  /var/log/        #给不同的文件加上一个标识符

20.ls

#显示目录的详细信息

    选项:    

        -l    #以长格式显示目录列表
        -1    #数字1,以行的形式显示目录列表(不显示详细信息)
        -h    #以人类可读的形式显示目录列表
        -a    #显示所有文件和目录路,包括隐藏文件
        -p    #给目录上加根的标识符(/)
        -F    #给不同文件加上不同标识符
        -t    #根据修改时间进行排序,默认最先显示的是时间最新的
        -S    #根据文件大小进行排序
        -r    #倒叙排列(默认以字母顺序排序)
        -i    #显示目录文件的iNode号


案例:

[root@whb ~]# ls -l        #以长格式的形式显示目录的详细信息
total 8
-rw-r--r--. 1 root root    8 Nov 28 17:32 123
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 Nov 28 17:21 klefgrjm

[root@whb ~]# ls  -1            #数字1,以行的形式显示目录列表
123
anaconda-ks.cfg
klefgrjm

[root@whb ~]# ls  -la            #显示所有的文件
total 32
dr-xr-x---.  3 root root  174 Nov 28 18:25 .
dr-xr-xr-x. 18 root root  236 Nov 28 18:22 ..
-rw-r--r--.  1 root root    8 Nov 28 17:32 123
-rw-------.  1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
-rw-------.  1 root root  762 Nov 28 18:53 .bash_history
-rw-r--r--.  1 root root   18 Dec 29  2013 .bash_logout
-rw-r--r--.  1 root root  176 Dec 29  2013 .bash_profile
-rw-r--r--.  1 root root  176 Dec 29  2013 .bashrc
-rw-r--r--.  1 root root  100 Dec 29  2013 .cshrc
-rw-r--r--.  1 root root    0 Nov 28 17:21 klefgrjm
drwxr-----.  3 root root   19 Nov 26 21:51 .pki
-rw-r--r--.  1 root root  129 Dec 29  2013 .tcshrc

[root@whb ~]# ll            #系统别名   ===   ls  -l
total 8
-rw-r--r--. 1 root root    8 Nov 28 17:32 123
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 Nov 28 17:21 klefgrjm

[root@whb ~]# ll -h  /var/log/        #以人类的可读的形式显示文件大小
total 1.1M
drwxr-xr-x. 2 root   root   176 Nov 26 20:28 anaconda
drwx------. 2 root   root    23 Nov 26 20:30 audit
-rw-------. 1 root   root     0 Nov 29 03:15 boot.log
-rw-------. 1 root   root  8.3K Nov 27 03:08 boot.log-20191127
-rw-------. 1 root   root   16K Nov 28 03:49 boot.log-20191128
-rw-------. 1 root   root   16K Nov 29 03:15 boot.log-20191129
-rw-------. 1 root   utmp   384 Nov 27 19:51 btmp

[root@whb ~]# ll -p  /var/log/        #只跟目录加上一个根,方便表示目录
total 1092
drwxr-xr-x. 2 root   root     176 Nov 26 20:28 anaconda/
drwx------. 2 root   root      23 Nov 26 20:30 audit/
-rw-------. 1 root   root       0 Nov 29 03:15 boot.log
-rw-------. 1 root   root    8489 Nov 27 03:08 boot.log-20191127
-rw-------. 1 root   root   15865 Nov 28 03:49 boot.log-20191128

[root@whb ~]# ll  -F  /bin/        #给不同的文件加上不同的标识符


*    #可执行文件
=    #socket文件,套接字文件
|    #管道文件
/    #目录
@    #链接文件
>    #普通文件
[root@whb ~]# ll -t      #根据修改时间进行排序,默认最新的日期放在最上面
total 8
-rw-r--r--. 1 root root    8 Nov 28 17:32 123
-rw-r--r--. 1 root root    0 Nov 28 17:21 klefgrjm
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg

[root@whb ~]# ll -rt              #倒叙排序
total 8
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 Nov 28 17:21 klefgrjm
-rw-r--r--. 1 root root    8 Nov 28 17:32 123

[root@whb ~]# ll -S            #根据文件大小进行排序
total 8
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
-rw-r--r--. 1 root root    8 Nov 28 17:32 123
-rw-r--r--. 1 root root    0 Nov 28 17:21 klefgrjm

[root@whb ~]# ll -d              #只查看目录本身信息
dr-xr-x---. 3 root root 174 Nov 28 18:25 .

[root@whb ~]# ll  -i            #显示inode号码
total 8
67157611 -rw-r--r--. 1 root root    8 Nov 28 17:32 123
67157603 -rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
67157607 -rw-r--r--. 1 root root    0 Nov 28 17:21 klefgrjm

21. mkdir

#创建目录

选项:
-p        #递归创建目录
-m        #创建目录并设置权限
-v        #显示创建过程

案例:
[root@whb ~]# mkdir    /data        #绝对路径创建
[root@whb ~]# mkdir  data            #相对路径创建
[root@whb ~]# mkdir  data            #已存在时,再次创建会报错。
mkdir: cannot create directory ‘data’: File exists

[root@whb ~]# mkdir  -p  test/data        #创建多级目录
[root@whb ~]# ll
total 8
-rw-r--r--. 1 root root    8 Nov 28 17:32 123
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Nov 29 19:29 data
-rw-r--r--. 1 root root    0 Nov 28 17:21 klefgrjm
drwxr-xr-x. 3 root root   18 Nov 29 19:32 test
[root@whb ~]# ll  test/
total 0
drwxr-xr-x. 2 root root 6 Nov 29 19:32 data

[root@whb ~]# mkdir -m 700  oldboy        #给新创建的目录指定权限
[root@whb ~]# ll
total 8
-rw-r--r--. 1 root root    8 Nov 28 17:32 123
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Nov 29 19:29 data
-rw-r--r--. 1 root root    0 Nov 28 17:21 klefgrjm
drwx------. 2 root root    6 Nov 29 19:34 oldboy
drwxr-xr-x. 3 root root   18 Nov 29 19:32 test

[root@whb ~]# mkdir  -v  data1        #创建目录的时候显示创建过程
mkdir: created directory ‘data1’



#批量操作
[root@whb ~]# mkdir  oldboy{1..5}        #批量创建oldboy1..5
[root@whb ~]# ll
total 8
-rw-r--r--. 1 root root    8 Nov 28 17:32 123
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Nov 29 19:29 data
drwxr-xr-x. 2 root root    6 Nov 29 19:35 data1
-rw-r--r--. 1 root root    0 Nov 28 17:21 klefgrjm
drwx------. 2 root root    6 Nov 29 19:34 oldboy
drwxr-xr-x. 2 root root    6 Nov 29 19:38 oldboy1
drwxr-xr-x. 2 root root    6 Nov 29 19:38 oldboy2
drwxr-xr-x. 2 root root    6 Nov 29 19:38 oldboy3
drwxr-xr-x. 2 root root    6 Nov 29 19:38 oldboy4
drwxr-xr-x. 2 root root    6 Nov 29 19:38 oldboy5

[root@whb ~]# mkdir  oldboy{a..z}        #生成字母序列 

[root@whb ~]# mkdir  old{whb,zeng,jia}    #创建无序的多个目录,使用逗号分隔 
[root@whb ~]# ll
drwxr-xr-x. 2 root root    6 Nov 29 19:40 oldjia
drwxr-xr-x. 2 root root    6 Nov 29 19:40 oldwhb
drwxr-xr-x. 2 root root    6 Nov 29 19:40 oldzeng
drwxr-xr-x. 3 root root   18 Nov 29 19:32 test

[root@whb ~]# mkdir  -p  data/test{1..10}/data{1..10}/oldboy{1..10}
1110 directories, 0 files

[root@whb opt]# mkdir  DATA        #linux系统中,是区分大小写的
[root@whb opt]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 29 19:50 cd
drwxr-xr-x. 2 root root 6 Nov 29 19:48 data
drwxr-xr-x. 2 root root 6 Nov 29 19:53 DATA


{}        特殊字符,通配符    作用:生成序列

22. touch

#创建文件,修改已存在的文件或者目录的时间戳

案例:
[root@whb opt]# touch  test.txt
[root@whb opt]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 29 19:46 test.txt
[root@whb opt]# touch  test.txt
[root@whb opt]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 29 19:47 test.txt
[root@whb opt]# mkdir  data
[root@whb opt]# ll
total 0
drwxr-xr-x. 2 root root 6 Nov 29 19:47 data
-rw-r--r--. 1 root root 0 Nov 29 19:47 test.txt
[root@whb opt]# touch  data
[root@whb opt]# ll
total 0
drwxr-xr-x. 2 root root 6 Nov 29 19:48 data
-rw-r--r--. 1 root root 0 Nov 29 19:47 test.txt

[root@whb opt]# touch  data{1..10}.txt        #创建10个不同的文件
[root@whb opt]# ll
total 0
    -rw-r--r--. 1 root root 0 Nov 29 19:50 cd
drwxr-xr-x. 2 root root 6 Nov 29 19:48 data
-rw-r--r--. 1 root root 0 Nov 29 19:51 data10.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data1.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data2.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data3.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data4.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data5.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data6.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data7.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data8.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data9.txt

23. cp

#复制,拷贝
选项:
-p        #保持属性
-r        #递归复制
-d        #保持链接文件
-a        ==    -pdr
-i        #文件存在时,提示是否覆盖
-t        #把源目标和目标的位置进行调换

案例:
[root@whb opt]# cp   test.txt  /mnt            
[root@whb opt]# ll /mnt
total 0
-rw-r--r--. 1 root root 0 Nov 29 19:59 test.txt
[root@whb opt]# cp  -p  data9.txt  /mnt    #复制的同时,保持文件的属性
[root@whb opt]# ll /mnt
total 0
-rw-r--r--. 1 root root 0 Nov 29 19:51 data9.txt
-rw-r--r--. 1 root root 0 Nov 29 19:59 test.txt

[root@whb opt]# cp  -p  data9.txt  /mnt/data.log    #复制的时候,可以重命名
[root@whb opt]# ll /mnt
total 0
-rw-r--r--. 1 root root 0 Nov 29 19:51 data9.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data.log
-rw-r--r--. 1 root root 0 Nov 29 19:59 test.txt

[root@whb opt]# cp   data10.txt   test.log        #使用相对路径复制

[root@whb opt]# cp  data/   /mnt
cp: omitting directory ‘data/’
[root@whb opt]# cp  -r  data/  /mnt    #复制目录要使用-r  递归复制
[root@whb opt]# ll /mnt
total 0
drwxr-xr-x. 2 root root 6 Nov 29 20:03 data
-rw-r--r--. 1 root root 0 Nov 29 19:51 data9.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data.log
-rw-r--r--. 1 root root 0 Nov 29 19:59 test.txt

[root@whb opt]# cp -d  /etc/grub2.cfg  ./grub2.cfg.log     #保持软连接
[root@whb opt]# ll
lrwxrwxrwx. 1 root root   22 Nov 29 20:05 grub2.cfg.log -> ../boot/grub2/grub.cfg

[root@whb opt]# cp -rd  /bin  /binn        #递归复制,并保持软连接
[root@whb opt]# ll  /binn -d
lrwxrwxrwx. 1 root root 7 Nov 29 20:07 /binn -> usr/bin
[root@whb opt]# cp  /bin  /binnn
cp: omitting directory ‘/bin’
[root@whb opt]# cp  -a  /bin  /binnn        #-a   ====  -pdr
[root@whb opt]# ll -d /binnn
lrwxrwxrwx. 1 root root 7 Nov 26 20:22 /binnn -> usr/bin
[root@whb opt]# ll  -d /bin
lrwxrwxrwx. 1 root root 7 Nov 26 20:22 /bin -> usr/bin

[root@whb opt]# cp  data9.txt   /mnt    #对方文件已经存在,复制时会提示是否覆盖   -i  系统默认的别名
cp: overwrite ‘/mnt/data9.txt’? n   

[root@whb opt]# \cp  data9.txt   /mnt    #强制覆盖  

[root@whb opt]# cp -t   ./   /mnt/data.log  #把源目标和目标文件进行位置调换

24. mv

#移动和重命名

选项:
-f        #强制覆盖
-i        #提示是否覆盖
-t        #把源目标和目标文件进行位置调换

案例:
[root@whb opt]# mv data.log   /tmp
[root@whb opt]# ll  /tmp/
total 4
-rw-r--r--. 1 root root   0 Nov 29 20:17 data.log

[root@whb opt]# mv data/  /tmp        #移动目录,不需要递归
[root@whb opt]# ll /tmp/
total 4
drwxr-xr-x. 2 root root   6 Nov 29 19:48 data
-rw-r--r--. 1 root root   0 Nov 29 20:17 data.log

[root@whb opt]# mv  test.txt  /tmp/data.log    #文件存在时,提示是否覆盖  -i
mv: overwrite ‘/tmp/data.log’? n

[root@whb opt]# mv -f  test.txt   /tmp/data.log     #强制复制

[root@whb opt]# mv -t  ./  /tmp/data.log    #把源目标跟目标文件的位置进行调换

25. rename

#重命名
[root@whb opt]# rename  data10          test          data10.txt        

                命令        旧的字符串   新的字符串        文件名 

26. rm

#删除

选项:
-f        #强制删除
-r        #删除目录
-i        #提示是否删除

案例:
[root@whb opt]# rm  bin            #提示是否删除  -i   系统默认的别名
rm: remove symbolic link ‘bin’? n

[root@whb opt]# rm  -f  bin        #强制删除
[root@whb opt]# rm -f  DATA/
rm: cannot remove ‘DATA/’: Is a directory
[root@whb opt]# rm -rf  DATA/        #递归删除 

[root@whb opt]# rm -rf ./*            #删除一个命令下面的所有内容

[root@whb ~]# rm -rf /root/*        #删除目录的下所有内容

27. echo

#显示你要输出的结果,创建新文件,写入内容到文件中,打印变量,给输出结果加上颜色

选项:

-n        #不显示换行符
-e        #支持特殊的字符

案例:
#显示特殊字符

[root@whb ~]# echo  hello world
hello world
[root@whb ~]# echo -e  "hello\nworld"            #\n换行符
hello
world
[root@whb ~]# echo -e  "hello\tworld"            #\t  tab键
hello    world

#打印变量
[root@whb ~]# echo $PS1
\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\$
[root@whb ~]# echo $USER
root

#创建新文件,并写入内容到文件中              
[root@whb ~]# echo  hello world  > test.txt            #   >   标准输出重定向,覆盖源文件内容
[root@whb ~]# ll
total 4
-rw-r--r--. 1 root root 12 Dec  2 18:24 test.txt

[root@whb ~]# cat test.txt 
123
[root@whb ~]# echo  456 >>  test.txt                 # >>   标准输出追加重定向,将内容追加到文件的底部
[root@whb ~]# ll
total 4
-rw-r--r--. 1 root root 8 Dec  2 18:28 test.txt
[root@whb ~]# cat test.txt 
123
456

[root@whb ~]# echo  $USER        #打印变量
root
[root@whb ~]# echo  '$USER'        #强引用,所见即所得
$USER
[root@whb ~]# echo  "$USER"        #弱引用,所见即所得,会解析变量
root
[root@whb ~]# echo {1..5}        #所见即所得,支持通配符,会解析变量
1 2 3 4 5
[root@whb ~]# echo '{1..5}'
{1..5}
[root@whb ~]# echo "{1..5}"
{1..5}
[root@whb ~]# alias name=hostname
[root@whb ~]# 
[root@whb ~]# name
whb
[root@whb ~]# alias name=hostname -I        #不加引号,如果定义的值出现空格,不会看做是一个整体
-bash: alias: -I: not found
[root@whb ~]# alias name='hostname -I'
[root@whb ~]# name
10.0.0.100 


单双引号及不加引号的区别

不加引号:    #所见即所得,支持通配符,会解析变量,如果定义的值出现空格,不会看做是一个整体

单引号:    #强引用,所见即所得

双引号:    #弱引用,所见即所得,会解析变量

反引号:    #``  会优先执行反引号里面的命令,将命令的输出结果交给外面的命令,``里面必须是命令, === $()

[root@whb ~]# echo  `hostname`
whb
[root@whb ~]# echo $(hostname)
whb

echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"

[root@whb ~]# echo -e "    好湿\n江山风景美如画;\n本想吟诗赞天下。\n奈何自己没文化;\n一句卧槽浪好大。"
    好湿
江山风景美如画;
本想吟诗赞天下。
奈何自己没文化;
一句卧槽浪好大。

28. cat

#查看文件内容,合并多个文件,创建新文件及编辑文件,显示行号

选项:
-n        #给输出结果加上行号
-A        #给输出内容每行的结尾加上一个标识符

案例:
[root@oldboy ~]# cat  test.txt 
123
456
[root@oldboy ~]# cat -n  test.txt
     1    123
     2    456
[root@oldboy ~]# cat -A test.txt
123$
456$
[root@oldboy ~]# echo  '123456 '  >>test.txt
[root@oldboy ~]# cat test.txt
123
456
123456 
[root@oldboy ~]# cat -A  test.txt 
123$
456$
123456 $

#合并多个文件

[root@oldboy ~]# cat hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@oldboy ~]# cat test.txt 
123
456
123456 
[root@oldboy ~]# cat hosts  test.txt 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
123
456
123456 
[root@oldboy ~]# cat hosts  test.txt  >test.log
[root@oldboy ~]# cat test.log 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
123
456
123456 

#创建一个文件及编辑文件
[root@oldboy ~]# cat >file.txt<<EOF
> oldboy
> 123456
> olfgirl
> EOF
[root@oldboy ~]# cat file.txt 
oldboy
123456
olfgirl
[root@oldboy ~]# cat >>file.txt<<eof
> test
> eof
[root@oldboy ~]# cat file.txt 
oldboy
123456
olfgirl
test

29. tac

#倒着显示文件内容,默认首行显示文章最后一行

案例:
[root@oldboy ~]# tac file.txt
test
olfgirl
123456
oldboy

30. more

#分页显示文章内容,文章内容显示完成后自动退出

选项:
    -n        #n表示数字,指定一页显示多少行
    +n        #指定从多少行开始显示

案例:
[root@oldboy lianxi]# more -10 services 
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
#
# Network services, Internet style
# IANA services version: last updated 2013-04-10
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1700, ``Assigned Numbers'' (October 1994).  Not all ports
--More--(0%)

    内部命令
    空格/f    #向下翻页
    b        #向上翻页
    回车键        #向下显示一行
    /        #搜索内容,不会高亮显示
        n        #向下查找
    q        #退出
    h        #帮助信息

31. less

#分页显示文件内容,文件显示完成后不会自动退出

选项:
    -i        #搜索时不区分大小写
    -N        #给显示出的内容加上行号

    内部命令:
        空格/f        #向下翻页
        b            #向上翻页
        回车键        #向下翻一行
        /            #搜索指定内容,但不会高亮显示
        n    #向上搜索
        N    #向下搜索
        =            #显示行号、字节、占比等信息 
        eg:    services lines 1-25/11176 byte 1116/670293 0%  (press RETURN)
        q            #退出

32. head

#显示文件头部信心,默认显示前十行

选项:
    -n        #指定显示多少行,后面跟数字
    -c        #显示文件的前几个字符

案例:
[root@oldboy ~]# head  services 
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
#
# Network services, Internet style
# IANA services version: last updated 2013-04-10
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1700, ``Assigned Numbers'' (October 1994).  Not all ports
[root@oldboy ~]# head  -n 1 services 
# /etc/services:
[root@oldboy ~]# head -1 services 
# /etc/services:
[root@oldboy ~]# head -2 services 
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $

[root@oldboy ~]# head -c 5 services             #显示文件的前5个字符
# /et[root@oldboy ~]# 

33. tail

#显示文件尾部信息,默认显示后十行

选项:
    -n        #指定显示多少行,后面跟数字
    -c        #显示文件的后几个字符
    -f        #实时查看文件内容的更新
    -F        #实时查看文件内容的更新,当文件不存在时,会一直尝试读取该文件

案例:
    [root@oldboy ~]# tail  services
3gpp-cbsp       48049/tcp               # 3GPP Cell Broadcast Service Protocol
isnetserv       48128/tcp               # Image Systems Network Services
isnetserv       48128/udp               # Image Systems Network Services
blp5            48129/tcp               # Bloomberg locator
blp5            48129/udp               # Bloomberg locator
com-bardac-dw   48556/tcp               # com-bardac-dw
com-bardac-dw   48556/udp               # com-bardac-dw
iqobject        48619/tcp               # iqobject
iqobject        48619/udp               # iqobject
matahari        49000/tcp               # Matahari Broker
[root@oldboy ~]# tail  -n 1 services 
matahari        49000/tcp               # Matahari Broker
[root@oldboy ~]# tail  -1   services 
matahari        49000/tcp               # Matahari Broker
[root@oldboy ~]# cat -n services  | tail -1  
 11176    matahari        49000/tcp               # Matahari Broker

|        #管道,将管道前面的命令的输出结果交给管道后面的命令进行处理

[root@oldboy ~]# tail -c5  services         #显示最后5个字符,
oker                #最后有一个换行符


[root@oldboy ~]# tail  -f  test.log         #实时的查看文件的更新
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
123
456
123456 



123

[root@oldboy ~]# tail  -20f  /var/log/messages        #指定从最后的20行内容开始显示

[root@oldboy ~]# tail  -F  file.log        #会实时的查看文件内容的更新,文件不存在时,会一直尝试读取,直到文件存在或者手动退出

tail: cannot open ‘file.log’ for reading: No such file or directory
tail: ‘file.log’ has appeared;  following end of new file
123
^C

34. tailf

#实时查看文件的更新,默认显示最后十行,当文件没有更新时,不会读取磁盘,减少IO读写

选项:
    -n        #取消默认输出,显示指定的行数

案例:
[root@oldboy ~]# tailf  /var/log/messages        

[root@oldboy ~]# tailf -20   /var/log/message

35. grep

#三剑客之一    三剑客的老三   

#文本过滤,给过滤出来的内容加上颜色

    选项:

        -v            #排除,取反
        -i            #忽略大小写
        -n            #给过滤出来的内容加上所在文件的行号
        -c            #统计过虑出来的行数
        -o            #只显示匹配的内容
        -w            #精确匹配
        -E            #支持扩展正则
        -r            #递归过滤
        -R            #递归过滤
        -A            #匹配内容向下多少行 
        -B            #匹配内容向上多少行
        -C            #匹配内容向上向下各多少行

        ^            #以什么开头
        $            #以什么为结尾
        ^$            #空行
        .            #任意一个字符,换行符除外
        .*            #所有
        \            #取消特殊符号的含义
        |            #扩展正则,或者

[root@whb ~]# cp  /etc/passwd   ./

[root@whb ~]# grep  'root'  passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@whb ~]# grep  '/sbin/nologin'  passwd
bin:x:1:1:bin:/bin:/sbin/nologin
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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
www:x:666:666::/home/www:/sbin/nologin
nginx:x:665:665:nginx user:/var/cache/nginx:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
[root@whb ~]# grep  -v  '/sbin/nologin'  passwd                #-v        排除
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
test:x:1000:1000::/home/test:/bin/bash

[root@whb ~]# grep  -i  'root'  passwd                #忽略大小写
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ROOT

[root@whb ~]# grep  -n  'root'  passwd         #显示该行内容在文件的所在行号
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

[root@whb ~]# grep  -c  'root'  passwd         #统计匹配root字符串的行数
2

[root@whb ~]# grep -o  'root'  passwd         #只显示匹配的内容
root
root
root
root
[root@whb ~]# grep -o  'root'  passwd  | grep -c 'root'   #统计匹配的root的次数
4

[root@whb ~]# echo -e  'roott\nrootooo'  >>passwd     
[root@whb ~]# grep  'root'  passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
roott
rootooo
[root@whb ~]# grep  -w  'root'   passwd             #精确匹配root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[root@whb ~]# mkdir   data
[root@whb ~]# mkdir   test
[root@whb ~]# echo  'root'  >>data/test.txt
[root@whb ~]# echo  'root'  >>test/data.txt
[root@whb ~]# ll
total 680
drwxr-xr-x. 2 root root     22 Dec  3 18:04 data
-rw-r--r--. 1 root root      4 Dec  2 20:19 file.log
-rw-r--r--. 1 root root     27 Dec  2 19:31 file.txt
-rw-r--r--. 1 root root    158 Dec  2 19:26 hosts
-rw-r--r--. 1 root root   1100 Dec  3 18:01 passwd
-rw-r--r--. 1 root root 670293 Dec  2 19:36 services
drwxr-xr-x. 2 root root     22 Dec  3 18:04 test
-rw-r--r--. 1 root root    178 Dec  2 20:14 test.log
-rw-r--r--. 1 root root     16 Dec  2 19:23 test.txt
[root@whb ~]# grep  'root'  ./*
grep: ./data: Is a directory
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott
./passwd:rootooo
./services:rootd           1094/tcp                # ROOTD
./services:rootd           1094/udp                # ROOTD
grep: ./test: Is a directory
[root@whb ~]# grep  -r  'root'  ./*                #递归过滤
./data/test.txt:root
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott
./passwd:rootooo
./services:rootd           1094/tcp                # ROOTD
./services:rootd           1094/udp                # ROOTD
./test/data.txt:root

[root@whb ~]# grep  -R  'root'  ./*            #递归过滤
./data/test.txt:root
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott
./passwd:rootooo
./services:rootd           1094/tcp                # ROOTD
./services:rootd           1094/udp                # ROOTD
./test/data.txt:root

[root@whb ~]# grep  'root|adm'  passwd 
[root@whb ~]# egrep  'root|adm'  passwd 
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
roott
rootooo
[root@whb ~]# grep -E  'root|adm'  passwd                 #扩展正则  |  表示或者   -E  支持扩展正则
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
roott
rootooo

[root@whb ~]# grep   'adm'  passwd 
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@whb ~]# grep -A2  'adm'  passwd             #匹配内容的行及向下两行  
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@whb ~]# grep -B2  'adm'  passwd             #匹配内容的行及向上两行
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@whb ~]# grep -C2  'adm'  passwd             #匹配内容的行及向上向下各两行
bin:x:1:1:bin:/bin:/sbin/nologin
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@whb ~]# grep  '^root'  passwd             #匹配以什么开头的行
root:x:0:0:root:/root:/bin/bash
roott
rootooo
[root@whb ~]# grep  't$'  passwd                 #匹配以谁为结尾的行
halt:x:7:0:halt:/sbin:/sbin/halt
roott
ooroot

[root@whb ~]# grep  '.'   passwd             #匹配换行符以外的任意一个字符
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@whb ~]# grep  '\.$'  passwd             #取消特殊字符的含义
roottt.

[root@whb ~]# grep  '^$'  passwd             #表示空行,有空格的和tab键的空行不匹配

[root@whb ~]# grep  '.*'  passwd            #表示所有,包括空行

36. locate

#根据本地的数据库查找文件,数据库每天更新一次

    -i            #忽略大小写
    -r            #支持简单的正则使用

[root@whb ~]# yum install  -y  mlocate

[root@whb ~]# locate     hostname
/etc/hostname
/etc/dbus-1/system.d/org.freedesktop.hostname1.conf
/etc/selinux/targeted/active/modules/100/hostname
/etc/selinux/targeted/active/modules/100/hostname/cil
/etc/selinux/targeted/active/modules/100/hostname/hll
/etc/selinux/targeted/active/modules/100/hostname/lang_ext

[root@whb ~]# updatedb 
[root@whb ~]# locate     hostname
/etc/hostname
/etc/dbus-1/system.d/org.freedesktop.hostname1.conf
/etc/selinux/targeted/active/modules/100/hostname
/etc/selinux/targeted/active/modules/100/hostname/cil
/etc/selinux/targeted/active/modules/100/hostname/hll
/etc/selinux/targeted/active/modules/100/hostname/lang_ext
/root/hostname
/usr/bin/hostname

[root@whb ~]# locate  -i     hostname            #-i  忽略大小写  
/etc/hostname
/etc/dbus-1/system.d/org.freedesktop.hostname1.conf
/etc/selinux/targeted/active/modules/100/hostname
/etc/selinux/targeted/active/modules/100/hostname/cil
/etc/selinux/targeted/active/modules/100/hostname/hll
/etc/selinux/targeted/active/modules/100/hostname/lang_ext
/root/HOSTNAME
/root/hostname

[root@whb ~]# locate  -r   hostname$            #支持简单的正则
/etc/hostname
/etc/selinux/targeted/active/modules/100/hostname
/root/hostname
/usr/bin/hostname
/usr/bin/nmtui-hostname
/usr/lib64/gettext/hostname
[root@whb ~]# locate -r  ^hostname            #错误的写法 
[root@whb ~]# locate  -r  ^/usr/share/doc/hostname
/usr/share/doc/hostname-3.13
/usr/share/doc/hostname-3.13/COPYRIGHT

37. whereis

#根据文件类型查找文件,二进制文件,man帮助文件,源代码文件

    选项:

        -b        #二进制文件
        -m        #说明文件
        -s         #源代码文件

[root@whb ~]# whereis   hostname        #显示所有类型的文件
hostname: /usr/bin/hostname /etc/hostname /usr/share/man/man1/hostname.1.gz /usr/share/man/man5/hostname.5.gz
[root@whb ~]# whereis   -b hostname        #显示二进制文件
hostname: /usr/bin/hostname /etc/hostname
[root@whb ~]# whereis   -m   hostname    #帮助文件
hostname: /usr/share/man/man1/hostname.1.gz /usr/share/man/man5/hostname.5.gz
[root@whb ~]# whereis   -s   hostname    #源代码文件
hostname:[root@whb ~]# 

38. which

#查找命令的绝对路径,根据PATH环境变量下进行查找

[root@whb ~]# which   hostname
/usr/bin/hostname
[root@whb ~]# which   hostnamectl
/usr/bin/hostnamectl

39. type

#显示不同类型的命令

    -a        #显示所有类型命令的绝对路径
    -p        #只显示外部命令的绝对路径,不包含其他内容

[root@whb ~]# type   cd
cd is a shell builtin
[root@whb ~]# 
[root@whb ~]# type -a  cd
cd is a shell builtin
cd is /usr/bin/cd
[root@whb ~]# type -p  ping
/usr/bin/ping

40. find

#查找文件

    -name        #根据名称查找
    -iname        #不区分大小写查找
    -maxdepth    #根据层级查找匹配的条件

    -print        #打印  默认的动作 

[root@whb ~]# find  /  -name  "hostname"          #根据名称查找
/proc/sys/kernel/hostname
/etc/selinux/targeted/active/modules/100/hostname
/etc/hostname
/root/hostname
/usr/bin/hostname
/usr/lib64/gettext/hostname
[root@whb ~]# find  /  -iname  "hostname"          #忽略大小写
/proc/sys/kernel/hostname
/etc/selinux/targeted/active/modules/100/hostname
/etc/hostname
/root/hostname
/root/HOSTNAME
/usr/bin/hostname
/usr/lib64/gettext/hostname
/usr/lib64/perl5/auto/Sys/Hostname
[root@whb ~]# find  /  -iname  "hostname*"      #以hostname开头的文件
/proc/sys/kernel/hostname
/etc/selinux/targeted/active/modules/100/hostname
/etc/hostname
/root/hostname
/root/HOSTNAME
/usr/bin/hostname
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/man/man5/hostname.5.gz
/usr/share/bash-completion/completions/hostnamectl
[root@whb ~]# find  /  -iname  "*hostname"          #以hostname为结尾的文件
/proc/sys/kernel/hostname
/sys/kernel/debug/tracing/events/syscalls/sys_enter_sethostname
/sys/kernel/debug/tracing/events/syscalls/sys_exit_sethostname
/etc/selinux/targeted/active/modules/100/hostname
/etc/hostname
/usr/lib64/gettext/hostname
/usr/lib64/perl5/auto/Sys/Hostname
[root@whb ~]# find  /  -iname  "*hostname*"          #文件名中包含hostname的文件
/proc/sys/kernel/hostname
/sys/kernel/debug/tracing/events/syscalls/sys_enter_sethostname
/sys/kernel/debug/tracing/events/syscalls/sys_exit_sethostname
/etc/dbus-1/system.d/org.freedesktop.hostname1.conf
/etc/selinux/targeted/active/modules/100/hostname
/etc/hostname
/root/hostname
/root/HOSTNAME

[root@whb ~]# find  /etc  -iname  "hostname"   -print
/etc/selinux/targeted/active/modules/100/hostname
/etc/hostname
[root@whb ~]# find  /etc -maxdepth 2  -iname  "hostname"   -print        #目录层级
/etc/hostname
[root@whb ~]# find  /etc -maxdepth 1  -iname  "hostname"   -print
/etc/hostname

41. rz/sz

rz        #上传,不支持4G以上的文件

    -E            #如果文件已经存在,则上传的时候修改名称,在文件名的后面加上数字  0.1.2...

[root@whb ~]# rz        #上传本地文件到服务器上面

[root@whb ~]# ll
total 688
drwxr-xr-x. 2 root root     22 Dec  3 18:04 data
-rw-r--r--. 1 root root   7748 Aug 17 17:25 djangoauth.md

[root@whb ~]# rz -E        #如果文件已经存在,则上传的时候修改名称,在文件名的后面加上数字  0.1.2...

[root@whb ~]# ll
total 696
drwxr-xr-x. 2 root root     22 Dec  3 18:04 data
-rw-r--r--. 1 root root   7748 Aug 17 17:25 djangoauth.md
-rw-r--r--. 1 root root   7748 Aug 17 17:25 djangoauth.md.0


sz        #下载服务器上的文件到本地

[root@whb ~]# sz  file.log


联网下载 

42. curl

#根据url规则进行文件传输,主要用户访问网站    
-o        #将内容写入到指定的文件中

    -s        #静默输出

[root@whb ~]# curl  -o  baidu.html  www.baidu.com
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2381  100  2381    0     0  27351      0 --:--:-- --:--:-- --:--:-- 27686
[root@whb ~]# ll
total 700
-rw-r--r--. 1 root root   2381 Dec  3 20:11 baidu.html

[root@whb ~]# curl -s -o  bd.html  www.baidu.com        #-s     静默输出
[root@whb ~]# ll
total 704
-rw-r--r--. 1 root root   2381 Dec  3 20:11 baidu.html
-rw-r--r--. 1 root root   2381 Dec  3 20:12 bd.html

#下载nginx压缩包

[root@whb ~]# curl  -o  nginx.tar.gz  http://nginx.org/download/nginx-1.16.1.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
 29 1008k   29  301k    0     0   6621      0  0:02:35  0:00:46  0:01:49     0

43. wget

#根据url路径进行下载

-O        #指定的下载的路径及文件名称
    -q        #静默输出
    --limit-rate=20(k/m)        #限速下载

[root@whb ~]# wget  https://www.cnblogs.com/yoo2767/p/6016300.html        #使用默认的名称下载

#指定下载的名称

[root@whb ~]# wget  -O  echo.html    https://www.cnblogs.com/yoo2767/p/6016300.html

#静默输出  
[root@whb ~]# wget -q  -O  e.html    https://www.cnblogs.com/yoo2767/p/6016300.html

#限速下载

[root@whb ~]# wget  --limit-rate=20k      http://nginx.org/download/nginx-1.16.1.tar.gz

44. sort

#排序,默认分隔符是空白字符,默认以字母或者数字的顺序进行排序

    选项:
        -t        #指定分隔符 
        -k        #指定以第几列进行排序  ,后面跟数字  
        -n        #以数值大小进行排序 
        -r        #倒序排序  

[root@whb ~]# sort  passwd             #根据默认进行排序。默认以第一列进行排序  
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
test:x:1000:1000::/home/test:/bin/bash
www:x:666:666::/home/www:/sbin/nologin

[root@whb ~]# sort  -t ":"  -k3   passwd         #指定:为分隔符,以第三列进行排序
root:x:0:0:root:/root:/bin/bash
test:x:1000:1000::/home/test:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin

[root@whb ~]# sort  -t ":"  -nk3   passwd         #以数值的大小进行排序 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
test:x:1000:1000::/home/test:/bin/bash

[root@whb ~]# sort  -t ":"  -rnk3   passwd         #以数值的大小倒序排序
test:x:1000:1000::/home/test:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
[root@whb ~]# 

[root@whb ~]# cat sort.log 
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
[root@whb ~]# sort  sort.log
abc/1
abd/11
fger/8
fgrf/2
rgrgh/66
[root@whb ~]# sort  -t "/"  -k2  sort.log 
abc/1
abd/11
fgrf/2
rgrgh/66
fger/8
[root@whb ~]# sort  -t "/"  -nk2  sort.log 
abc/1
fgrf/2
fger/8
abd/11
rgrgh/66
[root@whb ~]# sort  -t "/"  -rnk2  sort.log 
rgrgh/66
abd/11
fger/8
fgrf/2
abc/1

[root@whb ~]# cat sort.log 
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
[root@whb ~]# sort  sort.log         #将重复的行进行排列在一起 
abc/1
abd/11
abd/11
fger/8
fger/8
fgrf/2
fgrf/2
rgrgh/66

45. uniq

#去重(必须是相邻的相同的行),统计,针对行操作  

    -c        #统计重复行的次数

[root@whb ~]# sort  sort.log  |  uniq   -c  
      1 abc/1
      2 abd/11
      2 fger/8
      2 fgrf/2
      1 rgrgh/66
[root@whb ~]# sort  sort.log  |  uniq   -c  | sort -n
      1 abc/1
      1 rgrgh/66
      2 abd/11
      2 fger/8
      2 fgrf/2
[root@whb ~]# sort  sort.log  |  uniq   -c  | sort -rn
      2 fgrf/2
      2 fger/8
      2 abd/11
      1 rgrgh/66
      1 abc/1

46. cut

#取列,截取字段

    -d        #指定分隔符,默认以tab键为分隔符
    -f        #取出指定的列,多个用逗号分割或者- 连续多列
    -c        #截取指定的字符,多个用逗号分割或者- 连续的多个字符

[root@whb ~]# cut  -d  ":"  -f7   passwd         #取出第七列
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/bash
/sbin/nologin
[root@whb ~]# cut  -d  ":"  -f7   passwd  | sort          #将重复的行排序在一起 
/bin/bash
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/shutdown
[root@whb ~]# cut  -d  ":"  -f7   passwd  | sort   | uniq         #去除重复的行
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/shutdown
[root@whb ~]# cut  -d  ":"  -f7   passwd  | sort   | uniq  -c     #统计重复的次数
      2 /bin/bash
      1 /bin/sync
      1 /sbin/halt
     19 /sbin/nologin
      1 /sbin/shutdown
[root@whb ~]# cut  -d  ":"  -f7   passwd  | sort   | uniq  -c  | sort -rn    #根据次数进行倒序排序
     19 /sbin/nologin
      2 /bin/bash
      1 /sbin/shutdown
      1 /sbin/halt
      1 /bin/sync

[root@whb ~]# cat sort.log 
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
[root@whb ~]# cut -d "/"  -f2  sort.log 
1
11
2
8
66
8
11
2
[root@whb ~]# cut -d "/"  -f2  sort.log  |sort -rn
66
11
11
8
8
2
2
1

[root@whb ~]# echo  "I am name  is student QQ is 1238376584"  > qq.txt    #取出姓名和QQ号码
[root@whb ~]# cat qq.txt
I am name  is student QQ is 1238376584
[root@whb ~]# cut  -d  " " -f3,8  qq.txt         #取出第三列和第八列,第四列是空,有两个空格
name is
[root@whb ~]# cut  -d  " " -f3,9  qq.txt 
name 1238376584
[root@whb ~]# cut  -d  " " -f3-9  qq.txt         #取出连续的多列
name  is student QQ is 1238376584

[root@whb ~]# cat qq.txt 
I am name  is student QQ is 1238376584
[root@whb ~]# cut  -c  1-3  qq.txt             #截取第一个到第三个字符
I a
[root@whb ~]# cut  -c  3  qq.txt             #截取第三个字符
a
[root@whb ~]# cut  -c  1,3  qq.txt             #截取第一个和第三个字符
Ia

47. tr

#替换,删除字符,只能单对单的替换

    -d        #删除字符 

[root@whb ~]# cut  -d ","  -f1,2  qq.txt      
I am name  is student QQ is,1238376584
[root@whb ~]# cut  -d " "  -f3,8  qq.txt  
name is,1238376584
[root@whb ~]# cut  -d " "  -f3,8  qq.txt   | tr  ","  " "     #将逗号替换为空格
name is 1238376584
[root@whb ~]# cut  -d " "  -f3,8  qq.txt   | tr  ","  " "  |cut -d " " -f1,3
name 1238376584
[root@whb ~]# tr  ","  " "  qq.txt 
tr: extra operand ‘qq.txt’
Try 'tr --help' for more information.
[root@whb ~]# tr  ","  " " < qq.txt         #单独针对文件操作时,必须使用 <
I am name  is student QQ is 1238376584
[root@whb ~]# tr  ","  " " < qq.txt  |cut -d " " -f3,9
name 1238376584


[root@whb ~]# tr  "a"  "1"  < qq.txt         #将所有的a替换为1
I 1m n1me  is student QQ is,1238376584
[root@whb ~]# tr  -d "m"  <qq.txt         #删除m这个字符
I a nae  is student QQ is,1238376584

#取出ip地址

[root@whb ~]# ip a s  eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:ae:0b:8a brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::c653:602a:38c6:e45/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@whb ~]# ip a s  eth0  | head -3 |tail -1
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@whb ~]# ip a s  eth0  | grep -w 'inet'
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@whb ~]# ip a s  eth0  | grep -w 'inet' | tr  "/"  " "
    inet 10.0.0.100 24 brd 10.0.0.255 scope global noprefixroute eth0
[root@whb ~]# ip a s  eth0  | grep -w 'inet' | tr  "/"  " " |cut -d " "  -f6
10.0.0.100

#取出IP地址
[root@whb ~]# ip a s  eth0  | grep -w  'inet'
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@whb ~]# ip a s  eth0  | grep -w  'inet' |cut -d " "  -f6
10.0.0.100/24
[root@whb ~]# ip a s  eth0  | grep -w  'inet' |cut -d " "  -f6 | cut  -d "/"  -f1
10.0.0.100

#取出ip地址
[root@whb ~]# ifconfig  eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::c653:602a:38c6:e45  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ae:0b:8a  txqueuelen 1000  (Ethernet)
        RX packets 3484131  bytes 4986775944 (4.6 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 364363  bytes 53078581 (50.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@whb ~]# ifconfig  eth0 |grep -w inet 
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
[root@whb ~]# ifconfig  eth0 |grep -w inet  | cut -d " "  -f10
10.0.0.100

#取出当前系统登录的用户的次数
[root@whb ~]# w -h
root     pts/0    10.0.0.1         19:10    9:03   0.01s  0.01s -bash
root     pts/1    10.0.0.1         19:10    9:03   0.00s  0.00s -bash
root     pts/2    10.0.0.1         Fri20    3.00s  0.95s  0.00s w -h
[root@whb ~]# w -h | cut  -d " " -f1
root
root
root
[root@whb ~]# w -h | cut  -d " " -f1 |uniq -c
      3 root
[root@whb ~]# w -h | cut  -d " " -f1 |uniq -c
      3 root
      1 test
[root@whb ~]# w  
 19:21:39 up 6 days, 32 min,  4 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.0.1         19:10   43.00s  0.01s  0.01s -bash
root     pts/1    10.0.0.1         19:10   11:03   0.00s  0.00s -bash
root     pts/2    10.0.0.1         Fri20    3.00s  0.95s  0.00s w
test     pts/3    10.0.0.1         19:21   21.00s  0.00s  0.00s -bash
[root@whb ~]# w  | more  +3
root     pts/0    10.0.0.1         19:10   50.00s  0.01s  0.01s -bash
root     pts/1    10.0.0.1         19:10   11:10   0.00s  0.00s -bash
root     pts/2    10.0.0.1         Fri20    2.00s  0.96s  0.00s w
test     pts/3    10.0.0.1         19:21   28.00s  0.00s  0.00s -bash

48. wc

#统计  字节大小 ,行数 ,列数  字符的长度  

选项:

    -l        #统计行数
    -c        #统计总字节大小
    -w        #统计总列数,默认以空白字符为分隔符
    -L        #统计最长的一行内容的长度

[root@whb ~]# wc   hosts        #显示所有的信息,总行数,总列数,总字节大小
  2  10 158 hosts
[root@whb ~]# ll hosts
-rw-r--r--. 1 root root 158 Dec  2 19:26 hosts
[root@whb ~]# cat hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@whb ~]# wc -l  hosts        #显示总行数
2 hosts
[root@whb ~]# wc -c  hosts        #显示总字节大小
158 hosts
[root@whb ~]# wc -w  hosts        #显示总的列数,默认以空白字符为分隔符
10 hosts
[root@whb ~]# wc -L hosts        #统计最长一行的字符数量,长度  
78 hosts

[root@whb ~]# name=12423145637892        #定义一个变量  
[root@whb ~]# echo $name                #打印变量
12423145637892
[root@whb ~]# echo $name |wc -L            #统计变量的长度
14

49. sed

#三剑客老二  ,擅长增删改查 

    -n        #取消默认输出
    -i        #真实的替换文件内容
    -r        #支持扩展正则

    内部命令:

        p        #打印
        d        #删除
        s        #替换
        g        #全局
        a        #追加
        i        #插入#多条命令的分割#表示连续的命令

1.查 

[root@whb ~]# sed -n  '1p'  passwd         #打印单行
root:x:0:0:root:/root:/bin/bash
[root@whb ~]# sed  -n  '1,3p'  passwd     #打印连续的多行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@whb ~]# sed  -n '1p;3p'  passwd     #打印不连续的多行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@whb ~]# sed -n  '$p'  passwd         #打印最后一行
ntp:x:38:38::/etc/ntp:/sbin/nologin



[root@whb ~]# sed  -n  '/root/p'  passwd         #过滤包含root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@whb ~]# sed  -n  '/^root/p'  passwd         #过滤以root开头的行
root:x:0:0:root:/root:/bin/bash
[root@whb ~]# sed  -nr   '/root|adm/p'  passwd     #过滤root或者adm的行
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@whb ~]# sed  -n   '/root/p;/adm/p'  passwd     #过滤root或者adm的行
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@whb ~]# sed  -n   '/^root/,/adm/p'  passwd     #过滤以root开头的行到adm的行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

2.删除 

[root@whb ~]# sed  '1d'  passwd         #删除第一行

[root@whb ~]# sed  '$d'  passwd            #删除最后一行

[root@whb ~]# sed  '1,20d'  passwd         #删除连续的多行

[root@whb ~]# sed  '1d;20d'  passwd        #删除不连续的多行

[root@whb ~]# sed  '/root/d'  passwd     #删除包含root的行

[root@whb ~]# sed -r  '/root|adm/d'  passwd    #删除不连续的多行

 [root@whb ~]# sed  '/root/d;/adm/d'  passwd #删除不连续的多行

 [root@whb ~]# sed  '/^root/,/adm/d'  passwd    #删除以root开头的行到包含adm的行

 [root@whb ~]# sed  '1,$d'  passwd         #删除所有


 3.增

 [root@whb ~]# sed  '$aoldboy'  sort.log        #在文件的最后一行追加oldboy
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
oldboy
[root@whb ~]# sed   '1aoldboy'  sort.log    #在文件的第一行后面追加oldboy
abc/1
oldboy
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2

[root@whb ~]# sed  '1ioldboy'  sort.log         #在第一行的前面插入oldboy
oldboy
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
[root@whb ~]# sed  '$ioldboy'  sort.log         #在最后一行前面插入oldboy
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
oldboy
fgrf/2

[root@whb ~]# sed  '1ioldboy\noldgirl'  sort.log     #插入多行
oldboy
oldgirl
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
[root@whb ~]# sed  '$aoldboy\noldgirl'  sort.log     #追加多行 
abc/1    
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
oldboy
oldgirl

4.替换 

[root@whb ~]# cat passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@whb ~]# sed  's#root#oldboy#g'  passwd         #把所有的root替换为oldboy   全局替换 
oldboy:x:0:0:oldboy:/oldboy:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin

[root@whb ~]# sed  's#root#oldboy#'  passwd         #替换每一行第一个匹配条件的
oldboy:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin

[root@whb ~]# sed  '10s#root#oldboy#g'  passwd         #针对行进行替换 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin

[root@whb ~]# sed  '10,11s#root#oldboy#g'  passwd         #操作多行替换  
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin
oldboy

[root@whb ~]# sed  '$s#root#oldboy#g'  passwd         #替换最后一行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
oldboy

[root@whb ~]# sed  '/^root/s#root#oldboy#g'  passwd         #替换以root开头的行中root替换为oldboy
oldboy:x:0:0:oldboy:/oldboy:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
oldboy

[root@whb ~]# sed  '/t$/s#root#oldboy#g'  passwd     #匹配以t为结尾的进行替换
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
oldboy

50. awk

#取列,计算,统计,数组,循环,判断

    -F    #指定分割符,默认是以空白字符为分隔符

    NR    #表示行号

    NF    #表示每一行的列数

    $NF    #表示最后一列

    $0    #整行内容

    $n    #n是数字   表示取出哪一列

    &&    #并且 

    ||    #或者#排除#取出连续的#多条命令分割

#取行
[root@whb ~]# awk  'NR==1'  passwd         #取出第一行
root:x:0:0:root:/root:/bin/bash
[root@whb ~]# awk  'NR==1,NR==3'  passwd     #取出第一行到第三行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@whb ~]# awk  'NR==1;NR==3' passwd         #取出第一行和第三行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin


[root@whb ~]# awk  'NR>10'  passwd         #取出大于10行的所有行的的内容
root
[root@whb ~]# awk 'NR<2'  passwd         #取出小于两行的内容
root:x:0:0:root:/root:/bin/bash
[root@whb ~]# awk 'NR<=2'  passwd         #小于等于
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@whb ~]# awk 'NR>=10'  passwd         #大于等于
operator:x:11:0:operator:/root:/sbin/nologin
root

[root@whb ~]# awk 'NR>=1 && NR<=10'  passwd         #取出大于等于第一行并且小于等于第十行    &&  并且
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

[root@whb ~]# awk 'NR>0 && NR<11'  passwd        #取出大于等于第一行并且小于等于第十行    &&  并且


[root@whb ~]# awk  'NR<2 || NR>10'  passwd         #取出小于2行或者大于10行   ||  或者
root:x:0:0:root:/root:/bin/bash
root

[root@whb ~]# awk  '{print NR,$0}'  passwd         #显示行号
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 root


[root@whb ~]# awk  '/root/'  passwd         #过滤出root的字符串
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
root
[root@whb ~]# awk  '/^root/'  passwd         #过滤出以root开头的字符串
root:x:0:0:root:/root:/bin/bash
root
[root@whb ~]# awk  '/root$/'  passwd         #过滤出以root为结尾的字符串
root
[root@whb ~]# awk  '/root|adm/'  passwd     #过滤出root或者adm的字符串
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root

[root@whb ~]# awk  '/root/;/adm/'  passwd     #过滤出root或者adm的字符串
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root

[root@whb ~]# awk  '/adm/,/sync/'  passwd     #过滤以adm的行到sync的行
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@whb ~]# awk   'BEGIN{FS=":"}{print $7}'  passwd         #取出文件的第七列
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin

[root@whb ~]# awk  -F:  '{print $7}'  passwd     #取出文件的第七列
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin

[root@whb ~]# awk  -F '[:]'  '{print $7}'  passwd 
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin

[root@whb ~]# awk  -F:  '{print $NF}'  passwd         #取出文件中的每一行的最后一列
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
root

[root@whb ~]# echo  'oldboy:123 oldgirl'  >>passwd 
[root@whb ~]# awk  '{print $2}'  passwd  |tail -1
oldgirl
[root@whb ~]# awk -F: '{print $2}'  passwd  |tail -1
123 oldgirl
[root@whb ~]# awk -F '[: ]' '{print $2}'  passwd  |tail -1        #支持多个分隔符  
123

#取出ip地址
[root@whb ~]# ifconfig  eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::c653:602a:38c6:e45  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ae:0b:8a  txqueuelen 1000  (Ethernet)
        RX packets 3515748  bytes 5009905896 (4.6 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 382062  bytes 54939915 (52.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@whb ~]# ifconfig  eth0 |awk  'NR==2'  
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
[root@whb ~]# ifconfig  eth0 |awk  'NR==2'   |awk  '{print $2}'
10.0.0.100
[root@whb ~]# ifconfig  eth0 |awk  'NR==2{print $2}'
10.0.0.100

#取出ip地址
[root@whb ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:ae:0b:8a brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::c653:602a:38c6:e45/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@whb ~]# ip a s eth0 |  awk 'NR==3' | awk  -F '[ /]*'  '{print $2}'
inet
[root@whb ~]# ip a s eth0 |  awk 'NR==3' | awk  -F '[ /]*'  '{print $3}'
10.0.0.100
[root@whb ~]# ip a s eth0 |  awk 'NR==3' | awk  -F '[ /]'  '{print $6}'
10.0.0.100


[root@whb ~]# awk  'NR!=1'  passwd         #排除第一列
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root
oldboy:123 oldgirl

[root@whb ~]# awk  '!/root/'  passwd         #排除包含root的字符串
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
oldboy:123 oldgirl
[root@whb ~]# 

[root@whb ~]# awk -F:  '/^root/{print $NF}'  passwd #取出满足以root开头的行并且打印出该行的最后一列
/bin/bash
root
[root@whb ~]# awk -F:  '/^root/{print $1,$2}'  passwd     #打印多列内容
root x
root 

[root@whb ~]# awk -F:  '/^root/{print $3,$1}'  passwd     #把第三列和第一列倒着显示
0 root
 root

51. column

#排序文件的格式

    -t        #以tab键的格式进行对文件内容排序

[root@whb ~]# awk -F:  '{print $1,$NF}'    /etc/passwd 
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
dbus /sbin/nologin
polkitd /sbin/nologin
sshd /sbin/nologin
postfix /sbin/nologin
www /sbin/nologin
nginx /sbin/nologin
apache /sbin/nologin
mysql /sbin/nologin
test /bin/bash
ntp /sbin/nologin
[root@whb ~]# awk -F:  '{print $1,$NF}'    /etc/passwd   |column   -t
root             /bin/bash
bin              /sbin/nologin
daemon           /sbin/nologin
adm              /sbin/nologin
sshd             /sbin/nologin
postfix          /sbin/nologin
www              /sbin/nologin
nginx            /sbin/nologin
apache           /sbin/nologin
mysql            /sbin/nologin
test             /bin/bash
ntp              /sbin/nologin

52. ln

#创建链接文件的命令

选项:

    -s        #创建软连接文件


软连接

    #相当于Windows上的快捷方式。文件里面存放着源文件的路径,并且可以执行1源文件。


[root@whb ~]# touch    test.log
[root@whb ~]# ll
total 0
-rw-r--r--. 1 root root 0 Dec  5 19:58 test.log
[root@whb ~]# ln -s  test.log   test        #相对路径创建
[root@whb ~]# ll
total 0
lrwxrwxrwx. 1 root root 8 Dec  5 19:58 test -> test.log
-rw-r--r--. 1 root root 0 Dec  5 19:58 test.log
[root@whb ~]# ln  -s  /root/test.log   /root/test.txt        #绝对路径创建
[root@whb ~]# ll
total 0
lrwxrwxrwx. 1 root root  8 Dec  5 19:58 test -> test.log
-rw-r--r--. 1 root root  0 Dec  5 19:58 test.log
lrwxrwxrwx. 1 root root 14 Dec  5 19:59 test.txt -> /root/test.log

[root@whb ~]# cp -a   test.txt   /opt/
[root@whb ~]# ll /opt/
total 4481024
-rw-r--r--. 1 root root 4588568576 Dec  3 20:08 CentOS-7-x86_64-DVD-1810.iso
lrwxrwxrwx. 1 root root         14 Dec  5 19:59 test.txt -> /root/test.log
[root@whb ~]# cp -a test  /opt/
[root@whb ~]# ll /opt/
total 4481024
-rw-r--r--. 1 root root 4588568576 Dec  3 20:08 CentOS-7-x86_64-DVD-1810.iso
lrwxrwxrwx. 1 root root          8 Dec  5 19:58 test -> test.log        #失效
lrwxrwxrwx. 1 root root         14 Dec  5 19:59 test.txt -> /root/test.log

[root@whb ~]# ln -s  /root/data/   /opt/data        #对目录创建软连接
[root@whb ~]# ll /opt/
total 4481024
-rw-r--r--. 1 root root 4588568576 Dec  3 20:08 CentOS-7-x86_64-DVD-1810.iso
lrwxrwxrwx. 1 root root         11 Dec  5 20:05 data -> /root/data/
lrwxrwxrwx. 1 root root          8 Dec  5 19:58 test -> test.log
lrwxrwxrwx. 1 root root         14 Dec  5 19:59 test.txt -> /root/test.log
[root@whb ~]# 


硬链接

    #多个文件指向同一个inode号的文件,我们称之为互为硬链接,也可以把硬链接看做是源文件的一个别名

[root@whb ~]# ln  test.log   test.sh

[root@whb ~]# echo  456  >> test.sh
[root@whb ~]# cat test.log 
123
456
[root@whb ~]# rm -f  test.log
[root@whb ~]# cat  test.sh 
123
456

53. vi/vim

    选项:

        -r            #恢复非正常退出的文件
        +n            #打开文件直接跳转到第n行
        -o            #打开多个文件,上下显示
        -O            #打开多个文件,左右显示



命令模式

    光标跳转

        h        #向左移动一个字符
        l        #向右移动一个字符
        j        #向下移动一个字符
        k        #向上移动一个字符
                #移动多个,前面加数字

        ^        #将光标移动到当前行的行首
        $        #将光标移动到当前行的行尾

        shift + w        #向后移动一组字符串,达到字符串的和头部。以空白字符为分割符(跳过换行符)

        shift + e        #向后移动一组字符串,达到字符串的和尾部。以空白字符或者换行符为分割符

        gg        #光标跳转到文件的行首

        G        #光标跳转到文件的行尾

        ngg/nG    #n==数字,跳转到指定的某一行


        Ctrl键 + f    #向下翻页

        Ctrl键 + b    #向上翻页

        回车键            #向下移动一行内容

        空格键            #向右移动一个字符

        删除键            #向左一个一个字符

        dd            #删除,剪切

        ndd            #删除或者剪切三行内容,从当前行开始计算

        dG            #删除或者剪切当前行及向下的所有行

        p            #粘贴剪切板上面的内容,在当前行向下粘贴,粘贴多次,np

        P            #粘贴剪切板上面的内容,在当前行向上粘贴,粘贴多次,nP

        u            #撤销,可以无限撤销,必须没有保存的操作

        Ctrl键+r        #回滚你的撤销操作

        D            #删除当前光标所在位置及向后的所有内容,针对行操作 

        de            #删除一组字符串,以空白字符或者特殊字符为分隔符

        dw            #删除一组字符串,以空白字符或者特殊字符为分隔符,会删除分隔符

        yy            #复制

        nyy            #复制多行,从当前行开始操作  

        ZZ            #保存退出

        r            #单对单的替换

        R            #替换多个,只能替换连续的字符  

        x/delete    #从前往后删除一个字符 

        X            #从后往前删除一个字符



 编辑模式

        Esc键    #退出编辑模式,进入到命令模式

        i        #在当前光标前插入内容

        a        #在当前光标后插入内容

        I        #光标快速的移动到行首,并进入编辑模式,在当前光标前插入内容

        A        #光标快速的移动到行尾,并进入编辑模式,在当前光标后插入内容

        ce        #删除当前字符串,光标在字符串的首个字母,并进入编辑模式

        cw        #删除当前字符串,光标在字符串的首个字母,并进入编辑模式,会把特殊字符当做是字符串

        C        #删除当前光标所在位置及向后的所有内容,并进入编辑模式,针对行的操作

        o        #在当前行的下一行另起一行,并进入编辑模式

        O        #在当前行的上一行另起一行,并进入编辑模式

        s        #删除当前光标所在的字符,并进入编辑模式

        S        #删除当前行,并进入编辑模式

        cc        #删除当前行,并进入编辑模式



     末行模式

        #保存退出

        :q        #退出不保存

        :wq        #保存退出

        :q!        #强制退出

        :wq!    #强制保存退出

        :w        #保存不退出

        :x        #保存退出

        #光标操作

        :n        #跳转到指定的行

        :nd        #删除指定的行

        :n,md    #删除连续的多行,  n 数字  m 数字   n  <  m

        #搜索内容

        /root    #向下搜索的指定的字符串

        n        #向下查找

        N        #向上查找

        /root\c    #搜索的时候忽略大小写

        ?root    #向上搜索

        #替换

        :%s#root#oldboy#g  #全局替换

        :%s#root#oldboy#    #替换每一行的第一个匹配的字符

        :s#root#oldboy#        #替换第一个匹配的字符串

        :1s#root#oldboy#g    #替换指定行的匹配的字符串

        :1,10s#root#oldboy#g    #替换第一行到第十行所有匹配的字符串

        :%s#root#oldboy#gi        #替换的时候忽略大小写

        #将文件内容保存到一个新的文件

        :w  /path        #将文件内容保存到指定的新的文件中

        #读入文件

        :r    /path        #将一个文件的所有写入到当前文件的当前行下面

        :1r    /path        #将一个文件的所有写入到当前文件的第一行下面

        :$r    /path        #将一个文件的所有写入到当前文件的最下面

        :0r    /path        #将一个文件的所有写入到当前文件的最上面

        :1 copy  10      #将第一行复制到第十行的后面

        :1,3 copy  10      #将第一行到第三行复制到第十行的后面

        :1 move  10      #将第一行移动到第十行的后面

        :sh                #进入命令行进行命令,返回使用Ctrl+d 或者 exit



     视图模式

         可视行

        先将光标移动到要操作的行

        shift+v        #进入可视行的模式

        光标选中你要操作的所有行  

        y        #复制  

        d/x        #删除


        可视块

        #批量添加

        将光标移动到要操作的行,并且是要操作的字符上面

        Ctrl+v    #进入可视块模式

        使用方向键进行选中要操作的行

        shift + i    #进入编辑模式  

        编辑内容   按esc退出


        #批量删除  

        将光标移动到要操作的行,并且是要操作的字符上面

        Ctrl+v    #进入可视块模式

        使用方向键进行选中要操作的行或者字符,块

        d/x            #删除 

54. diff

#默认的文件对比

[root@whb ~]# diff  passwd  passwd1
1c1
< rhgiutgroot:x:0:0:root:/root:/bin/bash
---
> root:x:0:0:root:/root:/bin/bash
3c3
< rgutrhnoifjgbosfiddddddvbjklndaemon:x:2:2:daemon:/sbin:/sbin/nologin
---
> daemon:x:2:2:daemon:/sbin:/sbin/nologin
25d24
< ROOT

[root@whb ~]# vimdiff  passwd passwd1            #不同之处会高亮显示

55. md5sum

#md5sum命令用于生成和校验文件的md5值

[root@whb ~]# md5sum  passwd        #给重要的一些文件设置指纹
3fae271737b5fba20b893cedf92afa39  passwd
[root@whb ~]# md5sum  passwd
3fae271737b5fba20b893cedf92afa39  passwd
[root@whb ~]# md5sum  passwd > finger.txt    #将文件的指纹信息保存到一个文件中
[root@whb ~]# 
[root@whb ~]# 
[root@whb ~]# cat finger.txt
3fae271737b5fba20b893cedf92afa39  passwd
[root@whb ~]# md5sum  -c  finger.txt         #检查文件是否变化 ,OK表示没有改变
passwd: OK
[root@whb ~]# echo 1 >>  passwd
[root@whb ~]# md5sum  -c  finger.txt         #表示文件已经被修改
passwd: FAILED
md5sum: WARNING: 1 computed checksum did NOT match

56. id

#显示用户的id号

[root@whb ~]# id        #显示当前登录的用户信息
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@whb ~]# id  adm    #显示其他用户的信息
uid=3(adm) gid=4(adm) groups=4(adm)

57. w

#显示系统状态,显示当前登录的用户信息

[root@whb ~]# w
 11:45:24 up  1:22,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      10:23    1:22m  0.03s  0.03s -bash
root     pts/0    10.0.0.1         10:27    4.00s  0.03s  0.00s w

58. who

#显示系统当前登录的用户信息

[root@whb ~]# who
root     tty1         2019-12-14 10:23
root     pts/0        2019-12-14 10:27 (10.0.0.1)

59. whoami

#显示当前登录系统的用户

[root@whb ~]# whoami
root

60. uptime

#显示系统状态及用户的登录终端的数量

[oot@whb ~]# uptime 
 11:50:52 up  1:28,  2 users,  load average: 0.02, 0.04, 0.05        

61. useradd

#创建用户,默认创建普通用户

    选项:

        -u        #指定用户的UID
        -g        #指定用户组,写组名或者组的ID,基本组
        -G        #指定附加组,多个使用逗号分隔
        -c        #添加注释信息
        -r        #创建系统用户,不创建家目录
        -M        #不创建家目录
        -d        #指定家目录的位置,目录要是不存在
        -s        #指定用户的命令解释器

[root@whb ~]# id user01        #默认创建普通的用户
uid=1001(user01) gid=1001(user01) groups=1001(user01)
[root@whb ~]# grep  'user01'  /etc/passwd
user01:x:1001:1001::/home/user01:/bin/bash


[root@whb ~]# useradd   -u888  -c "测试用户"  -d  /opt/user02  user02
[root@whb ~]# id user02
uid=888(user02) gid=1002(user02) groups=1002(user02)
[root@whb ~]# grep  'user02'  /etc/passwd
user02:x:888:1002:测试用户:/opt/user02:/bin/bash
[root@whb ~]# ll /opt/
drwx------. 2 user02 user02         62 Dec 12 18:36 user02

[root@whb ~]# useradd  -r  -s  /sbin/nologin  user04
[root@whb ~]# grep  'user04'  /etc/passwd
user04:x:664:663::/home/user04:/sbin/nologin
[root@whb ~]# ll /home/
total 0
drwx------. 2 test   test   62 Nov 27 19:57 test
drwx------. 2 user01 user01 62 Dec 12 18:29 user01


[root@whb ~]# useradd   -M  -s  /sbin/nologin  user05
[root@whb ~]# ll /home/
total 0
drwx------. 2 test   test   62 Nov 27 19:57 test
drwx------. 2 user01 user01 62 Dec 12 18:29 user01
[root@whb ~]# grep  'user05'  /etc/passwd
user05:x:2000:2000::/home/user05:/sbin/nologin

62. usermod

usermod            #修改用户

选项:

        -u        #修改uid信息
        -g        #修改基本组的id,GID
        -a        #添加附加组,不能单独添加,-G配合
        -G        #修改附加组,会将附加组的覆盖  
        -aG        #追加
        -m        #迁移家目录
        -d        #修改家目录
        -c        #修改注释信息
        -s        #修改命令解释器
        -l        #修改用户的名称
        -L        #锁定用户
        -U         #解锁用户


[root@whb ~]# usermod   -u1010   -c  "test"  -s /bin/bash  user05  
[root@whb ~]# grep  'user05'  /etc/passwd
user05:x:1010:2000:test:/home/user05:/bin/bash
[root@whb ~]# usermod   -md  /home/user02   user02
[root@whb ~]# ll /home/
total 0
drwx------. 2 test   test   62 Nov 27 19:57 test
drwx------. 2 user01 user01 62 Dec 12 18:29 user01
drwx------. 2 user02 user02 62 Dec 12 18:36 user02


[root@whb ~]# usermod   -l  oldboy   user05        #修改名称
[root@whb ~]# id user05
id: user05: no such user
[root@whb ~]# id oldboy
uid=1010(oldboy) gid=2000(user05) groups=2000(user05)
[root@whb ~]# grep  'oldboy'  /etc/passwd
oldboy:x:1010:2000:test:/home/user05:/bin/bash


[root@whb ~]# usermod    -L  test        #锁定用户
[root@whb ~]# usermod    -U  test        #解锁用户

63. userdel

userdel            #删除用户

选项:

    -r        #删除用户的家目录及邮件信息


[root@whb ~]# userdel  user02    #默认不删除家目录和邮件信息
[root@whb ~]# grep  'user02'  /etc/passwd
[root@whb ~]# id user02
id: user02: no such user
[root@whb ~]# ll  /home/
total 0
drwx------. 2 test   test   62 Nov 27 19:57 test
drwx------. 2 user01 user01 62 Dec 12 18:29 user01
drwx------. 2    888   1002 62 Dec 12 18:36 user02

[root@whb ~]# userdel   -r   user01        #删除跟用户相关的所有信息
[root@whb ~]# ll  /home/
total 0
drwx------. 2 test test 62 Nov 27 19:57 test
drwx------. 2  888 1002 62 Dec 12 18:36 user02

64. passwd

#交互式设置密码

[root@whb ~]# passwd         #修改当前用户的密码,密码可以随意的设置    
Changing password for user root.
New password: 
BAD PASSWORD: The password is a palindrome
Retype new password: 
passwd: all authentication tokens updated successfully.

[root@whb ~]# passwd   user06            #设置其他用户的密码,密码也是可以随意设置
Changing password for user user06.
New password: 
BAD PASSWORD: The password is a palindrome
Retype new password: 
passwd: all authentication tokens updated successfully.

[user06@whb ~]$ passwd         #普通用户只能设置自己的密码,密码最少是8位,并且是无序的密码
Changing password for user user06.
Changing password for user06.
(current) UNIX password:             #输入旧的密码
New password:                         #输出新的密码
Retype new password:                 #确认新的密码
Sorry, passwords do not match.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.


#非交互式设置密码

将密码信息显示出来   通过管道交给后面的命令    标准输出   --stdin   用户名
[root@whb ~]# echo  '123'  | passwd    --stdin  user06        
Changing password for user user06.
passwd: all authentication tokens updated successfully.

#设置随机密码
[root@whb ~]# echo  $RANDOM | md5sum |cut -c  1-10  | tee   pass.txt   | passwd  --stdin  user06
Changing password for user user06.
passwd: all authentication tokens updated successfully.
[root@whb ~]# cat pass.txt 
c5b795e212

$RANDOM        #产生一个随机数的变量

65. tee

tee            #将内容输出屏幕上方的同时也会将内容保存到指定文件当中

    -a        #追加


[root@whb ~]# echo  $RANDOM | md5sum |cut -c  1-10  | tee -a  pass.txt   | passwd  --stdin  user06
Changing password for user user06.
passwd: all authentication tokens updated successfully.
[root@whb ~]# cat pass.txt 
c5b795e212
f136b51b96

66. mkpasswd

#生成一个随机密码,要求是由大小写字母、数字及特殊符号组成的

[root@whb ~]# yum  install  -y expect   #下载软件包

[root@whb ~]# mkpasswd -l 24           
w)ztysepy5bqyioresmDLe1b

[root@whb ~]# mkpasswd -l 24   -c 6  -C 6 -s 6 -d 6 
1}z3UNM1IT5x&r@~/;pGj60z

-l        #指定密码的位数 

-c        #指定小写字母的位数

-C        #指定大写字母的位数

-d        #指定数字的位数

-s        #指定特殊的符号的位数

[root@whb ~]# mkpasswd -l 12 -s 3 -d 3 -c 3 -C 3  | tee  pass.txt   | passwd  --stdin  user06
Changing password for user user06.
passwd: all authentication tokens updated successfully.

67. groupadd

#添加组
    -g                #指定的组的ID  GID
    -r                #创建系统组

[root@whb ~]# groupadd   user01
[root@whb ~]# grep  'user01' /etc/group
user01:x:2016:
[root@whb ~]# groupadd   -g  2018 user02
[root@whb ~]# grep  'user02' /etc/group
user02:x:2018:
[root@whb ~]# groupadd   -r  user04
[root@whb ~]# grep  'user04' /etc/group
user04:x:663:

68. groupmod

#修改组的信息
    -g            #修改组的id信息 
    -n            #修改组的名称

[root@whb ~]# groupmod   -g 2019  user01
[root@whb ~]# grep  'user01' /etc/group
user01:x:2019:

[root@whb ~]# groupmod   -n  user10  user01
[root@whb ~]# grep  'user01' /etc/group
[root@whb ~]# grep  'user10' /etc/group
user10:x:2019:

69. groupdel

#删除组 

可以删除没有用户作为主组的组,如果只是附加组,删除不会提示  

[root@whb ~]# groupdel   user10
[root@whb ~]# grep  'user10' /etc/group
[root@whb ~]# grep  'web' /etc/group
oldboy1:x:2002:web
web:x:2015:
[root@whb ~]# groupdel   web
groupdel: cannot remove the primary group of user 'web'
[root@whb ~]# usermod   -g user03  web
[root@whb ~]# groupdel   web


[root@whb ~]# groupadd   yw
[root@whb ~]# useradd   -g yw  yw1
[root@whb ~]# useradd   -g yw  yw2
[root@whb ~]# id  yw1
uid=2014(yw1) gid=2019(yw) groups=2019(yw)
[root@whb ~]# id  yw2
uid=2015(yw2) gid=2019(yw) groups=2019(yw)

70. su

#使用简单,配置简单,缺点:需要知道root的密码 

su   username        #切换的时候,加载的环境变量的配置文件不一样 ,只切换的用户的身份,没有切换环境

su  -  username        #切换用户的身份的同时,也切换了环境/etc/profile 

[root@whb ~]# su  test
/etc/bashrc
/etc/profile.d/test.sh
[test@whb root]$ pwd
/root
[test@whb root]$ exit
[root@whb ~]# su - test
Last login: Mon Dec 16 17:40:28 CST 2019 on pts/0
/etc/profile
/etc/profile.d/test.sh
/etc/bashrc
[test@whb ~]$ pwd
/home/test

71. sudo

#针对某一个命令的权限,让一个普通用户拥有一次做皇帝的机会 
#权限控制,给指定的权限, 优点:安全,简单。缺点:配置复杂 

    -l         #检查当前用户拥有的sudo权限

    visudo            #配置sudo权限  ====    vi  /etc/sudoers  

sudo设置组  

两种设置方法 

第一种:visudo认可的组,不是真实系统组  

User_Alias  DEV = dev01,dev02        #组的别名

Cmnd_Alias  READ = /bin/cat            #命令的别名

DEV  ALL=(ALL)   NOPASSWD: READ        #授权 

[root@whb ~]# su -  dev01
Last login: Mon Dec 16 18:49:15 CST 2019 on pts/0
[dev01@whb ~]$ sudo -l
Matching Defaults entries for dev01 on whb

User dev01 may run the following commands on whb:
    (ALL) NOPASSWD: /bin/cat
[dev01@whb ~]$ logout
[root@whb ~]# su -  dev02
Last login: Mon Dec 16 18:51:27 CST 2019 on pts/0
[dev02@whb ~]$ sudo -l
Matching Defaults entries for dev02 on whb
User dev02 may run the following commands on whb:
    (ALL) NOPASSWD: /bin/cat

第二种:真实的组  

[root@whb ~]# groupadd   dev
[root@whb ~]# usermod  -g  dev  dev01
[root@whb ~]# usermod  -g  dev  dev02

#visudo设置

%dev   ALL=(ALL)    NOPASSWD: READ,SOFTWARE


#验证 
[root@whb ~]# su  -  dev01
Last login: Mon Dec 16 19:02:20 CST 2019 on pts/0
[dev01@whb ~]$ sudo -l
Matching Defaults entries for dev01 on whb:

User dev01 may run the following commands on whb:
    (ALL) NOPASSWD: /bin/cat, /bin/rpm, /usr/bin/up2date, /usr/bin/yum

72. chmod

#设置权限
        -R        #递归设置权限

第一种设置权限 

    根据字母设置权限  

    u        属主的权限 
    g        属组的权限 
    o        其它的人的权限 
    a        所有人的权限  
    +        添加权限 
    -        移除权限  
    =        覆盖权限  
    r        读的权限
    w        写的权限
    x        执行的权限
    -        没有权限
    [root@whb ~]# chmod  u+x  test.txt 
    [root@whb ~]# ll
    total 0
    -rwxr--r--. 1 root root 0 Dec 17 17:21 test.txt
    [root@whb ~]# chmod  g+w  test.txt 
    [root@whb ~]# ll
    total 0
    -rwxrw-r--. 1 root root 0 Dec 17 17:21 test.txt
    [root@whb ~]# chmod  o+x  test.txt 
    [root@whb ~]# ll
    total 0
    -rwxrw-r-x. 1 root root 0 Dec 17 17:21 test.txt
    [root@whb ~]# chmod  o-x  test.txt 
    [root@whb ~]# ll
    total 0
    -rwxrw-r--. 1 root root 0 Dec 17 17:21 test.txt
    [root@whb ~]# chmod  a+x  test.txt 
    [root@whb ~]# ll
    total 0
    -rwxrwxr-x. 1 root root 0 Dec 17 17:21 test.txt
    [root@whb ~]# chmod  -x  test.txt 
    [root@whb ~]# ll
    total 0
    -rw-rw-r--. 1 root root 0 Dec 17 17:21 test.txt
    [root@whb ~]# chmod   a=r  test.txt 
    [root@whb ~]# ll
    total 0
    -r--r--r--. 1 root root 0 Dec 17 17:21 test.txt
    [root@whb ~]# chmod u=rwx  test.txt 
    [root@whb ~]# ll
    total 0
    -rwxr--r--. 1 root root 0 Dec 17 17:21 test.txt
    [root@whb ~]# chmod  g=x  test.txt 
    [root@whb ~]# ll
    total 0
    -rwx--xr--. 1 root root 0 Dec 17 17:21 test.txt
    [root@whb ~]# chmod  o=-  test.txt 
    [root@whb ~]# ll
    total 0
    -rwx--x---. 1 root root 0 Dec 17 17:21 test.txt


第二种

    根据数字进行设置权限 

    [root@whb ~]# ll
    total 0
    -rwx--x---. 1 root root 0 Dec 17 17:21 test.txt
    [root@whb ~]# chmod   644 test.txt 
    [root@whb ~]# ll
    total 0
    -rw-r--r--. 1 root root 0 Dec 17 17:21 test.txt
    [root@whb ~]# chmod  000  test.txt 
    [root@whb ~]# ll
    total 0
    ----------. 1 root root 0 Dec 17 17:21 test.txt
    [root@whb ~]# chmod  777  test.txt 
    [root@whb ~]# ll
    total 0
    -rwxrwxrwx. 1 root root 0 Dec 17 17:21 test.txt
    [root@whb ~]# chmod 700  test.txt 
    [root@whb ~]# ll
    total 0
    -rwx------. 1 root root 0 Dec 17 17:21 test.txt


#递归设置权限
    [root@whb ~]# chmod -R 700 test
    [root@whb ~]# ll -d test
    drwx------. 2 root root 71 Dec 17 17:42 test    

73. chown

#修改属主属组

        -R        递归设置

    chgrp     只能修改属组

    只有root权限才可以任意修改属主属组

    普通用户只能修改自己的,普通用户不能使用这个命令

[root@whb /opt]# chown  test.test  123
[root@whb /opt]# ll
total 12
-rw-rw--w-. 1 test test 10 Dec 17 18:36 123
-rw-r---w-. 1 test test  9 Dec 17 18:41 passwd
drwxr-x-wx. 2 root root 70 Dec 17 19:04 test
-rw-r---w-. 1 root root  9 Dec 17 18:33 test.txt
[root@whb /opt]# chown  yuwei  passwd 
[root@whb /opt]# ll
total 12
-rw-rw--w-. 1 test  test 10 Dec 17 18:36 123
-rw-r---w-. 1 yuwei test  9 Dec 17 18:41 passwd
drwxr-x-wx. 2 root  root 70 Dec 17 19:04 test
-rw-r---w-. 1 root  root  9 Dec 17 18:33 test.txt
[root@whb /opt]# chown  .yuwei  123
[root@whb /opt]# ll
total 12
-rw-rw--w-. 1 test  yuwei 10 Dec 17 18:36 123
-rw-r---w-. 1 yuwei test   9 Dec 17 18:41 passwd
drwxr-x-wx. 2 root  root  70 Dec 17 19:04 test
-rw-r---w-. 1 root  root   9 Dec 17 18:33 test.txt
[root@whb /opt]# chown  root:root 123
[root@whb /opt]# ll
total 12
-rw-rw--w-. 1 root  root 10 Dec 17 18:36 123
-rw-r---w-. 1 yuwei test  9 Dec 17 18:41 passwd
drwxr-x-wx. 2 root  root 70 Dec 17 19:04 test
-rw-r---w-. 1 root  root  9 Dec 17 18:33 test.txt

[root@whb /opt]# chown  -R  test.test  test            #递归设置
[root@whb /opt]# ll
total 12
-rw-rw--w-. 1 root  test 10 Dec 17 18:36 123
-rw-r---w-. 1 yuwei test  9 Dec 17 18:41 passwd
drwxr-x-wx. 2 test  test 70 Dec 17 19:04 test
-rw-r---w-. 1 root  root  9 Dec 17 18:33 test.txt
[root@whb /opt]# ll test
total 0
-rw-rw-r--. 1 test test 0 Dec 17 19:03 new1.txt
-rw-r--r--. 1 test test 0 Dec 17 18:50 old3.txt
-rw-r--r--. 1 test test 0 Dec 17 18:50 old4.txt
-rw-r--r--. 1 test test 0 Dec 17 18:50 old5.txt

74. chgrp

#修改属组

[root@whb /opt]# chgrp   test 123 
[root@whb /opt]# ll
total 12
-rw-rw--w-. 1 root  test 10 Dec 17 18:36 123
-rw-r---w-. 1 yuwei test  9 Dec 17 18:41 passwd
drwxr-x-wx. 2 root  root 70 Dec 17 19:04 test
-rw-r---w-. 1 root  root  9 Dec 17 18:33 test.txt

75. umask

#临时修改系统的umask值

系统中,root用户默认的umask值为022,普通用户的umask值为002

umask的计算: 
    umask是个权限控制的命令,默认的值是022,系统默认创建目录的权限是怎么计算来的,由目录的最大权限777,减去        umask的默认权限,得到的结果就是新创建目录的权限。系统默认创建文件的权限是怎么计算的,由文件的最大权限666,     减去umask的默认权限,得到的结果就是新创建文件的权限。当文件的权限为出现奇数时,会在奇数位上面+1.

[root@whb ~]# mkdir  test
[root@whb ~]# touch  test.log
[root@whb ~]# ll
total 0
drwxr-xr-x. 2 root root 6 Dec 18 16:58 test        #新创建的目录权限为755
-rw-r--r--. 1 root root 0 Dec 18 16:58 test.log  #新创建的文件权限为644.

[root@whb ~]# umask 
0022
[root@whb ~]# umask   033
[root@whb ~]# umask 
0033
[root@whb ~]# mkdir  data
[root@whb ~]# ll
total 0
drwxr--r--. 2 root root 6 Dec 18 17:06 data
drwxr-xr-x. 2 root root 6 Dec 18 16:58 test
-rw-r--r--. 1 root root 0 Dec 18 16:58 test.log
[root@whb ~]# touch  test.txt
[root@whb ~]# ll
total 0
drwxr--r--. 2 root root 6 Dec 18 17:06 data
drwxr-xr-x. 2 root root 6 Dec 18 16:58 test
-rw-r--r--. 1 root root 0 Dec 18 16:58 test.log
-rw-r--r--. 1 root root 0 Dec 18 17:06 test.txt

76. setuid、setgid、sticky三种特殊权限,a、i两种特殊属性

setuid
        #给文件设置特殊权限,即设置setuid

        #在运行一个命令的时候,相当于这个命令的所有者,主要作用于属主权限的x位

            对应的权限数字是 4

        #root用户设置setuid 权限
        [root@whb ~]# ll  /usr/bin/rm
        -rwxr-xr-x. 1 root root 62952 Oct 31  2018 /usr/bin/rm
        [root@whb ~]# chmod  u+s  /usr/bin/rm
        [root@whb ~]# ll  /usr/bin/rm
        -rwsr-xr-x. 1 root root 62952 Oct 31  2018 /usr/bin/rm
        [root@whb ~]# stat /usr/bin/rm
          File: ‘/usr/bin/rm’
          Size: 62952         Blocks: 128        IO Block: 4096   regular file
        Device: 803h/2051d    Inode: 100686169   Links: 1
        Access: (4755/-rwsr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
        Context: system_u:object_r:bin_t:s0
        Access: 2019-12-18 03:41:02.098907636 +0800
        Modify: 2018-10-31 03:16:01.000000000 +0800
        Change: 2019-12-18 17:43:52.450121986 +0800

        #普通用户测试

        [test@whb ~]$ rm -rf /opt/
        rm: cannot remove ‘/opt/’: Permission denied

        #当一个文件属主没有执行权限时,设置setuid之后就是大S,有执行权限就是小s
        [root@whb ~]# ll
        total 0
        drwxr--r--. 2 root root 6 Dec 18 17:06 data
        drwxr-xr-x. 2 root root 6 Dec 18 16:58 test
        -rw-r--r--. 1 root root 0 Dec 18 16:58 test.log
        -rw-r--r--. 1 root root 0 Dec 18 17:06 test.txt
        [root@whb ~]# chmod u+s  test.log 
        [root@whb ~]# ll
        total 0
        drwxr--r--. 2 root root 6 Dec 18 17:06 data
        drwxr-xr-x. 2 root root 6 Dec 18 16:58 test
        -rwSr--r--. 1 root root 0 Dec 18 16:58 test.log
        -rw-r--r--. 1 root root 0 Dec 18 17:06 test.txt

        #普通用户对文件没有执行权限时,是执行不了,即使拥有setuid的权限,也不能执行,
        [test@whb ~]$ ll 
        total 4
        -rwSrw-r--. 1 test test 4 Dec 18 17:53 123.txt
        [test@whb ~]$ ./123.txt
        -bash: ./123.txt: Permission denied
        [test@whb ~]$ ll
        total 4
        -rwxrw-r--. 1 test test 4 Dec 18 17:53 123.txt
        [test@whb ~]$ ./123.txt
        /home/test

        #root用户对文件没有执行权限时,是执行不了,即使拥有setuid的权限,root也是不能执行的
        [root@whb ~]# chmod -x  /usr/bin/rm
        [root@whb ~]# ll  /usr/bin/rm
        -rwSr--r--. 1 root root 62952 Oct 31  2018 /usr/bin/rm
        [root@whb ~]# mkdir /opt
        [root@whb ~]# rm -rf /opt
        -bash: /bin/rm: Permission denied




setgid
        #设置特殊权限,作用于属组的x位

            让一个目录下的所有新创建的目录或者文件的默认组都是该目录的组,而不是创建用户的组

            让一个成为共享目录

            主要作用于属组的x位

        创建2个用户,创建一个目录,让其属主及属组有任何权限,其它人没有权限 


        #创建两个测试用户
        [root@whb ~]# useradd   test01
        [root@whb ~]# useradd   test02
        [root@whb ~]# echo '1'  |passwd  --stdin  test01
        Changing password for user test01.
        passwd: all authentication tokens updated successfully.
        [root@whb ~]# echo '1'  |passwd  --stdin  test02
        Changing password for user test02.
        passwd: all authentication tokens updated successfully.

        #创建一个共享目录
        [root@whb ~]# mkdir   /opt/gongxiang

        #创建一个共享组
        [root@whb ~]# groupadd  gongxiang

        #将共享,目录设置为共享组
        [root@whb ~]# chgrp   gongxiang  /opt/gongxiang/
        [root@whb ~]# ll /opt/
        total 0
        drwxr-xr-x. 2 root gongxiang 6 Dec 18 18:17 gongxiang

        #让属主属组都要任何权限,其它用户没有权限
        [root@whb ~]# chmod 770  /opt/gongxiang/

        #将两个用户加入共享组
        [root@whb ~]# usermod  -G gongxiang  test01
        [root@whb ~]# usermod  -G gongxiang  test02

        #给共享目录设置setgid
        [root@whb ~]# chmod  g+s /opt/gongxiang/
        [test01@whb /opt]$ stat gongxiang/
          File: ‘gongxiang/’
          Size: 86            Blocks: 0          IO Block: 4096   directory
        Device: 803h/2051d    Inode: 67753409    Links: 4
        Access: (2770/drwxrws---)  Uid: (    0/    root)   Gid: ( 2026/gongxiang)
        Context: unconfined_u:object_r:usr_t:s0
        Access: 2019-12-18 18:48:13.316985658 +0800
        Modify: 2019-12-18 18:48:11.411985725 +0800
        Change: 2019-12-18 18:48:11.411985725 +0800
         Birth: -


        #test01测试

        [test01@whb /opt/gongxiang]$ touch  test01.txt
        [test01@whb /opt/gongxiang]$ ll
        total 0
        -rw-rw-r--. 1 test01 gongxiang 0 Dec 18 18:43 test01.txt
        [test01@whb /opt/gongxiang]$ mkdir  test01
        [test01@whb /opt/gongxiang]$ ll
        total 0
        drwxrwsr-x. 2 test01 gongxiang 6 Dec 18 18:43 test01
        -rw-rw-r--. 1 test01 gongxiang 0 Dec 18 18:43 test01.txt
        [test01@whb /opt/gongxiang]$ ll  test02
        total 0
        -rw-rw-r--. 1 test02 gongxiang 0 Dec 18 18:45 test02.log
        [test01@whb /opt/gongxiang]$ rm -f test02/test02.log 
        [test01@whb /opt/gongxiang]$ ll  test02
        total 0

        #test02用户测试
        [test02@whb /opt/gongxiang]$ touch  test02.txt
        [test02@whb /opt/gongxiang]$ mkdir test02
        [test02@whb /opt/gongxiang]$ ll
        total 0
        drwxrwsr-x. 2 test01 gongxiang 6 Dec 18 18:43 test01
        -rw-rw-r--. 1 test01 gongxiang 0 Dec 18 18:43 test01.txt
        drwxrwsr-x. 2 test02 gongxiang 6 Dec 18 18:44 test02
        -rw-rw-r--. 1 test02 gongxiang 0 Dec 18 18:43 test02.txt
        [test02@whb /opt/gongxiang]$ touch  test02/test02.log
        [test02@whb /opt/gongxiang]$ ll test02
        total 0
        -rw-rw-r--. 1 test02 gongxiang 0 Dec 18 18:45 test02.log



sticky
    #粘滞位,让一个目录成为所有用户都有所有权限,目录权限是777.又让所有用户除了root和属主可以管理自己的文件或者目录,其它人没有管理的权限。
    主要作用在其他人的x位,t表示

        [root@whb ~]# mkdir -m 777   /test
        [root@whb ~]# ll -d /test
        drwxrwxrwx. 2 root root 6 Dec 18 18:58 /test
        [root@whb ~]# chmod o+t /test/
        [root@whb ~]# ll -d /test
        drwxrwxrwt. 2 root root 6 Dec 18 19:00 /test
        [root@whb ~]# stat  /test
          File: ‘/test’
          Size: 6             Blocks: 0          IO Block: 4096   directory
        Device: 803h/2051d    Inode: 1083835     Links: 2
        Access: (1777/drwxrwxrwt)  Uid: (    0/    root)   Gid: (    0/    root)
        Context: unconfined_u:object_r:default_t:s0
        Access: 2019-12-18 19:00:13.822960217 +0800
        Modify: 2019-12-18 19:00:33.146959534 +0800
        Change: 2019-12-18 19:01:09.490958251 +0800
         Birth: -

        #test01用户测试
        [test01@whb ~]$ touch /test/test01.txt
        [test01@whb ~]$ ll /test/
        total 0
        -rw-rw-r--. 1 test01 test01 0 Dec 18 19:01 test01.txt
        -rw-rw-r--. 1 test02 test02 0 Dec 18 19:01 test02.txt
        [test01@whb ~]$ rm -f  /test/test02.txt 
        rm: cannot remove ‘/test/test02.txt’: Operation not permitted

        #test02用户测试
        [test02@whb ~]$ touch /test/test02.txt
        [test02@whb ~]$ ll /test/
        total 0
        -rw-rw-r--. 1 test01 test01 0 Dec 18 19:01 test01.txt
        -rw-rw-r--. 1 test02 test02 0 Dec 18 19:01 test02.txt
        [test02@whb ~]$ rm -f  /test/test01.txt 
        rm: cannot remove ‘/test/test01.txt’: Operation not permitted
        [test02@whb ~]$ rm -f  /test/test02.txt 




特殊属性不受权限的控制  
    a        #表示只能追加,不能删除,移动,修改,给重要的文件,日志

    i        #什么都不能操作,不能删除,移动,追加,重定向,给重要的配置文件加上特殊属性

        #测试a属性
        [root@whb ~]# lsattr  test.txt 
        -----a---------- test.txt
        [root@whb ~]# cat test.txt
        hostname
        [root@whb ~]# ./test.txt 
        whb
        [root@whb ~]# cp test.txt  /tmp/
        [root@whb ~]# rm -f  test.txt 
        rm: cannot remove ‘test.txt’: Operation not permitted
        [root@whb ~]# mv test.txt  /opt/
        mv: cannot move ‘test.txt’ to ‘/opt/test.txt’: Operation not permitted
        [root@whb ~]# vim  test.txt 
        [root@whb ~]# echo pwd >> test.txt
        [root@whb ~]# cat test.txt
        hostname
        pwd
        [root@whb ~]# echo pwd > test.txt
        -bash: test.txt: Operation not permitted

        #测试i属性
        [root@whb ~]# lsattr  test.txt
        -----a---------- test.txt
        [root@whb ~]# chattr -a  test.txt
        [root@whb ~]# lsattr  test.txt
        ---------------- test.txt
        [root@whb ~]# chattr  +i  test.txt
        [root@whb ~]# cat test.txt
        hostname
        pwd
        [root@whb ~]# ./test.txt
        whb
        /root
        [root@whb ~]# cp ./test.txt  /opt/
        [root@whb ~]# mv ./test.txt  /mnt/
        mv: overwrite ‘/mnt/test.txt’? y
        mv: cannot move ‘./test.txt’ to ‘/mnt/test.txt’: Operation not permitted
        [root@whb ~]# rm -f  test.txt
        rm: cannot remove ‘test.txt’: Operation not permitted
        [root@whb ~]# echo 123 >test.txt
        -bash: test.txt: Permission denied
        [root@whb ~]# echo 123 >>test.txt
        -bash: test.txt: Permission denied

77. dd

#生成一个大文件
        if        #从哪里读取数据
        of        #输出到哪里
        bs        #一次输出多少
        count    #输出的次数

[root@whb ~]# dd  if=/dev/zero  of=/root/test.log  bs=10M  count=100
100+0 records in
100+0 records out
1048576000 bytes (1.0 GB) copied, 27.5536 s, 38.1 MB/s
[root@whb ~]# ll -h
total 1001M
-rw-r--r--. 1 root root   143 Dec 19 17:34 file10.txt
-rw-r--r--. 1 root root    51 Dec 19 17:12 file1.txt
-rw-r--r--. 1 root root  2.2K Dec 19 17:05 file2.txt
-rw-r--r--. 1 root root     6 Dec 19 17:05 file3.txt
-rw-r--r--. 1 root root    21 Dec 19 17:07 file4.txt
-rw-r--r--. 1 root root   153 Dec 19 17:16 file5.txt
-rw-r--r--. 1 root root   160 Dec 19 17:25 file6.txt
-rw-r--r--. 1 root root     9 Dec 19 17:30 file7.txt
-rw-r--r--. 1 root root   102 Dec 19 17:30 file8.txt
-rw-r--r--. 1 root root   174 Dec 19 17:33 file9.txt
-rw-r--r--. 1 root root 1000M Dec 19 18:27 test.log
-rwxr-xr-x. 1 root root   143 Dec 19 17:38 test.sh
[root@whb ~]# dd  </dev/zero  >/root/test.txt  bs=10M count=10
10+0 records in
10+0 records out
104857600 bytes (105 MB) copied, 11.6617 s, 9.0 MB/s
[root@whb ~]# ll -h
total 1.1G
-rw-r--r--. 1 root root   143 Dec 19 17:34 file10.txt
-rw-r--r--. 1 root root    51 Dec 19 17:12 file1.txt
-rw-r--r--. 1 root root  2.2K Dec 19 17:05 file2.txt
-rw-r--r--. 1 root root     6 Dec 19 17:05 file3.txt
-rw-r--r--. 1 root root    21 Dec 19 17:07 file4.txt
-rw-r--r--. 1 root root   153 Dec 19 17:16 file5.txt
-rw-r--r--. 1 root root   160 Dec 19 17:25 file6.txt
-rw-r--r--. 1 root root     9 Dec 19 17:30 file7.txt
-rw-r--r--. 1 root root   102 Dec 19 17:30 file8.txt
-rw-r--r--. 1 root root   174 Dec 19 17:33 file9.txt
-rw-r--r--. 1 root root 1000M Dec 19 18:27 test.log
-rwxr-xr-x. 1 root root   143 Dec 19 17:38 test.sh
-rw-r--r--. 1 root root  100M Dec 19 18:28 test.txt

78. xargs

#将一些不支持管道命令支持管道,默认管道是将左侧的输出结果标准输入到右侧的命令,主要是针对数据操作,xargs可以让这些数据交给右侧命令当做是针对文件操作。

[root@whb ~]# ls  |xargs   rm -rf 

[root@whb ~]# ls |xargs   sed  's#oldboy#oldgirl#g' -i
[root@whb ~]# cat ./*
oldgirl
oldgirl
oldgirl
oldgirl

79. find

#Find命令作用
    find命令可以根据不同的条件来进行查找文件,例如:文件名称、文件大小、文件修改时间、属主属组、权限、等等方式。

Find 命令的基本语法如下:
    命令        路径        选项          表达式         动作
    find        [path...]    [options]      [expression]    [action]
    查找        地区        妹纸          18-25岁        约?


Find命令的实例


1.根据名称查找
    -name      #根据名称查找
    -iname       #查找的时候忽略大小写

[root@whb ~]# find  /  -name  "ifcfg-eth0"   -print        #精确匹配
/etc/sysconfig/network-scripts/ifcfg-eth0
[root@whb ~]# find  /  -name  "*eth0"                 #匹配以eth0结尾的
/etc/sysconfig/network-scripts/ifcfg-eth0

[root@whb ~]# find  /  -name  "ifcfg*"                 #匹配以ifcfg开头的
/etc/sysconfig/network-scripts/ifcfg-lo
/etc/sysconfig/network-scripts/ifcfg-eth0

[root@whb ~]# touch oldboy
[root@whb ~]# touch OLDBOY
[root@whb ~]# touch oldboy{a..z}afe
[root@whb ~]# touch oldboy{a..z}

[root@whb ~]# find  /root   -name  "*oldboy*"        #匹配文件名中包含oldboy的字符串

[root@whb ~]# find  /root   -iname  "oldboy"        #精确匹配oldboy,但是忽略大小写
/root/oldboy
/root/OLDBOY

[root@whb ~]# find  /root  -name  "oldboy?"        #匹配以oldboy开头的。并且后面有一个且只能是一个文件
/root/oldboyp
/root/oldboyr
/root/oldboyt
/root/oldboyv

[root@whb ~]# find  /root  -name  "oldboy[abc]"  #匹配中括号中的任意一个字符
/root/oldboya
/root/oldboyb
/root/oldboyc
[root@whb ~]# find  /root  -name  "oldboy[eafe]"  
/root/oldboya
/root/oldboye
/root/oldboyf
[root@whb ~]# find  /root  -name  "oldboy[a-e]"  #匹配中括号中连续的字符
/root/oldboya
/root/oldboyb
/root/oldboyc
/root/oldboyd
/root/oldboye
[root@whb ~]# find  /root  -name  "oldboy[^a]"        #排除oldboy后面加一个字符,但是不是a的字符的文件
/root/oldboyp
/root/oldboyr
/root/oldboyt

[root@whb ~]# find  /root !  -name   "oldboya"   #排除oldboya这个文件


2.根据文件类型查找
    -type        
            f        #普通文件
            d        #目录
            l        #软连接文件
            b        #块设备文件
            c        #字符设备
            s        #套接字文件,socket文件
            p        #管道文件

[root@whb ~]# find   /tmp   -type  f   -ls
34367466    4 -rw-r--r--   1 test     test            9 Dec 18 19:16 /tmp/test.txt
67753454    0 -rw-r--r--   1 root     root            0 Dec 17 18:50 /tmp/old2.txt
34367457    0 -rw-rw-r--   1 test01   test01          0 Dec 18 18:56 /tmp/test01.txt
[root@whb ~]# find   /tmp   -type  d   -ls
33554504    4 drwxrwxrwt  16 root     root         4096 Dec 20 03:24 /tmp
67323676    0 drwxrwxrwt   2 root     root            6 Nov 26 20:23 /tmp/.X11-unix

[root@whb ~]# find  /root  -type  l   -ls
67831367    0 lrwxrwxrwx   1 root     root            6 Dec 20 17:20 /root/old -> oldboy
[root@whb ~]# find  /dev/  -type  b  -ls
 18135    0 brw-rw----   1 root     disk       8,   3 Nov 28 18:49 /dev/sda3
 18134    0 brw-rw----   1 root     disk       8,   2 Nov 28 18:49 /dev/sda2
 18133    0 brw-rw----   1 root     disk       8,   1 Nov 28 18:49 /dev/sda1
 18073    0 brw-rw----   1 root     cdrom     11,   0 Nov 28 18:49 /dev/sr0
 17960    0 brw-rw----   1 root     disk       8,   0 Nov 28 18:49 /dev/sda
[root@whb ~]# find  /dev/  -type  c  -ls
 34439    0 crw-------   1 root     root      10,  56 Nov 28 18:49 /dev/vsock
 34275    0 crw-rw----   1 root     tty        7, 134 Nov 28 18:49 /dev/vcsa6
 34272    0 crw-rw----   1 root     tty        7,   6 Nov 28 18:49 /dev/vcs6
 34269    0 crw-rw----   1 root     tty        7, 133 Nov 28 18:49 /dev/vcsa5
 34266    0 crw-rw----   1 root     tty        7,   5 Nov 28 18:49 /dev/vcs5
[root@whb ~]# find  /dev/  -type  s  -ls
  8942    0 srw-rw-rw-   1 root     root            0 Nov 28 18:49 /dev/log
[root@whb ~]# find  /run  -type  p  -ls
2238497    0 prw-------   1 root     root            0 Dec 18 19:23 /run/systemd/ask-password-block/136:1
 57568    0 prw-------   1 root     root            0 Nov 28 23:26 /run/systemd/ask-password-block/136:0
2308173    0 prw-------   1 root     root            0 Dec 19 11:14 /run/systemd/inhibit/2.ref
2330900    0 prw-------   1 root     root            0 Dec 19 16:20 /run/systemd/sessions/540.ref
 21279    0 prw-------   1 root     root            0 Nov 28 18:49 /run/systemd/initctl/fifo


3.#根据文件的层级查找
    -maxdepth           #搜索的最大深度(层级)
       -mindepth           #搜索的最小深度(层级)

[root@whb ~]# find  /etc/  -maxdepth  2    -name "*config*"
/etc/chkconfig.d
/etc/pm/config.d
/etc/sysconfig
/etc/sysconfig/ip6tables-config
/etc/sysconfig/iptables-config
/etc/sysconfig/ebtables-config
/etc/sysconfig/authconfig
/etc/pam.d/config-util
/etc/ssh/ssh_config
/etc/ssh/sshd_config
/etc/selinux/config

[root@whb ~]# find  /etc/  -maxdepth 1   -type  f 
/etc/fstab
/etc/crypttab
/etc/resolv.conf
/etc/shells
/etc/libaudit.conf


4.根据属主属组查找 
    -user
    -group
    -nouser
    -nogroup

[root@whb ~]# find  /home  -user  tom  -ls        #查找属主是tom用户
33932521    0 drwx------   2 tom      tom            62 Dec 20 01:43 /home/tom
33934918    4 -rw-r--r--   1 tom      tom            18 Oct 31  2018 /home/tom/.bash_logout
33934919    4 -rw-r--r--   1 tom      tom           193 Oct 31  2018 /home/tom/.bash_profile
33934920    4 -rw-r--r--   1 tom      tom           231 Oct 31  2018 /home/tom/.bashrc
[root@whb ~]# find  /home  -group apps  -ls        #查找属组是apps
1083832    0 drwx------   2 tomcat   apps           62 Dec 20 01:29 /home/tomcat
1083834    4 -rw-r--r--   1 tomcat   apps           18 Oct 31  2018 /home/tomcat/.bash_logout
1083863    4 -rw-r--r--   1 tomcat   apps          193 Oct 31  2018 /home/tomcat/.bash_profile
1083864    4 -rw-r--r--   1 tomcat   apps          231 Oct 31  2018 /home/tomcat/.bashrc

[root@whb ~]# find  /home  -user yw1 -group yw -ls    #查找属主是yw1并且属组是yw
34350047    0 drwx------   2 yw1      yw             62 Dec 16 17:02 /home/yw1
34350048    4 -rw-r--r--   1 yw1      yw             18 Oct 31  2018 /home/yw1/.bash_logout
34350055    4 -rw-r--r--   1 yw1      yw            193 Oct 31  2018 /home/yw1/.bash_profile
34350059    4 -rw-r--r--   1 yw1      yw            231 Oct 31  2018 /home/yw1/.bashrc


[root@whb ~]# find  /home  -user yw1 -a  -group yw -ls    ##查找属主是yw1并且属组是yw   -a  并且,不写也是并且
34350047    0 drwx------   2 yw1      yw             62 Dec 16 17:02 /home/yw1
34350048    4 -rw-r--r--   1 yw1      yw             18 Oct 31  2018 /home/yw1/.bash_logout
34350055    4 -rw-r--r--   1 yw1      yw            193 Oct 31  2018 /home/yw1/.bash_profile
34350059    4 -rw-r--r--   1 yw1      yw            231 Oct 31  2018 /home/yw1/.bashrc



[root@whb ~]# find  /home   \( -user yw1 -o  -group apps \)   -ls  #查找属主是yw1或者属组是apps  -o  或者,必须要用小括号将将条件括起来。

34350047    0 drwx------   2 yw1      yw             62 Dec 16 17:02 /home/yw1
34350048    4 -rw-r--r--   1 yw1      yw             18 Oct 31  2018 /home/yw1/.bash_logout
34350055    4 -rw-r--r--   1 yw1      yw            193 Oct 31  2018 /home/yw1/.bash_profile
34350059    4 -rw-r--r--   1 yw1      yw            231 Oct 31  2018 /home/yw1/.bashrc
67753412    0 drwx------   2 yw1      apps           62 Dec 16 17:02 /home/yw2
67753414    4 -rw-r--r--   1 yw1      apps           18 Oct 31  2018 /home/yw2/.bash_logout
67753415    4 -rw-r--r--   1 yw1      apps          193 Oct 31  2018 /home/yw2/.bash_profile
67753416    4 -rw-r--r--   1 yw1      apps          231 Oct 31  2018 /home/yw2/.bashrc
1083832    0 drwx------   2 tomcat   apps           62 Dec 20 01:29 /home/tomcat
1083834    4 -rw-r--r--   1 tomcat   apps           18 Oct 31  2018 /home/tomcat/.bash_logout
1083863    4 -rw-r--r--   1 tomcat   apps          193 Oct 31  2018 /home/tomcat/.bash_profile
1083864    4 -rw-r--r--   1 tomcat   apps          231 Oct 31  2018 /home/tomcat/.bashrc

[root@whb ~]# find  /home/  -nouser  -ls  #查找没有属主  
34350047    0 drwx------   2 2014     yw             62 Dec 16 17:02 /home/yw1
34350048    4 -rw-r--r--   1 2014     yw             18 Oct 31  2018 /home/yw1/.bash_logout
34350055    4 -rw-r--r--   1 2014     yw            193 Oct 31  2018 /home/yw1/.bash_profile
34350059    4 -rw-r--r--   1 2014     yw            231 Oct 31  2018 /home/yw1/.bashrc
67753412    0 drwx------   2 2014     2029           62 Dec 16 17:02 /home/yw2
67753414    4 -rw-r--r--   1 2014     2029           18 Oct 31  2018 /home/yw2/.bash_logout
67753415    4 -rw-r--r--   1 2014     2029          193 Oct 31  2018 /home/yw2/.bash_profile
67753416    4 -rw-r--r--   1 2014     2029          231 Oct 31  2018 /home/yw2/.bashrc
1083832    0 drwx------   2 2025     2029           62 Dec 20 01:29 /home/tomcat
1083834    4 -rw-r--r--   1 2025     2029           18 Oct 31  2018 /home/tomcat/.bash_logout
1083863    4 -rw-r--r--   1 2025     2029          193 Oct 31  2018 /home/tomcat/.bash_profile
1083864    4 -rw-r--r--   1 2025     2029          231 Oct 31  2018 /home/tomcat/.bashrc
33934918    4 -rw-r--r--   1 2030     2034           18 Oct 31  2018 /home/tom/.bash_logout
33934919    4 -rw-r--r--   1 2030     2034          193 Oct 31  2018 /home/tom/.bash_profile
33934920    4 -rw-r--r--   1 2030     2034          231 Oct 31  2018 /home/tom/.bashrc
[root@whb ~]# find  /home/  -nogroup  -ls        #查找没有属组的
67753412    0 drwx------   2 2014     2029           62 Dec 16 17:02 /home/yw2
67753414    4 -rw-r--r--   1 2014     2029           18 Oct 31  2018 /home/yw2/.bash_logout
67753415    4 -rw-r--r--   1 2014     2029          193 Oct 31  2018 /home/yw2/.bash_profile
67753416    4 -rw-r--r--   1 2014     2029          231 Oct 31  2018 /home/yw2/.bashrc
1083832    0 drwx------   2 2025     2029           62 Dec 20 01:29 /home/tomcat
1083834    4 -rw-r--r--   1 2025     2029           18 Oct 31  2018 /home/tomcat/.bash_logout
1083863    4 -rw-r--r--   1 2025     2029          193 Oct 31  2018 /home/tomcat/.bash_profile
1083864    4 -rw-r--r--   1 2025     2029          231 Oct 31  2018 /home/tomcat/.bashrc
33932521    0 drwx------   2 root     2034           62 Dec 20 01:43 /home/tom
33934918    4 -rw-r--r--   1 2030     2034           18 Oct 31  2018 /home/tom/.bash_logout
33934919    4 -rw-r--r--   1 2030     2034          193 Oct 31  2018 /home/tom/.bash_profile
33934920    4 -rw-r--r--   1 2030     2034          231 Oct 31  2018 /home/tom/.bashrc
[root@whb ~]# find  /home  -nouser  -a -nogroup  -ls        #查找没有属主并且没有属组的
67753412    0 drwx------   2 2014     2029           62 Dec 16 17:02 /home/yw2
67753414    4 -rw-r--r--   1 2014     2029           18 Oct 31  2018 /home/yw2/.bash_logout
67753415    4 -rw-r--r--   1 2014     2029          193 Oct 31  2018 /home/yw2/.bash_profile
67753416    4 -rw-r--r--   1 2014     2029          231 Oct 31  2018 /home/yw2/.bashrc
1083832    0 drwx------   2 2025     2029           62 Dec 20 01:29 /home/tomcat
1083834    4 -rw-r--r--   1 2025     2029           18 Oct 31  2018 /home/tomcat/.bash_logout
1083863    4 -rw-r--r--   1 2025     2029          193 Oct 31  2018 /home/tomcat/.bash_profile
1083864    4 -rw-r--r--   1 2025     2029          231 Oct 31  2018 /home/tomcat/.bashrc
33934918    4 -rw-r--r--   1 2030     2034           18 Oct 31  2018 /home/tom/.bash_logout
33934919    4 -rw-r--r--   1 2030     2034          193 Oct 31  2018 /home/tom/.bash_profile
33934920    4 -rw-r--r--   1 2030     2034          231 Oct 31  2018 /home/tom/.bashrc
[root@whb ~]# find  /home  -nouser  -o  -nogroup  -ls        #不支持  
33932521    0 drwx------   2 root     2034           62 Dec 20 01:43 /home/tom
[root@whb ~]# find  /home \( -nouser  -o  -nogroup \)  -ls  #查找没有属主或者没有属组的
34350047    0 drwx------   2 2014     yw             62 Dec 16 17:02 /home/yw1
34350048    4 -rw-r--r--   1 2014     yw             18 Oct 31  2018 /home/yw1/.bash_logout
34350055    4 -rw-r--r--   1 2014     yw            193 Oct 31  2018 /home/yw1/.bash_profile
34350059    4 -rw-r--r--   1 2014     yw            231 Oct 31  2018 /home/yw1/.bashrc
67753412    0 drwx------   2 2014     2029           62 Dec 16 17:02 /home/yw2
67753414    4 -rw-r--r--   1 2014     2029           18 Oct 31  2018 /home/yw2/.bash_logout
67753415    4 -rw-r--r--   1 2014     2029          193 Oct 31  2018 /home/yw2/.bash_profile
67753416    4 -rw-r--r--   1 2014     2029          231 Oct 31  2018 /home/yw2/.bashrc
1083832    0 drwx------   2 2025     2029           62 Dec 20 01:29 /home/tomcat
1083834    4 -rw-r--r--   1 2025     2029           18 Oct 31  2018 /home/tomcat/.bash_logout
1083863    4 -rw-r--r--   1 2025     2029          193 Oct 31  2018 /home/tomcat/.bash_profile
1083864    4 -rw-r--r--   1 2025     2029          231 Oct 31  2018 /home/tomcat/.bashrc
33932521    0 drwx------   2 root     2034           62 Dec 20 01:43 /home/tom
33934918    4 -rw-r--r--   1 2030     2034           18 Oct 31  2018 /home/tom/.bash_logout
33934919    4 -rw-r--r--   1 2030     2034          193 Oct 31  2018 /home/tom/.bash_profile
33934920    4 -rw-r--r--   1 2030     2034          231 Oct 31  2018 /home/tom/.bashrc



5.根据文件大小查找
    -size           #指定文件的大小(单位:b  k  M  G)

[root@whb ~]# find  /var/log/   -size  -1b  -ls        #查找空文件
33602690    0 -rw-------   1 root     root            0 Nov 26 20:22 /var/log/tallylog
33989594    0 -rw-------   1 root     root            0 Nov 26 20:28 /var/log/anaconda/ks-script-7paxdQ.log
33718871    0 -rw-------   1 root     root            0 Nov 29 03:15 /var/log/boot.log
33989610    0 -rw-r--r--   1 root     root            0 Nov 26 20:30 /var/log/firewalld
33705523    0 -rw-r-----   1 mysql    mysql           0 Nov 26 22:23 /var/log/mariadb/mariadb.log


[root@whb ~]# find  /var/log  -size  -100k  |xargs  ls -lh    #查找小于100k的文件
-rw-------. 1 root   root   27K Nov 26 20:28 /var/log/anaconda/anaconda.log
-rw-------. 1 root   root  4.0K Nov 26 20:28 /var/log/anaconda/ifcfg.log

[root@whb ~]# find  /var/log  -size  22k  |xargs  ls -lh        #查找等于22k的文件
-rw-------. 1 root root 22K Nov 26 20:28 /var/log/anaconda/X.log

[root@whb ~]# find  /var/log  -size  +500k  |xargs  ls -lh   #大于500k的文件
-rw-r--r--. 1 root root 1.3M Dec 20 18:23 /var/log/123.log
-rw-r--r--. 1 root root 3.2M Dec 20 18:23 /var/log/456.log
-rw-------. 1 root root 1.5M Nov 26 20:28 /var/log/anaconda/journal.log
-rw-------. 1 root root 2.2M Dec 20 18:04 /var/log/audit/audit.log
-rw-r--r--. 1 root root 581K Dec 20 01:53 /var/log/lastlog
-rw-------. 1 root root 644K Dec  1 03:12 /var/log/messages-20191201
-rw-r--r--. 1 root root 9.8M Dec 20 18:22 /var/log/test.log

[root@whb ~]# find  /var/log  -size  +2M  |xargs  ls -lh   #大于2M
-rw-r--r--. 1 root root 3.2M Dec 20 18:23 /var/log/456.log
-rw-------. 1 root root 2.2M Dec 20 18:04 /var/log/audit/audit.log
-rw-r--r--. 1 root root 9.8M Dec 20 18:22 /var/log/test.log

[root@whb ~]# find  ./  -size -3M  |xargs ls -lhd   #小于3M
dr-xr-x---. 4 root root 4.0K Dec 20 18:35 ./
drwxr-xr-x. 2 root root    6 Dec  8 00:54 ./.123
-rw-r--r--. 1 root root 1.3M Dec 20 18:35 ./123.log
-rw-------. 1 root root  22K Dec 19 12:55 ./.bash_history
-rw-r--r--. 1 root root   18 Dec 29  2013 ./.bash_logout
-rw-r--r--. 1 root root  212 Dec 16 17:31 ./.bash_profile
-rw-r--r--. 1 root root  192 Dec 16 17:31 ./.bashrc
-rw-r--r--. 1 root root  100 Dec 29  2013 ./.cshrc
-rw-------. 1 root root 1.5M Dec 20 18:35 ./journal.log
-rw-r--r--. 1 root root 581K Dec 20 18:35 ./lastlog
-rw-------. 1 root root   40 Dec  2 19:52 ./.lesshst
-rw-------. 1 root root 644K Dec 20 18:35 ./messages-20191201
drwxr-----. 3 root root   19 Nov 26 21:51 ./.pki
drwxr-----. 2 root root    6 Nov 26 21:51 ./.pki/nssdb
-rw-r--r--. 1 root root  129 Dec 29  2013 ./.tcshrc
-rw-------. 1 root root 5.5K Dec 19 18:35 ./.viminfo
[root@whb ~]# find  ./  -size  2M  |xargs ls -lhd    #等于2M  ,b单位和M单位会凑整,四舍五入
-rw-r--r--. 1 root root 1.3M Dec 20 18:35 ./123.log
-rw-------. 1 root root 1.5M Dec 20 18:35 ./journal.log

[root@whb ~]# find  /var/log/  -size  +100k  -size -300k  |xargs  ls -lh #大于100k并且小于300k
-rw-------. 1 root root 109K Nov 26 20:28 /var/log/anaconda/packaging.log
-rw-------. 1 root root 122K Nov 26 20:28 /var/log/anaconda/storage.log
-rw-------. 1 root root 274K Nov 26 20:28 /var/log/anaconda/syslog
-rw-r--r--. 1 root root 121K Nov 28 18:49 /var/log/dmesg
-rw-r--r--. 1 root root 121K Nov 28 18:48 /var/log/dmesg.old

[root@whb ~]# find  /var/log/  -size  +100k  -a -size -300k  |xargs  ls -lh
-rw-------. 1 root root 109K Nov 26 20:28 /var/log/anaconda/packaging.log
-rw-------. 1 root root 122K Nov 26 20:28 /var/log/anaconda/storage.log
-rw-------. 1 root root 274K Nov 26 20:28 /var/log/anaconda/syslog
-rw-r--r--. 1 root root 121K Nov 28 18:49 /var/log/dmesg
-rw-r--r--. 1 root root 121K Nov 28 18:48 /var/log/dmesg.old


[root@whb ~]# find  /var/log/  \( -size  +1M  -o -size -1b \)  |xargs  ls -lh  #或者
-rw-r--r--. 1 root  root  1.3M Dec 20 18:23 /var/log/123.log
-rw-r--r--. 1 root  root  3.2M Dec 20 18:23 /var/log/456.log
-rw-------. 1 root  root  1.5M Nov 26 20:28 /var/log/anaconda/journal.log
-rw-------. 1 root  root     0 Nov 26 20:28 /var/log/anaconda/ks-script-7paxdQ.log
-rw-------. 1 root  root  2.2M Dec 20 18:04 /var/log/audit/audit.log
-rw-------. 1 root  root     0 Nov 29 03:15 /var/log/boot.log
-rw-r--r--. 1 root  root     0 Nov 26 20:30 /var/log/firewalld
-rw-------. 1 root  root     0 Dec 15 03:26 /var/log/maillog
-rw-------. 1 root  root     0 Dec  1 03:12 /var/log/maillog-20191208
-rw-------. 1 root  root     0 Dec  8 03:47 /var/log/maillog-20191215
-rw-r-----. 1 mysql mysql    0 Nov 26 22:23 /var/log/mariadb/mariadb.log
-rw-------. 1 root  root     0 Dec 15 03:26 /var/log/spooler
-rw-------. 1 root  root     0 Nov 26 20:24 /var/log/spooler-20191201
-rw-------. 1 root  root     0 Dec  1 03:12 /var/log/spooler-20191208
-rw-------. 1 root  root     0 Dec  8 03:47 /var/log/spooler-20191215
-rw-------. 1 root  root     0 Nov 26 20:22 /var/log/tallylog
-rw-r--r--. 1 root  root  9.8M Dec 20 18:22 /var/log/test.log

[root@whb ~]# find  /var/log/ !  \( -size  +1k  -a -size -10M \) |xargs  ls -lhd  #取反
drwxr-xr-x. 2 root   root   176 Nov 26 20:28 /var/log/anaconda
-rw-------. 1 root   root     0 Nov 26 20:28 /var/log/anaconda/ks-script-7paxdQ.log
drwx------. 2 root   root    23 Nov 26 20:30 /var/log/audit
-rw-------. 1 root   root     0 Nov 29 03:15 /var/log/boot.log
-rw-------. 1 root   utmp   384 Nov 27 19:51 /var/log/btmp-20191201
-rw-r--r--. 1 root   root     2 Dec 20 18:25 /var/log/file.log
-rw-r--r--. 1 root   root     0 Nov 26 20:30 /var/log/firewalld
-rw-r--r--. 1 root   root   193 Nov 26 20:22 /var/log/grubby_prune_debug



6.根据文件的权限搜索
    -perm      #指定权限(比如 -644等)

[root@whb ~]# find  ./    -perm  644  -ls            #精确查找644权限的文件 
67514410    4 -rw-r--r--   1 root     root           18 Dec 29  2013 ./.bash_logout
67514413    4 -rw-r--r--   1 root     root          100 Dec 29  2013 ./.cshrc
67514414    4 -rw-r--r--   1 root     root          129 Dec 29  2013 ./.tcshrc
67753426    4 -rw-r--r--   1 root     root          192 Dec 16 17:31 ./.bashrc
67753430    4 -rw-r--r--   1 root     root          212 Dec 16 17:31 ./.bash_profile
67831363 3220 -rw-r--r--   1 root     root      3295805 Dec 20 18:35 ./456.log
67157603   84 -rw-r--r--   1 root     root       594512 Dec 20 18:35 ./lastlog
67831361 10000 -rw-r--r--   1 root     root     10240000 Dec 20 18:35 ./test.log
67831362 1288 -rw-r--r--   1 root     root      1318322 Dec 20 18:35 ./123.log
[root@whb ~]# find  ./    -perm  -644  -ls            #查找权限中包含644权限,必须满足所有条件
67514410    4 -rw-r--r--   1 root     root           18 Dec 29  2013 ./.bash_logout
67514413    4 -rw-r--r--   1 root     root          100 Dec 29  2013 ./.cshrc
67514414    4 -rw-r--r--   1 root     root          129 Dec 29  2013 ./.tcshrc
101325675    0 drwxr-xr-x   2 root     root            6 Dec  8 00:54 ./.123
67753426    4 -rw-r--r--   1 root     root          192 Dec 16 17:31 ./.bashrc
67753430    4 -rw-r--r--   1 root     root          212 Dec 16 17:31 ./.bash_profile
67831363 3220 -rw-r--r--   1 root     root      3295805 Dec 20 18:35 ./456.log
67157603   84 -rw-r--r--   1 root     root       594512 Dec 20 18:35 ./lastlog
67831361 10000 -rw-r--r--   1 root     root     10240000 Dec 20 18:35 ./test.log
67831362 1288 -rw-r--r--   1 root     root      1318322 Dec 20 18:35 ./123.log

[root@whb ~]# find  /  -type f   -perm  -222  -ls    #满足所有权限位都有可写权限

[root@whb ~]# find  ./  -type f   -perm  /222  -ls    #满足其中一个条件就可以
67514410    4 -rw-r--r--   1 root     root           18 Dec 29  2013 ./.bash_logout
67514413    4 -rw-r--r--   1 root     root          100 Dec 29  2013 ./.cshrc
67514414    4 -rw-r--r--   1 root     root          129 Dec 29  2013 ./.tcshrc
67305630   24 -rw-------   1 root     root        21553 Dec 19 12:55 ./.bash_history
67305662    4 -rw-------   1 root     root           40 Dec  2 19:52 ./.lesshst
67753426    4 -rw-r--r--   1 root     root          192 Dec 16 17:31 ./.bashrc
67753430    4 -rw-r--r--   1 root     root          212 Dec 16 17:31 ./.bash_profile
67831363 3220 -rw-r--r--   1 root     root      3295805 Dec 20 18:35 ./456.log


[root@whb ~]# find  / -perm  -4000 -ls        #查找拥有setuid的权限
100790550   24 -rws--x--x   1 root     root        24048 Oct 31  2018 /usr/bin/chfn
100790553   24 -rws--x--x   1 root     root        23960 Oct 31  2018 /usr/bin/chsh
100738359   32 -rwsr-xr-x   1 root     root        32096 Oct 31  2018 /usr/bin/fusermount
100741593   80 -rwsr-xr-x   1 root     root        78272 Oct 31  2018 /usr/bin/gpasswd
100741595   44 -rwsr-xr-x   1 root     root        41872 Oct 31  2018 /usr/bin/newgrp

[root@whb ~]# find  / -perm  -2000 -ls        #查找拥有setgid的权限
  9195    0 drwxr-sr-x   3 root     systemd-journal       60 Nov 28 18:49 /run/log/journal
100686869   16 -r-xr-sr-x   1 root     tty         15344 Jun 10  2014 /usr/bin/wall
100808435   20 -rwxr-sr-x   1 root     tty         19624 Oct 31  2018 /usr/bin/write
100960081  376 ---x--s--x   1 root     nobody     382240 Apr 11  2018 /usr/bin/ssh-agent

[root@whb ~]# find  / -perm  -1000 -ls        #查找拥有sticky的权限
  8425    0 drwxrwxrwt   2 root     root           40 Nov 28 18:49 /dev/mqueue
  8648    0 drwxrwxrwt   2 root     root           40 Nov 28 18:49 /dev/shm
    69    0 drwxrwxrwt   6 root     root          277 Dec 17 18:41 /var/tmp
34102535    0 drwxrwxrwt   2 root     root            6 Nov 26 23:10 /var/tmp/systemd-private-



7.根据文件的最后的修改时间查找
            -mtime        #后面跟时间(天数)
 #创造条件
[root@whb ~]# for i in {01..20};do  date -s "201912$i" && touch  file-$i.txt ;done

[root@whb ~]# ntpdate  ntp.aliyun.com


[root@whb ~]# find  ./  -mtime  +7  -ls #查找最后修改时间七天以前的,不包含第七天,不会计算当天的文件

67514410    4 -rw-r--r--   1 root     root           18 Dec 29  2013 ./.bash_logout
67514413    4 -rw-r--r--   1 root     root          100 Dec 29  2013 ./.cshrc
67514414    4 -rw-r--r--   1 root     root          129 Dec 29  2013 ./.tcshrc
33557678    0 drwxr-----   3 root     root           19 Nov 26 21:51 ./.pki
67157653    0 drwxr-----   2 root     root            6 Nov 26 21:51 ./.pki/nssdb
67305662    4 -rw-------   1 root     root           40 Dec  2 19:52 ./.lesshst
101325675    0 drwxr-xr-x   2 root     root            6 Dec  8 00:54 ./.123
67560146    0 -rw-r--r--   1 root     root            0 Dec  1 00:00 ./file-01.txt
67560147    0 -rw-r--r--   1 root     root            0 Dec  2 00:00 ./file-02.txt
67831365    0 -rw-r--r--   1 root     root            0 Dec  3 00:00 ./file-03.txt
67831367    0 -rw-r--r--   1 root     root            0 Dec  4 00:00 ./file-04.txt
67831369    0 -rw-r--r--   1 root     root            0 Dec  5 00:00 ./file-05.txt
67831370    0 -rw-r--r--   1 root     root            0 Dec  6 00:00 ./file-06.txt
67831371    0 -rw-r--r--   1 root     root            0 Dec  7 00:00 ./file-07.txt
67299630    0 -rw-r--r--   1 root     root            0 Dec  8 00:00 ./file-08.txt
67831372    0 -rw-r--r--   1 root     root            0 Dec  9 00:00 ./file-09.txt
67831373    0 -rw-r--r--   1 root     root            0 Dec 10 00:00 ./file-10.txt
67831374    0 -rw-r--r--   1 root     root            0 Dec 11 00:00 ./file-11.txt
67831375    0 -rw-r--r--   1 root     root            0 Dec 12 00:00 ./file-12.txt
[root@whb ~]# find  ./  -mtime  7  -ls         #显示第七天的文件
67831364    0 -rw-r--r--   1 root     root            0 Dec 13 00:00 ./file-13.txt


[root@whb ~]# find  ./  -mtime  -7  -ls     #显示7天以内的文件,不包含第7七天的文件,包含当天的文件
67157601    4 dr-xr-x---   4 root     root         4096 Dec 20 00:00 ./
67305630   24 -rw-------   1 root     root        21553 Dec 19 12:55 ./.bash_history
67753426    4 -rw-r--r--   1 root     root          192 Dec 16 17:31 ./.bashrc
67753430    4 -rw-r--r--   1 root     root          212 Dec 16 17:31 ./.bash_profile
67831363 3220 -rw-r--r--   1 root     root      3295805 Dec 20  2019 ./456.log
67831377    0 -rw-r--r--   1 root     root            0 Dec 14 00:00 ./file-14.txt
67831378    0 -rw-r--r--   1 root     root            0 Dec 15 00:00 ./file-15.txt
67831379    0 -rw-r--r--   1 root     root            0 Dec 16 00:00 ./file-16.txt
67831380    0 -rw-r--r--   1 root     root            0 Dec 17 00:00 ./file-17.txt
67831381    0 -rw-r--r--   1 root     root            0 Dec 18 00:00 ./file-18.txt
67831382    0 -rw-r--r--   1 root     root            0 Dec 19 00:00 ./file-19.txt
67831383    0 -rw-r--r--   1 root     root            0 Dec 20 00:00 ./file-20.txt
67815503    8 -rw-------   1 root     root         5632 Dec 19 18:35 ./.viminfo
67157603   84 -rw-r--r--   1 root     root       594512 Dec 20  2019 ./lastlog
67157611 2156 -rw-------   1 root     root      2206893 Dec 20  2019 ./audit.log
67157612 1520 -rw-------   1 root     root      1552850 Dec 20  2019 ./journal.log
67831360  644 -rw-------   1 root     root       659161 Dec 20  2019 ./messages-20191201
67831361 10000 -rw-r--r--   1 root     root     10240000 Dec 20  2019 ./test.log
67831362 1288 -rw-r--r--   1 root     root      1318322 Dec 20  2019 ./123.log

[root@whb ~]# find  ./  -mtime  -7  -mtime +3   -ls         #查找3天以前并且7天以内的文件
67831377    0 -rw-r--r--   1 root     root            0 Dec 14 00:00 ./file-14.txt
67831378    0 -rw-r--r--   1 root     root            0 Dec 15 00:00 ./file-15.txt
67831379    0 -rw-r--r--   1 root     root            0 Dec 16 00:00 ./file-16.txt



Find命令的动作

    -print        #默认动作,将查找出来的文件打印出来

    -ls            #以长格式显示查找出来的文件的详细信息,包含inode号

    -delete        #把查找出来的文件删除,只能删除空目录

    -ok            #后面可以自定义shell命令,会交互式询问你, 

    -exec             #后面可以自定义shell命令,不会交互式的询问,会将所有查找出来的文件进行一个个的赋值给后    面的{},
            ;是shell命令的分隔符,\取消其特殊含义

[root@whb ~]# find  ./  -mtime +7  -delete
[root@whb ~]# ll
total 18912
-rw-r--r--. 1 root root  1318322 Dec 20  2019 123.log
-rw-r--r--. 1 root root  3295805 Dec 20  2019 456.log
-rw-------. 1 root root  2206893 Dec 20  2019 audit.log


[root@whb ~]# find  ./  -type  d  -delete
find: cannot delete ‘./test01’: Directory not empty


-ok        #后面可以自定义shell命令,会交互式询问你, 

[root@whb ~]# find  ./  -size  +1M  -ok ls -lhd  {} \;
< ls ... ./456.log > ? y
-rw-r--r--. 1 root root 3.2M Dec 20  2019 ./456.log
< ls ... ./audit.log > ? y
-rw-------. 1 root root 2.2M Dec 20  2019 ./audit.log
< ls ... ./journal.log > ? y
-rw-------. 1 root root 1.5M Dec 20  2019 ./journal.log
< ls ... ./test.log > ? y
-rw-r--r--. 1 root root 9.8M Dec 20  2019 ./test.log
< ls ... ./123.log > ? y
-rw-r--r--. 1 root root 1.3M Dec 20  2019 ./123.log

-exec     #后面可以自定义shell命令,不会交互式的询问,会将所有查找出来的文件进行一个个的赋值给后面的{},
;是shell命令的分隔符,\取消其特殊含义

[root@whb ~]# find  ./  -size  +1M  -exec   ls -lhd  {} \;
-rw-r--r--. 1 root root 3.2M Dec 20  2019 ./456.log
-rw-------. 1 root root 2.2M Dec 20  2019 ./audit.log
-rw-------. 1 root root 1.5M Dec 20  2019 ./journal.log
-rw-r--r--. 1 root root 9.8M Dec 20  2019 ./test.log
-rw-r--r--. 1 root root 1.3M Dec 20  2019 ./123.log




Find命令跟xargs的配合使用

[root@whb ~]# find  ./  -type  f  |xargs  ls -lh
-rw-r--r--. 1 root root 1.3M Dec 20  2019 ./123.log
-rw-r--r--. 1 root root 3.2M Dec 20  2019 ./456.log
-rw-------. 1 root root 2.2M Dec 20  2019 ./audit.log
-rw-------. 1 root root  22K Dec 19 12:55 ./.bash_history
-rw-r--r--. 1 root root  212 Dec 16 17:31 ./.bash_profile
-rw-r--r--. 1 root root  192 Dec 16 17:31 ./.bashrc

[root@whb ~]# find  ./  -type  f  |xargs  cp  -t  /opt/


[root@whb ~]# find  ./  -type  f  |xargs -I {}  cp {}  /mnt


    -I        将find命令查找出来的文件进行统一赋值给{},后续的命令进行调用该{}.

[root@whb ~]# find  ./  -type  f  |xargs -I {}  mv  {}  /mnt

[root@whb ~]# find  /root  -maxdepth  2  -type  d  |xargs -I {}   du  -sh {}
20M    /root
644K    /root/test01


[root@whb ~]# du -sh  /root  /root/test01/
20M    /root


80. zip/unzip

zip        #压缩

        -r        #递归打包,打包目录
        -q        #打包的时候不显示打包过程 
unzip    #解压缩
        -d        #解压到指定目录
        -l        #显示压缩文件的列表信息
        -p        #不显示解压过程

81. gzip

#压缩文件,不能压缩目录   

        -d        #解压
        -r        #压缩目录下的所有文件
        -rd        #解压目录下的所有压缩文件

82. zcat

#查看gzip格式的压缩文件    

83. tar

#打包命令

    c        #创建包  
    z        #使用gzip格式压缩
    j        #使用bzip2格式压缩
    J        #使用xz格式压缩
    f        #指定压缩包的名称
    v        #显示打包的过程

    cjf            #打包压缩 bz2格式
    cJf            #打包压缩 xz格式

    t            #显示压缩包列表,自动识别压缩包格式
    tf
    x            #解压 ,自动识别压缩包格式 
    xf
    P            #使用绝对路径打包 
    h            #打包软连接的真实文件数据
    -C            #解压到指定的目录  
    X            #指定排除列表文件

    --exclude=        #排除指定的文件
    --exclude-from=        #指定排除的列表文件



实例1:打包软连接文件  
    [root@whb ~]# tar  czhf  grub-1.tar.gz   /etc/grub2.cfg 
    tar: Removing leading `/' from member names


实例2:排除文件  
方法一:
    #排除单个文件
    [root@whb ~]# tar  czf  etc-2.tar.gz  --exclude=/etc/services   /etc
    tar: Removing leading `/' from member names

    #排除多个文件 
    [root@whb ~]# tar  czf  etc-3.tar.gz  --exclude=/etc/{passwd,services,shadow}   /etc
    tar: Removing leading `/' from member names

    #排除两个不同路径的文件
    [root@whb ~]# tar  czf  etc-4.tar.gz  --exclude=/etc/services --    exclude=/etc/firewalld/services   /etc
    tar: Removing leading `/' from member names

    #根据排除列表进行排除文件
    [root@whb ~]# cat paichu.list
    /etc/services
    /etc/passwd
    /etc/sysconfig/network-scripts
    /etc/hosts

    [root@whb ~]# tar  czf   etc-5.tar.gz   --exclude-from=paichu.list   /etc
    tar: Removing leading `/' from member names

 方法二:压缩包名要跟f选项对应    X要跟排除列表文件对应
     [root@whb ~]# tar  czfX   etc-6.tar.gz  paichu.list   /etc
    tar: Removing leading `/' from member names

84. date

#显示当前时间

[root@whb ~]# date
Tue Dec 24 20:16:20 CST 2019

[root@whb ~]# date  +%F        #显示当前日期
2019-12-24
[root@whb ~]# date  +%T        #显示当前时间
20:17:52
[root@whb ~]# date +%Y-%m-%d    #显示当前日期
2019-12-24
[root@whb ~]# date +%y-%m-%d    #显示当前日期,没有显示世纪
19-12-24

[root@whb ~]# date +%H:%M:%S    #显示时分秒 
20:20:18

[root@whb ~]# date +%s        #时间戳,距离1970年1月1日0点0分0秒,过了多少秒
1577190037


[root@whb ~]# date +%w        #周几
2
[root@whb ~]# date +%W        #今年的第几周
51
[root@whb ~]# date +%j        #几年的第几天
358


    -d        #根据自己的要求显示时间,而不是修改时间  
[root@whb ~]# date +%F
2019-12-24
[root@whb ~]# date -d  "+1 day"  +%F
2019-12-25
[root@whb ~]# date +%F
2019-12-24
[root@whb ~]# date -d  "-1 day"  +%F
2019-12-23
[root@whb ~]# date -d  "-1 year"  +%F
2018-12-24
[root@whb ~]# date -d  "-1 month"  +%F
2019-11-24


    -s            #修改时间   
[root@whb ~]# date -s  20191001
Tue Oct  1 00:00:00 CST 2019
[root@whb ~]# date  +%F
2019-10-01
[root@whb ~]# date -s  2019/12/1
Sun Dec  1 00:00:00 CST 2019
[root@whb ~]# date  +%F
2019-12-01
[root@whb ~]# date -s  12:26:00
Sun Dec  1 12:26:00 CST 2019
[root@whb ~]# date -s  "20191224 12:27:00"
Tue Dec 24 12:27:00 CST 2019
[root@whb ~]# date +%F
2019-12-24
[root@whb ~]# date 
Tue Dec 24 12:27:10 CST 2019

85. rpm

#基于本地的rpm包进行管理


-i            安装rpm包
-v            显示安装过程
-h            显示安装的进度
-R             显示依赖环境
-e             卸载rpm包
-U            升级rpm包
-q             查询软件包是否安装
-qa         查询所有的已安装的软件包
-ql         查看软件包中的列表信息
-qc         查看软件包的相关配置文件
-qi         显示软件包的本身信息
-qf            查看命令属于哪个软件包
-qR         依赖查看软件包的所有    

86. yum

#软件包管理器


选项:

    repolist        #显示仓库列表

        enabled        #显示可用的
        disabled      #显示不可用的
        all            #显示所有仓库

    install            #安装 

        -y            #免交互方式安装
        --downloadonly    #只下载
        --downloaddir    #指定下载之后的路径

    list            #显示所有可安装的软件包列表

        installed        #显示已安装
        updates        #显示可更新的

    check-update    #显示可更新的

    update            #更新软件源,升级系统版本  

    info            #显示软件包详细信息  

    provides        #查询命令属于哪个软件包

    search            #搜索与关键字相关的包

    remove            #卸载

    erase            #卸载

    clean            #清除

        packages    #清除包的缓存

        all            #清除所有

        plugins        #清除插件

    makecache        #生成缓存  

    reinstall        #重新安装 

    localinstall    #本地安装  

    history            #查看历史事务

        list        #显示列表

            all        #显示所有  

        info    id    #显示该id的详细信息

        undo    id    #回滚该操作

    groups            #组操作 

        install        #安装

        remove        #卸载  

    yum-config-manage        #yum仓库管理

        --disable        仓库名称        #禁用该仓库

        --enable        仓库名称        #启用该仓库 

    #指定历史事务的显示
    [root@whb ~]# yum   --setopt=history_list_view=commands  history  list all
    Loaded plugins: fastestmirror
    ID     | Command line             | Date and time    | Action(s)      | Altered
    -------------------------------------------------------------------------------
        26 | history undo 22          | 2019-12-25 12:30 | Erase          |    1   
        25 | groups remove -y Python  | 2019-12-25 12:27 | Erase          |   10   
        24 | groups install -y Python | 2019-12-25 12:26 | I, U           |   34   
        23 | localinstall -y /opt/gpm | 2019-12-25 12:25 | Install        |    4   

87. fdisk

#MBR格式磁盘分区工具

选项:
    -l        #查看当前系统所有磁盘的分区信息
        fdisk -l [-u] [device...]

    #给设备文件进行分区
    [root@whb ~]# fdisk /dev/sdb

内置命令:
    a   toggle a bootable flag
       b   edit bsd disklabel
       c   toggle the dos compatibility flag
    d   delete a partition               注:这是删除一个分区的动作;
       l   list known partition types      注:l是列出分区类型,以供我们设置相应分区的类型;
       m   print this menu                 注:m 是列出帮助信息;
       n   add a new partition             注:添加一个分区;
       o   create a new empty DOS partition table 
       p   print the partition table         注:p列出分区表;
       q   quit without saving changes     注:不保存退出;
       s   create a new empty Sun disklabel    
       t   change a partition's system id  注:t 改变分区类型;
       u   change display/entry units 
       v   verify the partition table
       w   write table to disk and exit     注:把分区表写入硬盘并退出;
       x   extra functionality (experts only) 注:扩展应用,专家功能;

88. gdisk

    #gpt格式磁盘分区公式

需要安装软件包
    yum install gdisk -y

#给设备文件进行分区
    [root@whb ~]# fdisk /dev/sdb

内置命令:
    b    back up GPT data to a file
    c    change a partition's name
    d    delete a partition        注:这是删除一个分区的动作;
    i    show detailed information on a partition
    l    list known partition types    注:l是列出分区类型,以供我们设置相应分区的类型;
    n    add a new partition            注:添加一个分区;
    o    create a new empty GUID partition table (GPT)
    p    print the partition table        注:p列出分区表;
    q    quit without saving changes        注:不保存退出;
    r    recovery and transformation options (experts only)
    s    sort partitions
    t    change a partition's type code        注:t 改变分区类型;
    v    verify disk
    w    write table to disk and exit    注:把分区表写入硬盘并退出;
    x    extra functionality (experts only)        注:扩展应用,专家功能;
    ?    print this menu        注:? 是列出帮助信息;

89. lsblk

#能列出系统上所有的磁盘

选项:
    -d :仅列出磁盘本身,并不会列出该磁盘的分区数据
    -f :同时列出该磁盘内的文件系统名称
    -i :使用 ASCII 的线段输出,不要使用复杂的编码 (再某些环境下很有用)
    -m :同时输出该设备在 /dev 下面的权限数据 (rwx 的数据)
    -p :列出该设备的完整文件名!而不是仅列出最后的名字而已。
    -t :列出该磁盘设备的详细数据,包括磁盘伫列机制、预读写的数据量大小等    

90. df

#用于显示 Linux 系统中各文件系统的硬盘使用情况

选项:
    -a    显示所有文件系统信息,包括系统特有的 /proc、/sysfs 等文件系统;
    -m    以 MB 为单位显示容量;
    -k    以 KB 为单位显示容量,默认以 KB 为单位;
    -h    使用人们习惯的 KB、MB 或 GB 等单位自行显示容量;
    -T    显示该分区的文件系统名称;
    -i    不用硬盘容量显示,而是以含有 inode 的数量来显示。

91. partprobe

#通知操作系统,分区表已经改变

92. mount/umount

mount    #挂载设备文件

    语法:   命令  +  选项  +  设备 +  挂点 

        选项:
            -a        #重新加载配置文件,没有挂载的进行挂载 
            -o        #指定挂载的参数  
            -t        #指定的挂载的文件系统 
umount    #卸载设备文件

    -l        #强制卸载

93. blkid

#查询所有的设备的文件系统类型

    [root@whb ~]# blkid 
    /dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660"         PTTYPE="dos" 
    /dev/sda1: UUID="896d3614-9743-4709-99fa-977a20abf0e2" TYPE="xfs" 
    /dev/sda2: UUID="93217f0f-86ad-40a5-bc6e-2ccced2cd67e" TYPE="swap" 
    /dev/sda3: UUID="00b4a22f-777b-40d6-9ddb-19aa801935b7" TYPE="xfs" 
    /dev/sdb1: UUID="9hvCgN-vtv8-jN1f-2bIl-38HZ-3Mu0-IkpKkp" TYPE="LVM2_member" 
    /dev/mapper/storage-datastore: UUID="fb201310-1e5b-4610-8f77-f7de5599c515" TYPE="xfs" 

94. free

#显示系统的内存信息

选项:    
    -m        #以m为单位来显示内存的信息
    -h        #以适于人类可读方式显示内存信息
    -k        #以kb为单位来显示内存的信息
    -g        #以G为单位来显示内存的信息
    -b        #以bytes为单位来显示内存的信息
    -t        #显示linux的全部内存

    -s        #没隔N秒打印一次内存信息    

free -c N:表示重复打印内存信息N次

95. swapon/swapoff

swapon    #启用虚拟内存

    选项:    
        -a    将/etc/fstab文件中所有设置为swap的设备,启动为交换区;
        -p<优先顺序>:指定交换区的优先顺序;
        -s    显示交换区的使用状况;
    语法:
        swapon (选项)(参数)

    实例:


swapoff    #禁用虚拟内存

    选项:    
        -a    关闭配置文件“/etc/fstab”中所有的交换空间。

    语法:
        swapoff (选项) (参数)

    实例:关闭交换分区
    swapoff /dev/sda2

96. crontab

#设置定时任务

语法:
    crontab [ -u user ] file
    crontab [ -u user ] { -l | -r | -e }

选项:
    -e        #编辑定时任务    ==== vim /var/spool/cron/root
    -l        #列出定时任务
    -r        #删除定时任务

97. uname

#打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)

语法:
    uname (选项)

选项:
    -a或--all:显示全部的信息;

    -m或--machine:显示电脑类型; 

    -n或-nodename:显示在网络上的主机名称; 

    -r或--release:显示操作系统的发行编号; 

    -s或--sysname:显示操作系统名称;

    -v:显示操作系统的版本; 

    -p或--processor:输出处理器类型或"unknown"; 

    -i或--hardware-platform:输出硬件平台或"unknown"; 

    -o或--operating-system:输出操作系统名称; 

    --help:显示帮助; 

    --version:显示版本信息;

98. ps

#查看进程的信息,静态的显示  

    选项:
        a        显示所有进程
        u        显示用户等信息
        x        显示没有控制终端地进程
        o        显示指定的进程信息,例如:user,pid,nice,command等
        -e        显示所有进程,环境变量    
        -f        显示更多信息

---------------------------------------------------------------------------
[root@whb ~]# ps  aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.4 128144  4844 ?        Ss    2019   1:27 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S     2019   0:00 [kthreadd]

---------------------------------------------------------------------------
#每列的含义

USER          #进程运行的用户     

PID         #进程的ID号

%CPU         #进程占用CPU的使用百分比

%MEM        #进程占用内存的使用百分比 

VSZ           #虚拟内存集   进程占用虚拟内存的使用空间

RSS         #物理内存集    进程占用物理内存的使用空间

TTY          #终端  

            ?        #没有终端,内核运行的一些程序  
            tty1    #本地机器终端
            pts/0    #远程的虚拟终端  0   第一个虚拟终端
            pts/1    #第二个虚拟终端  

STAT         #进程运行的状态 

            S    #正在休眠状态
            s    #父进程,说明下面有子进程 
            R    #正在运行的状态
            D    #无法被终止的休眠状态  
            T    #被暂停或者被追踪的状态  
            Z    #僵尸进程 
            l    #字母L,以线程方式运行
            <    #优先级别高的进程
            N    #优先级低的进程
            +    #前台运行

START       #启动的时间,分钟

TIME         #进程使用CPU的时间

COMMAND        #执行的指令

            有[]        #内核态,系统运行的程序
            无[]        #用户态,用户运行的程序 

99. top

#实时显示系统各种状态信息

    选项:    
        -d        #指定进程刷新时间
        -u        #显示指定用户的进程信息
        -p        #显示指定PID的进程信息

    内部命令:
        q        #退出
        h        #帮助
        z        #高亮显示
        b        #高亮显示正在运行状态的进程
        s        #设置刷新时间
        M        #根据内存的使用百分比的大小进行排序
        P        #根据cpu的使用百分比的大小进行排序
        1        #数字1,显示所有cpu核心的工作状态
top - 15:59:24 up  1:27,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 107 total,   1 running, 106 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   995896 total,   773060 free,    95312 used,   127524 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   749820 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
  6053 root      20   0  300720   6328   4976 S  0.7  0.6   0:04.84 vmtoolsd
     1 root      20   0  125432   3784   2572 S  0.0  0.4   0:01.77 systemd
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd 

---------------------------------------------------------------------------
top - 11:30:21 up 5 days, 23:38,  3 users,  load average: 0.00, 0.01, 0.05

11:30:21                #当前系统的时间

up 5 days, 23:38,      #系统运行时间,从你开机到现在总共运行了多长时间

3 users,              #shell窗口的数量,登录的用户数量  

load average: 0.00, 0.01, 0.05        #系统的平均负载    1分钟   5分钟   15分钟  

---------------------------------------------------------------------------
Tasks: 107 total,   1 running, 106 sleeping,   0 stopped,   0 zombie

Tasks            #任务

126 total,           #总的任务数量

2 running,         #2个正在运行中

123 sleeping,          #123个处于休眠状态

1 stopped,           #1个处于停止状态

0 zombie            #0个僵尸状态

---------------------------------------------------------------------------
%Cpu(s):  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

%Cpu(s):     #占用CPU的使用时间百分比 

0.3 us,      #用户态,用户运行程序所占用cpu的时间百分比

0.0 sy,      #内核态,运行程序所占用cpu的时间百分比

0.0 ni,     #优先级高的程序所占用cpu的时间百分比

99.7 id,      #空闲的占用cpu的时间百分比

0.0 wa,      #CPU等待IO完成的占用cpu的时间百分比

0.0 hi,      #hardirq  处理硬中断占用cpu的时间百分比

0.0 si,      #softirq    处理软中断占用cpu的时间百分比

0.0 st    #监控程序所窃取主机的占用cpu的时间百分比

---------------------------------------------------------------------------
KiB Mem :   995896 total,   121784 free,   134100 used,   740012 buff/cache

物理内存:    总的内存空间      空闲的内存空间     已使用的内存空间     缓冲和缓存所占用的内存空间

---------------------------------------------------------------------------
KiB Swap:  3121144 total,  3060984 free,    60160 used.   595240 avail Mem 

虚拟内存        总的内存空间      空闲的内存空间     已使用的内存空间     可使用的内存空间

---------------------------------------------------------------------------
PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND

PID         #进程的ID

USER      #进程运行的用户

PR           #优先级的映射值,跟NI相差20个数    0   对应NI的-20

NI         #优先级,值越小,优先级越高

VIRT      #虚拟内存使用空间  

RES        #物理内存使用空间

SHR     #共享内存的使用空间

S         #进程的运行状态

%CPU     #占用的CPU的百分比

%MEM     #占用内存的百分比

TIME+     #运行的时间

COMMAND  #运行的命令

100. htop

#动态监控进程状态,可以使用鼠标点击操作,是top命令的高级版

101. kill、killall、pkill

kill    #根据进程id去终止进程,如果进程不存在,会提示

    信号:
         1) SIGHUP                #重新加载配置文件,平滑重启
         2) SIGINT                #跟ctrl+c一样,终止进程
         9) SIGKILL                #强制终止进程
         15) SIGTERM                #终止进程,默认的信号  
         20) SIGTSTP                #跟ctrl+z一样,将前台进程暂停到后台

    实例:
         #终止进程
        [root@whb ~]# kill  -15  2233

         #平滑重启,进程的ID不会改变,会重新加载配置文件
        [root@whb ~]# kill  -1  2570

        #取消当前进程的操作
        [root@whb ~]# kill  -2  2726

         #强制终止进程
        [root@whb ~]# kill  -9  3091

         #将前台进程暂停到后台
        [root@whb ~]# kill  -20  3091        



killall        #根据进程名终止进程,如果进程不存在,会提示,精确匹配 

    实例:
        [root@whb ~]# killall  top
        [root@whb ~]# ps  aux |grep top
        [root@whb ~]# killall  top
        top: no process found



pkill    #根据进程名称终止进程,进程如果不存在,不会提示,模糊匹配 

102. bg、fg、jobs

jobs    #查看挂在后台的进程、程序

bg    %ID        #让一个暂停的后台进程在后台进行运行

fg    %ID        #让一个后台的进程放入到前台运行

实例:
    [root@whb ~]# jobs
    [1]+  Stopped                 vim test.txt
    [root@whb ~]# bg  %1
    [1]+ vim test.txt &
    [root@whb ~]# jobs
    [1]+  Stopped                 vim test.txt
    [root@whb ~]# fg %1
    vim test.txt

    [1]+  Stopped                 vim test.txt
    [root@whb ~]# bg  %2
    [2]+ tar czPf etc2.tar.gz /etc/ /var/ &
    [root@whb ~]# jobs
    [1]+  Stopped                 vim test.txt
    [2]-  Running                 tar czPf etc2.tar.gz /etc/ /var/ &

103. nohup

nohup        #不中断运行程,与&使用

&            #将前台运行的程序放入到后台运行

104. screen

#后台管理进程命令,会生成一个新的子shell,在子shell中运行你的进程,父shell退出了,不影响子shell的运行

    ctrl键+a+d        #临时退出这个子shell
    exit            #是真正的退出这个子shell窗口

选项:
    -r        #恢复离线的screen子进程
    -S        #指定screen子进程的名字
    -x        #恢复之前离线的screen子进程
    -ls或-list    #显示目前所有的screen作业


实例:
    [root@whb ~]# screen  -list        #显示所有screen的shell窗口
    There is a screen on:
        8431.pts-0.whb    (Detached)
    1 Socket in /var/run/screen/S-root.

    [root@whb ~]# screen  -r  8431    #进入指定的shell中
    [screen is terminating]
    [root@whb ~]# 
    [root@whb ~]# screen  -list
    No Sockets found in /var/run/screen/S-root.

    [root@whb ~]# screen   -S  tar     #给这个子shell起个名字  

    [root@whb ~]# screen  -list
    There is a screen on:
        8770.tar    (Detached)
    1 Socket in /var/run/screen/S-root.

    [root@whb ~]# screen  -r  tar 

    [root@whb ~]# screen   -x  tar      #远程演示,主窗口操作,副窗口演示

105. nice/renice

nice        #启动程序时,设置程序的优先级

    [root@whb ~]# nice  -n  -10   vim  test.txt


renice        #修改已经存在的程序的优先级

    [root@whb ~]# renice  -n  0  4361        #修改已经存在的程序的优先级
    4361 (process ID) old priority -20, new priority 0