zoukankan      html  css  js  c++  java
  • Linux

    修改虚拟机的主机ip和主机名

    修改主机ip:vim /etc/sysconfig/network-scripts/ifcfg-enh0
    重启网络服务:service network restart
    
    修改主机名:
    vim /etc/hostname
    vim /etc/sysconfig/network

    一、bash特性

    1、Tab键补全

    # 命令补全
    [root@qls ~]# user
    useradd     userdel     usermod     usernetctl  users
    
    # 选项补全
        
    # 参数补全
    [root@qls ~]# ls  /etc/sys
    sysconfig/          sysctl.conf         sysctl.d/           systemd/            system-release      system-release-cpe

     2、快捷键

    Ctrl键+c        # 终止当前的操作
    Ctrl键+d        # 退出当前所登录的用户
    Ctrl键+l        # 清屏
    Ctrl键+a        # 将当前光标所在位置移动到命令行的行首
    Ctrl键+e        # 将当前光标所在位置移动到命令行的行尾
    Ctrl键+u        # 删除当前光标所在位置向前的所有字符
    Ctrl键+k        # 删除当前光标所在位置向后的所有字符
    Ctrl键+y        # 粘贴剪切板上面的内容
    Ctrl键+w        # 删除当前光标所在位置向前的一组字符串
    Ctrl键+方向键    # 向左或者向右移动一组字符串
    delete          # 从前往后删除一个字符
    Ctrl键+r        # 搜索历史命令
    Ctrl键+z        # 把当前的任务放到后台运行
    Ctrl键+s        # 锁屏
    Ctrl键+q        # 解锁
    esc键+.         # 使用上一条命令的最后的参数
    !!            # 执行上一条命令
    !ls            # 执行最近的一次以ls开头的命令

    3、历史记录history

    history          # 查看历史命令
    选项:
        history-c        #清空的历史命令
        history-d        #指定删除历史命令,id
        history-w        #命令写入到文件中

    4、别名alias

    [root@qls ~]# alias tong='ping baidu.com'   # 起别名关键字alias
    [root@qls ~]# tong
    PING baidu.com (39.156.69.79) 56(84) bytes of data.
    64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=1 ttl=128 time=29.8 ms
    64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=2 ttl=128 time=30.8 ms
    ^C
    --- baidu.com ping statistics ---
    3 packets transmitted, 2 received, 33% packet loss, time 2004ms
    rtt min/avg/max/mdev = 29.849/30.346/30.844/0.527 ms
    [root@qls ~]# unalias  tong      # 取消别名关键字unalias 别名
    
    
    #查看系统自带的别名:alias
    [root@qls ~]# alias 
    alias cp='cp -i'
    alias egrep='egrep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias grep='grep --color=auto'
    alias l.='ls -d .* --color=auto'
    alias ll='ls -l --color=auto'
    alias ls='ls --color=auto'
    alias mv='mv -i'
    alias rm='rm -i'
    alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

    二、查看命令的帮助信息

    man      # 查看命令的详细的帮助信息  man cd
    help     # 查看内置命令的帮助信息,查看所有的内置命令
    
    # 使用选项查看帮助信息
    [root@qls ~]# ss --help
    
    info     # 显示命令帮助信息  info cd
    
    
    # 网站命令帮助
    http://man.linuxde.net
    http://liunx.web3.xin
    http://linux.51yip.com

    三、关机和重启命令

    1、关机

    shutdown -h 0        # 立刻关机  或者  now
    shutdown -h 1        # 1分钟之后进行关机,是以分钟为级别的
    shutdown -h 11:00    # 在11:00的时候会执行关机的命令
    
    shutdown  -c         # 取消当前的关机操作
    
    poweroff             #关机
    
    halt                 # 关机,只会关闭系统,不会关闭电源
        -p               # 关闭电源
        
    init  0              # 切换运行级别进行关机

    2、重启

    shutdown  -r  0        # 立刻重启  或者  now
    shutdown  -r  1        # 1分钟之后进行重启,是以分钟为级别的
    shutdown  -r 11:00     # 在11:00的时候会执行重启的命令
    
    reboot                 # 重启
    
    init  6                # 重启

    四、注销

    logout        # 注销
    Ctrl键+D      # 快捷键注销
    exit          # 退出当前用户

    五、显示ip地址的命令

    ①ip            #显示ip地址
        ip address    #显示所有的ip地址
        简写:ip a
        ip address  show  eth0    #显示某块网卡的ip地址
        简写:ip a s eth0
    
    ②ifconfig          # 查看ip地址的命令  
        需要安装:yum install -y  net-tools
        ifconfig        # 查看所有的ip地址
        ifconfig  eth0  # 显示某块网卡的ip地址
    
    ③hostname          #本身显示主机名的命令
        [root@zgs ~]# hostname -I
        10.0.0.100 172.16.1.100 
        [root@zgs ~]# hostname -i
        fe80::450:ebcb:3074:7d5%eth0 fe80::131:3a7b:58ff:890e%eth1 10.0.0.100 172.16.1.100

    六、文件管理

    1、目录结构,查看:ll /

    一切以根为顶点的目录
    
    /bin   # 普通命令的目录
      /usr/bin
    /sbin  # 超级管理员所使用的命令目录
      /usr/sbin
    
    /boot  # 引导目录
    
    /dev   # 设备目录 
        /dev/cdrom      # 光驱。
        /dev/ sr0       # 光盘
        /dev/random     # 产生随机数
        /dev/zero       # 源源不断产生数据
        /dev/pts/       # 虚拟终端
        /dev/sd*        # 磁盘分区
        /dev/stderr     # 错误输出  2
        /dev/stdin      # 标准输入  0
        /dev/stdout     # 标准输出  1
        /dev/null       # 黑洞
    
    
    /etc   # 配置文件
        /etc/sysconfig/network-scripts/ifcfg-eth*   #网卡配置文件
        /etc/hostname          # 主机名配置文件
        /etc/resolv.conf       # 本地的dns配置文件
        /etc/fstab             # 挂载设备配置文件
        /etc/sysconfig/selinux # 安全策略
        /etc/motd              # 登录系统前显示内容
        /etc/hosts             # 本地域名解析的文件
    
    /home    # 所有普通用户的家目录  /home/username
    /root    # 超级管理员的家目录
    
    /lib     # 库文件    32位
      lib -> usr/lib
    /lib64   # 库文件    64位
      lib64 -> usr/lib64
    
    /media   # 挂载点,可移动的设备
    
    /mnt     # 虚拟的信息,存放系统实时状态信息
    
    /run     # 程序运行产生的pid文件存放点
    
    /srv     # 物理设备的信息
    
    /sys     # 物理设备
    
    /tmp     # 文件的临时的存放点
    
    /usr     # 安装软件目录
        /usr/local        
    
    /var     # 可变的目录
        /var/run          # pid文件
        /var/log          # 日志
        /var/log/messages # 系统日志
        /var/log/secure   # 用户登录日志

    2、路径的定位

    linux中一个点和两个点是什么意思?
        .       # 表示的是当前目录
        ..      # 当前目录的上一级目录
    
    什么是绝对路径,什么是相对路径?
        以根为开头的路径就是绝对路径,以~开头也是绝对路径
        不是以根开头的路径就是相对路径
        [root@qls ~]# cd  /etc/sysconfig/                   # 绝对路径
        [root@qls /etc/sysconfig]# cd  network-scripts/     # 相对路径

    七、文件管理的基础命令

     1、cd:切换目录

    cd  /   # 切换到根目录
    cd  .   # 保持当前目录
    cd  ..  # 切换到当前目录的上一级目录
    cd  ~   # 切换到当前用户的家目录下
    cd      # 默认切换到当前用户的家目录下
    cd  -   # 切换到上一次所在的目录

    2、tree:以树状形显示目录结构 

    需要安装:yum install -y tree

    选项:
        -a    # 显示隐藏文件
        -d    # 只显示目录
        -f    # 只显示文件
        -F    # 给目录加个标识符:/
        -L    # 查看目录的深度,层级,后面跟的是正整数 tree -L 1 /

    3、ls:显示目录列表

    选项:
        ls -1        # 显示列表
        ls -a        # 显示所有文件,包括隐藏文件
        ls -l        # 以长格式显示目录列表,带属性信息
        ls -d        # 只显示目录本身信息
        ls -i        # 显示inode号
        ls -F        # 给显示出来的目录加个标识符
        
        ll -h        # 以人类可读的形式文件大小
        ll -S        # 根据文件大小排序
        ll -t        # 根据时间进行排序
        ll -r        # 倒序排序

    4、mkdir:创建目录

    选项:
        -p        # 递归创建
        -v        # 显示创建过程
        -m        # 创建给目录设置其他权限
        {}        # 生成序列,创建多个目录
    mkdir  oldboy{a..z}
    mkdir  oldboy{1..10}
    mkdir  old{frank,tank,egon}

    5、touch:创建文件

    touch test.txt
    touch test{01..10}.txt
    1.在一个路径下,不能出现同名的文件,会改变原文件的时间戳
    2.使用{},创建多个文件,区分大小写。

    6、cp: 复制

    选项
        -r        # 递归复制
        -p        # 保持属性
        -d        # 保持软连接
        -t        # 把原目标和目标位置进行替换
        -a        等于 -p,-d,-r
        -i        # 交互式询问,系统自带别名

    7、mv:移动

    选项
        -f        # 强制覆盖
        -t        # 把原目标和目标位置进行替换
        -i        # 交互式询问,系统自带别名

    8、rm:删除

    选项
        -f         # 强制删除
        -r         # 递归删除
        -i         # 交互式询问,系统自带别名
        -rf ./*    # 删除当前目录下的所有内容
    
    别名
    [root@qls ~]# alias rm='echo rm command bny'   # 起别民了之后再删除就提示不能删除,取消起别名:unalias rm
    [root@qls ~]# rm -rf /opt/
    rm command bny -rf /opt/

    八、查看文件命令

     1、echo:所见即所得

    选项
      [root@zgs ~]# echo hello world
      hello world
      [root@zgs ~]# echo 'hello world'
      hello world
      [root@zgs ~]# echo "hello world"
      hello world
      [root@zgs ~]# echo -e 'hello
    world'
      hello
      world
      [root@zgs ~]# echo -e "hello	world"
      hello    world
    
    
        [root@qls ~]# echo $PS1
        [u@h W]$
        [root@qls ~]# echo '$PS1'
        $PS1
        [root@qls ~]# echo "$PS1"
        [u@h W]$ 
    
        单引号    # 强引用,所见即所得
        双引号    # 所见即所得,支持变量,会解析变量
        不加引号  # 所见即所得,出现空格不会看做是个整体,会解析变量,支    持通配符
        反引号     # 先执行反引号里面的命令,把结果交给外面的命令。和$()作用一样

    echo命令可以创建文件,也可以写入内容到文件中

    2、cat:查看文件内容

    选项
        -n        # 给显示内容加上行号
        -A        # 给每行的结尾加上标识符

    使用cat创建一个新文件,可以写入内容:

    3、more:分页显示文件内容,文件结束时,会自动退出文件

    选项    
        -n(数字)    # 指定一页显示多少行
        +n(数字)    # 指定从第几行开始显示
        
    内部命令
        空格或f      # 向下翻页
        b           # 向上翻页
        回车         # 下一行
        /           # 搜索
        =           # 显示当前光标所在行
        q           # 退出

    4、less:分页显示文件内容,文件结束时,不会自动退出

    选项
        -N        #显示的时候加上行号
        
    内部命令
        空格或f    # 向下翻页
        b         # 向上翻页
        回车      # 下一行
        /        # 搜索,会高亮显示,n向下查找,N向上查找
        =        # 显示当前光标所在页,第几行到第几行,会显示字节大小
        q        # 退出   

    5、head:显示文件头部信息,默认显示前十行内容

    选项
        -数字           # 指定显示文件头部几行信息
        -c             # 显示头部几个字符

    6、tail:显示文件尾部信息,默认显示十行内容

    选项
        -n      # 取消默认输出,指定显示几行 简写 -数字
        -c      # 显示尾部几个字符,最后一个是换行符
        -f      # 实时查看文件的更新
        -F      # 实时查看文件的更新,文件不存在时,不会退出,会一直尝试读取该文件
        
    tailf       # 实时查看文件的更新,在磁盘不更新时,不会读取磁盘,减少磁盘的读写。

     7、grep :文本处理工具,过滤,加上颜色

    选项
        -i        # 忽略大小写
        -v        # 排除
        -n        # 给过滤出来的内容加上所在文件中的行号
        -c        # 统计过滤出来的内容总共几行
        -w        # 精确匹配,只过滤要过滤出来的字符,而不是包含该字符串的字符
        -o        # 只显示过滤出来的内容
        -E        # 支持使用扩展正则
        -A        # 匹配过滤的内容,在向下匹配n行
        -B        # 匹配过滤的内容,在向上匹配n行
        -C        # 匹配过滤的内容,在向上和向下各匹配n行
        
    正则
        ^         # 以什么开头
        $         # 以什么结尾
        ^$        # 空行
        .         # 匹配任意一个字符
        *         # 前面一个字符出现0次或者0次以上
        .*        # 所有
        []        # 整体,包含[]里面的字符
        |         # 或者

    九、文件查找命令

    1、locate :根据本地数据库进行查找

    需要下载软件包:yum install  mlocate  -y 

    需要更新数据库:updatedb

    yum install  mlocate  -y        # 下载软件包
    updatedb                  # 需要更新数据库
    
    [root@qls ~]# locate  -r  hostname$            # 支持正则,需加-r选项
    /etc/hostname
    /etc/selinux/targeted/active/modules/100/hostname
    /usr/bin/hostname
    /usr/bin/nmtui-hostname
    /usr/lib64/gettext/hostname

    2、which :查找命令的绝对路径

    [root@qls ~]# which   hostname
    /usr/bin/hostname

    3、whereis :查找文件

    [root@qls ~]# whereis   hostname
    hostname: /usr/bin/hostname /etc/hostname /usr/share/man/man1/hostname.1.gz /usr/share/man/man5/hostname.5.gz

    4、type :查看命令类型

    -a   # 查看内置命令的绝对路径
    
    [root@qls ~]# type  hostname
    hostname is /usr/bin/hostname
    [root@qls
    ~]# type cd cd is a shell builtin
    [root@qls
    ~]# type -a cd cd is a shell builtin cd is /usr/bin/cd

    5、find :查找文件

    [root@qls ~]# find  /  -type  f  -name "hostname"
    /proc/sys/kernel/hostname
    /etc/hostname
    /usr/bin/hostname
    /usr/lib64/gettext/hostname

    十、文件的上传与下载

    1、联网下载命令:

    ①curl :通过url的方式进行文件传输

    选项:
        -o        # 指定下载路径

    curl -o nginx.tar.gz http://nginx.org/download/nginx-1.14.2.tar.gz

    rm -rf /etc/yum.repos.d/*

    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

     

    ②wget

    下载软件包 :yum  install -y  wget

    选项:
        -O        # 指定下载路径

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

    2、本地上传与下载命令

    需要下载软件包:yum install -y  lrzsz

    rz           # 上传,支持上传4G以下的。
    rz -y # 上传覆盖原文件
    rz -E # 出现名称相同进行重命名,名称规则整数(0-255) sz 文件名 # 下载
    sz -y 文件名 # 下载覆盖源文件
    [root@qls ~]# sz services

     注意:

    上传与下载只能是文件,不能是目录,如果是目录需要打包在上传或者下载(zip格式)。

    上传的文件可以在电脑端额任意文件,下载的文件会下载到SecureCRT配置的对应下载路径目录中。

    执行rz命令上传文件出现的窗口界面中,一定不要勾选最下方的'以ASCII方式上传文件'。

    十一、字符处理命令

    1、sort :排序

    创建环境:

    cat >> file.txt <<EOF
    b:3
    c:2
    a:4
    e:5
    d:1
    f:11
    EOF
    选项:
        -t        #指定分隔符,默认以空白字符为分隔符
        -k        #指定列数,默认是第一列
        -n        #以数字的大小方式进行排序
        -r        #倒序
    
    [root@zgs ~]# sort -t ':' -nk2 file.txt
    d:1
    c:2
    b:3
    a:4
    e:5
    f:11
    
    [root@qls ~]# sort  -t ':'  -rnk3  file.txt
    f:11
    e:5
    a:4
    b:3
    c:2
    d:1

    2、uniq :去重,统计,只能去重重复相邻的行

    选项:
        -c        # 统计次数

    3、cut :取列,默认是以tab键为分隔符

    选项:
        -d        # 指定分隔符
        -f        # 指定取出的列
        -c        # 取指定的字符

    [root@qls ~]# echo 'oldboyfgkhkjg' |cut -c 1-2
    ol
    [root@qls ~]# echo 'oldboyfgkhkjg' |cut -c 3-6
    dboy

     

    4、wc:统计

    选项:
        -l        # 统计文件的行数
        -c        # 统计文件的字节数
        -w        # 统计文件的列数

    5、tr :替换

    选项
        -d        # 删除字符

    tr ‘a’  'b' < file.txt

    十二、sed和awk

    1、sed:擅长替换,增删改查

    选项
        -i        # 替换
        -n        # 取消默认输出
        -r        # 支持扩展正则
        -i.bak    # 先备份在替换
        p         # 打印
        d         # 删除
        s         # 替换
        g         # 全局
        a         # 追加
        i         # 插入
        $         # 结尾
    [root@qls ~]# sed  -n  '/root/p'  passwd           # 过滤字符
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    
    [root@qls ~]# sed  -rn  '/root|halt/p'  passwd     # 过滤多个字符串
    root:x:0:0:root:/root:/bin/bash
    halt:x:7:0:halt:/sbin:/sbin/halt
    operator:x:11:0:operator:/root:/sbin/nologin
    删
    [root@qls ~]# sed  '5d'  test.txt
    egon
    tank
    egon
    tank
    frank
    [root@qls ~]# sed  '3,5d'  test.txt
    egon
    tank
    frank
    [root@qls ~]# sed  '3d;5d'  test.txt
    egon
    tank
    tank
    frank
    改
    [root@qls ~]# sed  's#oldboy#oldgirl#g'  test.txt 
    egon
    tank
    egon
    tank
    oldgirl
    frank
    [root@qls ~]# sed -i  's#oldboy#oldgirl#g'  test.txt 
    [root@qls ~]# cat test.txt
    egon
    tank
    egon
    tank
    oldgirl
    frank
    增
    [root@qls ~]# cat test.txt
    jason
    tank
    jason
    tank
    oldgirl
    frank
    jason
    [root@qls ~]# sed  '2aegon'  test.txt   # 追加
    jason
    tank
    egon
    jason
    tank
    oldgirl
    frank
    jason
    [root@qls ~]# sed   '3iegon'  test.txt   # 插入
    jason
    tank
    egon
    jason
    tank
    oldgirl
    frank
    jason
    [root@qls ~]# sed  '$aegon'  test.txt   # $a在最后一行
    jason
    tank
    jason
    tank
    oldgirl
    frank
    jason
    egon
    [root@qls ~]# sed '1iegon'  test.txt
    egon
    jason
    tank
    jason
    tank
    oldgirl
    frank
    jason
    [root@zgs ~]# 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:f7:4e:8f 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::450:ebcb:3074:7d5/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    
    
    后向引用
    [root@qls ~]# ip a s eth0 |sed  -n '3p'  |sed  -r 's#.*t (.*)/.*#1#g'
    10.0.0.100

    [root@qls ~]# ip a s eth0 |sed -n '3p' |sed -r 's#(.*t )(.*)(/.*)#1#g' inet
    [root@qls
    ~]# ip a s eth0 |sed -n '3p' |sed -r 's#(.*t )(.*)(/.*)#2#g' 10.0.0.100

    [root@qls ~]# ip a s eth0 |sed -n '3p' |sed -r 's#(.*t )(.*)(/.*)#3#g' /24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@qls
    ~]# ip a s eth0 |sed -rn '3s#(.*t )(.*)(/.*)#2#gp' 10.0.0.100

    2、awk

    选项
        -F        # 指定分隔符,默认以空白字符
        NR        # 行号
        $n        # 取某列
        $NF       # 最后一列
        $0        # 表示整行内容# 非,取反
    取行
    [root@zgs ~]# awk 'NR==1' passwd # 第一行 root:x:0:0:root:/root:/bin/bash [root@zgs ~]# 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@zgs ~]# awk 'NR==1;NR==3' passwd # 第一行和第三行 root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@zgs ~]# awk 'NR>=1' passwd # 大于等于第一行 [root@zgs ~]# awk 'NR>=1 && NR<=3' passwd # 大于等于1小于等于三 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@zgs ~]# awk 'NR<3 || NR>3' passwd # 除了第三行
    取列
    [root@qls ~]# awk  -F '[:]'  '{print $7}'  passwd
    [root@qls ~]# awk  -F '[:]'  '{print $NF}'  passwd 
    过滤
    [root@qls ~]# awk  '/root/'  passwd 
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    
    [root@qls ~]# awk  '/root|halt/'  passwd 
    root:x:0:0:root:/root:/bin/bash
    halt:x:7:0:halt:/sbin:/sbin/halt
    operator:x:11:0:operator:/root:/sbin/nologin
    
    [root@qls ~]# awk  '!//sbin/nologin/'  passwd 
    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
    显示行号
    [root@qls ~]# awk  '{print NR,$0}' passwd

    十三、文件属性

    -rw-r--r--. 1 root root     25 Aug 16 10:01 file.txt
    
        -rw-r--r--.     # 类型和权限     -    文件类型
        1               # 表示硬链接的数量
        root            # 属主
        root            # 属组
        25              # 文件的大小
        Aug 16 10:01    # 最后修改的修改时间
        file.txt        # 文件名
    文件类型
        -        # 普通文件
        d        # 目录
        l         #软连接文件
        b        # 块设备
        c        # 字符设备
        s        # 套接字文件
        p        # 管道文件
    
    [root@qls ~]# find / -type p -ls   # 查看管道文件
    [root@qls ~]# find / -type s -ls   # 查看套接字文件
    [root@qls ~]# file            # 查看文件的类型
    扩展名
        txt
        log
        sh
        py
        html
        php
        conf
        xml
        zip
        tar.gz
        cfg

    十四、链接文件

    用户数据:数据块,数据的真事儿存放位置,block
    元数据:文件属性信息,inode。
    
    软链接和硬链接 
    
    [root@qls ~]# rm -f  nginx  &&  ln -s  nginx-1.17  nginx    # 版本升级
    [root@qls ~]# rm -f  nginx  &&  ln -s  nginx-1.16  nginx    # 版本回退
    
    软连接和源文件属于不同的类型的文件
    
    软连接文件中存放是源文件的路径
    
    软连接可以跨区创建,可以文件目录都可以创建
    
    删除源文件,软连接文件存在,会失效
    
    企业版本升级
    代码上线
    目录找不到
    
    ln命令默认创建硬链接文件
    硬链接文件跟源文件iNode号是相同的
    只能对文件创建硬链接,不能对目录创建
    
    软链接和硬链接的区别?
    
    从概念上面回答
        软链接相当于windows上面的快捷方式
        硬链接就是给源文件加个入口
    从创建
        ln命令默认创建的是硬链接,只能对文件创建
        ln命令加上选项-s创建软链接,可以跨区创建
    从删除方面
        删除软链接文件,对源文件和硬链接文件没有影响
        删除硬链接文件,对源文件和软链接没有影响
        删除源文件,硬链接没有影响,软链接失效,红底白字闪烁状
        只有删除源文件和硬链接文件,文件才会被真正的删除

    十五、命令执行过程(扩展)

    hash表
    
    hash                # 查看命令缓存
    hash    -d   name   # 删除指定命令缓存
    hash    -r          # 清空命令缓存表
    
    
    1) 检查执行的命令是否使用的是绝对路径执行的。
    2) 检查ping命令是否存在alias别名
    3) 检查ping命令是内部命令还是外部命令
    4) 如果是内部命令Bash直接执行,如果是外部命令,首先检查Hash缓存,存在则直接调取
    5) 如果该命令不存在Hash缓存,则通过PATH路径进行逐行查找该命令所在的位置
    6) 如果PATH路径没有查找到该命令所在的路径,则返回错误码。command not found

    vim文件编辑器:命令模式(普通模式),编辑模式,末行模式(底行模式)

     安装软件包:yum install -y vim

    十六、命令模式

    光标移动,删除,复制,粘贴
    
    l        # 当前光标向右移动一个字符,nl,移动多个
    h        # 当前光标向左移动一个字符,nh,移动多个
    j        # 当前光标向下移动一个字符,nj,移动多个
    k        # 当前光标向上移动一个字符,nk,移动多个
    ^        # 当前光标移动当前行行首
    $        # 当前光标移动当前行行尾
    G        # 移动文件的行尾
    gg       # 移动到文件的行首  1G
    ngg      # n=数字,跳转到某行  nG
    dd       # 删除当前光标所在行
    ndd      # n=数字,删除当前光标所在行向下多少行,包含当前行
    dG       # 删除当前光标向下的所有内容
    p        # 在当前行的下一行粘贴,粘贴多次,np
    P        # 在当前行的上一行粘贴,粘贴多次,np
    yy       # 复制当前行
    nyy      # 复制在当前行向下多少行,包含当前行
    r        # 单个替换当前光标所在位置进行替换
    R        # 多个替换
    u        # 撤销
    ctrl键+r # 回滚,回滚撤销
    de/dw    # 删除当期光标向后的一组字符串
    D        # 删除当前所在行光标向后的所有内容
    x/delete # 当前光标所在位置从前向后删除一个
    X        # 当前光标所在位置从后向前删除一个
    
    文件过多
    Ctrl键+f        # 向下翻页
    ctrl键+b        # 向上翻页

    十七、编辑模式

    i        # 在当前光标所在字符前插入字符,
    I        # 在当前光标所在行行首进行插入字符
    a        # 在当前光标所在字符后插入字符
    A        # 在当前光标所在行行尾进行插入字符
    o        # 在当前向下另起一行进行编辑
    O        # 在当前向上另起一行进行编辑
    C        # 删除当前光标所在位置向后的当前行内容,并进入编辑模式
    ce/cw    # 删除当前光标所在行的位置一组字符串,并进入编辑模式
    s        # 删除当前所在字符,并进入编辑模式
    S        # 删除当前所在行,并进入编辑模式
    
    退出编辑模式,按esc键

     

    十八、末行模式

    :w        # 保存
    :q        # 退出
    :wq       # 保存退出
    :x        # 保存退出
    ZZ        # 保存退出
    /         # 搜索
    n         # 向下查找
    N         # 向上查找
    :n        # 数字,跳转到某行
    :nd       # 删除某行
    :n,md     # 删除从n行删除到m行,n<m
    
    :w  /root/test.txt     # 把当前文件的内容保存一个新的文件中
    :r     /root/test.txt  # 从某个文件读入内容进入该文件
    :10r    /root/test.txt # 从某个文件读入内容进入该文件放在第10行后面
    
    替换
    :%s#old#new#g       # 全局替换
    :1,4s#old#new#g     # 进行某行替换

    十九、视图模式

    批量添加
            光标移动到要添加内容的第一行或最后一行
            ctrl键+v       进入可视快模式
            使用光标选中要添加的位置
            shift键+i    进入编辑模式
            输入要添加的内容,只输入一行
            按esc键退出
            见证奇迹的时刻
            
    批量删除
            光标移动到要删除内容的上面,第一行或最后一行
            ctrl键+v        进入可视快模式
            选中要删除的内容
            按d/x    删除
       
    批量删除行(移动,剪切)
            光标移动到要删除行的上面,第一行或最后一行
            shift键+v    进入可视行模式
            选中要删除的行
            d  删除
            
    批量复制行
            光标移动到要复制行的上面,第一行或最后一行
            shift键+v    进入可视行模式
            选中要复制的行,
            按yy
            按p粘贴

    二十、vim

    1、vim工作方式

    vim打开一个文件,进入的是命令模式
    在编辑文件的时候,系统会生成一个临时文件
    在退出文件之后,系统会自动删除临时文件

    2、vim故障

    在编辑文件时,非正常退出,
    
    再次进入时,会提示警告,
    E325: ATTENTION
    Found a swap file by the name ".services.swp"
              owned by: root   dated: Fri Aug 16 17:46:45 2019
             file name: ~root/services
              modified: YES
             user name: root   host name: qls
            process ID: 33989
    While opening file "services"
                 dated: Fri Aug 16 09:57:51 2019
    
    (1) Another program may be editing the same file.  If this is the case,
        be careful not to end up with two different instances of the same
        file when making changes.  Quit, or continue with caution.
    (2) An edit session for this file crashed.
        If this is the case, use ":recover" or "vim -r services"
        to recover the changes (see ":help recovery").
        If you did this already, delete the swap file ".services.swp"
        to avoid this message.
    
    Swap file ".services.swp" already exists!
    
    解决:
    vim  -r        filename
    
    保存退出
    
    删除临时文件
    
    rm -r  .services.swp

    3、vim变量

    :set nu         # 显示行号
    :set list       # 给每行的结尾加个制表符
    :set  ic        # 搜索时忽略大小写
    :noh            # 取消高亮
    
    vim配置文件(个人)
    [root@qls ~]# cat  .vimrc 
    set nu
    
    全局
    /etc/vimrc

    4、文件比对

    diff           # 不推荐使用
    vimdiff        # 推荐使用
    
    [root@qls ~]# vimdiff  file.txt  file2.txt

    5、vim打开多个文件

    水平分割
    [root@qls ~]# vim -o  file.txt  file2.txt
    
    垂直分割
    [root@qls ~]#  vim -O  file.txt  file2.txt
    
    切换文件时,使用Ctrl键+ww

    二十一、用户

    1、用户管理

    [root@qls ~]# head  -1  /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    
    以:为分隔符
    
    root         # 用户名
    
    x            # 密码占位符
    
    0            #用户id
    
    0            # 用户组id/GID
    
    root         # 用户注释信息
    
    /root        # 家目录
    
    /bin/bash    # 用户登录的shell
    
    [root@qls ~]# head  -1  /etc/shadow
    root:$6$PZUVzAeQdrf8bOt5$6fhIZlLOf6EoweOMBbv7JMKaA6hCwfBUAHfNbvXI6eXl2ePXJZmmciXQk3yfcUesYRRjvD.Tk6VXcDl0wkV6d.::0:99999:7:::
    跟用户相关的命令
    useradd
        选项
            -u        # 设置uid
            -g        # 指定GID,组名称,前提组要存在
            -c        # 设置注释信息
            -s        # 指定登录shell
            -M        # 不创建家目录
            -G        # 指定附加组
            -r        # 创建系统用户,不创建家目录
            -d        # 指定家目录
            
    usermod
        选项
            -u        # 修改uid
            -g        # 修改组信息
            -c        # 修改注释信息
            -s        # 修改登录shell
            -l        # 修改用户名称
            -G        # 添加附加组
            -a        # 追加附加组
    
    userdel           # 删除用户,默认不删除家目录和邮件信息
        -r            # 删除家目录和邮件信息

    2、密码管理

    passwd            # 设置密码
    
    passwd            # 针对当前用户设置密码
    passwd  username  # 针对用户设置密码
    
    root用户可以给任意用户设置密码,密码没有要求
    普通用户只能针对自己设置密码,密码必须最低是8位,且结构不能太简单
    
    非交互设置密码
    [root@qls ~]# echo  '1'  |passwd   --stdin    root
    
    随机密码
    方式一: [root@qls
    ~]# echo $(echo $RANDOM|md5sum |cut -c 1-10)|tee pass.txt |passwd --stdin root 方式二: [root@qls ~]# yum install -y expect [root@qls ~]# mkpasswd -l 24 -d 6 -c 6 -C 6 -s 6 #D4U;jT1D3k%hr@0ty4KP&4~

    3、用户组

    基本组,一个用户只能有一个基本组
    附加组,用户有多个附加组
    
    用户组相关配置文件
    
    [root@qls ~]# ll /etc/group
    -rw-r--r--. 1 root root 670 Aug 17 11:29 /etc/group
    [root@qls ~]# ll /etc/gshadow
    ----------. 1 root root 524 Aug 17 11:29 /etc/gshadow
    
    [root@qls ~]# cat /etc/group
    root:x:0:
    
    root     # 用户组名称
    x        # 密码占位符
    0        # GID
    4列      # 显示该用户属于哪个用户附加组,就显示这个用户名称,
    
    [root@qls ~]# cat  /etc/gshadow
    root:::
    组相关命令
    groupadd
        选项
            -g        #指定gid号
            
    [root@qls ~]# groupadd   test-1
    [root@qls ~]# groupadd   test-2
    [root@qls ~]# useradd   -u 888  -g test-1 -G test-2  user-1
    [root@qls ~]# id  user-1
    uid=888(user-1) gid=1005(test-1) groups=1005(test-1),1006(test-2)
    [root@qls ~]# groupadd   test-3
    [root@qls ~]# usermod   -aG  test-3  user-1
    [root@qls ~]# id  user-1
    uid=888(user-1) gid=1005(test-1) groups=1005(test-1),1006(test-2),1007(test-3)
    [root@qls ~]# groupadd   test-4
    [root@qls ~]# usermod  -G  test-4  user-1
    [root@qls ~]# id  user-1
    uid=888(user-1) gid=1005(test-1) groups=1005(test-1),1008(test-4)
    
    groupmod
        选项
            -g        # 修改gid
            -n        # 修改组名称
            
    groupdel 
        用户组不属于任何用户的基本组,可以删除,否则,不能删除
        解决删除用户组属于用户的基本组
            1.修改该用户的基本组
            2.删除用户组下面的用户。
            

    4、查看用户的信息

    id        # 查看用户信息
    
    [root@qls ~]# echo  $USER
    root
    [root@qls ~]# echo $UID
    0
    
    w        # 查看系统所有登录的用户
    who      # 查看系统登录用户
    whoami   # 查看当前登录用户

    5、用户授权

    su  # 切换用户
    
    su 和 su  -  有什么区别
    不加-是到root用户家目录下,加上-是到普通用户家目录下
    个人配置
    -rw-r--r--. 1 root root 193 Aug 17 10:36 .bash_profile -rw-r--r--. 1 root root 231 Aug 17 10:36 .bashrc 全局 [root@qls ~]# ll /etc/profile -rw-r--r--. 1 root root 1819 Oct 31 2018 /etc/profile [root@qls ~]# ll /etc/profile.d/* [root@qls ~]# ll /etc/bashrc -rw-r--r--. 1 root root 2884 Aug 15 16:11 /etc/bashrc profile # 系统环境变量,别名 bashrc # 本地变量和别名 个人和全局变量有冲突,个人优先全局 交互式shell 非交互式shell 登录式shell 非登录式shell sudo visudo # 授权 100 root ALL=(ALL) ALL 101 user01 ALL=(ALL) /bin/cat,/bin/yum 用户名 主机名=(角色) 权限 user01 ALL=(ALL) NOPASSWD:/bin/cat,/bin/yum 不需要输入密码

    二十二、find查找

    1、根据名称查找

        -name    # 根据名称
        -iname   # 忽略大小写
        *        # 所有,模糊查找
    
    命令   路径     选项      表达式     动作
    find   /etc   -name  'ifcfg-eth0'   -print
    [root@qls ~]# find   /etc   -name  'ifcfg-eth0'   -print        # 精确查找
    /etc/sysconfig/network-scripts/ifcfg-eth0
    [root@qls ~]# find   /etc   -name  'ifcfg-eth0'   
    /etc/sysconfig/network-scripts/ifcfg-eth0
    
    [root@qls ~]# find   /etc   -name  'ifcfg-eth*'    # 模糊查找
    /etc/sysconfig/network-scripts/ifcfg-eth0
    /etc/sysconfig/network-scripts/ifcfg-eth1
    
    [root@qls ~]# find  /etc/   -name  '*eth*'    # 模糊查找
    /etc/sysconfig/network-scripts/ifdown-eth
    /etc/sysconfig/network-scripts/ifup-eth
    /etc/sysconfig/network-scripts/ifcfg-eth0
    /etc/sysconfig/network-scripts/ifcfg-eth1
    /etc/ethertypes

    2、根据文件类型查找

      -type  
            f    # 普通文件
            d    # 目录
            l    # 软连接
            b    # 块设备
            c    # 字符设备
            p    # 管道文件
            s    # socket文件,套接字

    [root@qls ~]# find  /opt    -type  f    -ls     # 普通文件
    
    [root@qls ~]# find  /opt    -type  d    -ls     # 目录
      
    [root@qls ~]# find  /etc  -type  l   -ls        # 软连接
    
    [root@qls ~]# find  /dev   -type   b   -ls      # 块设备
    
    [root@qls ~]# find  /dev   -type  c  -ls        # 字符设备
    
    [root@qls ~]# find  /   -type  p  -ls         # 管道文件
    
    [root@qls ~]# find  /   -type  s  -ls           # socket文件

    3、根据文件大小查找

        -size     # 根据大小查找
            b     # 字节
            k     # kb
            M、G   # 使用大写
        -a        # 并且,默认就是
        -o        # 或者
    [root@qls ~]# find  /var/log  -type f   -size  -50k   |xargs    ls -lh
    -rw-------. 1 root root  28K Aug 14 15:17 /var/log/anaconda/anaconda.log
    -rw-------. 1 root root  12K Aug 14 15:17 /var/log/anaconda/ifcfg.log
    -rw-------. 1 root root    0 Aug 14 15:17 /var/log/anaconda/ks-script-fY94py.log
    [root@qls ~]# find  /var/log  -type f   -size  +50k   |xargs    ls -lh
    -rw-------. 1 root root 1.7M Aug 14 15:17 /var/log/anaconda/journal.log
    -rw-------. 1 root root 202K Aug 14 15:17 /var/log/anaconda/packaging.log
    -rw-------. 1 root root 122K Aug 14 15:17 /var/log/anaconda/storage.log
    [root@qls ~]# find  /var/log  -type f   -size  299k   |xargs    ls -lh
    -rw-------. 1 root root 299K Aug 19 15:01 /var/log/messages
    
    
    [root@qls ~]# find  /var/log -type  f  -size  -1k  -o  -size  +1M  |xargs  ls -lh
    -rw-------. 1 root root 1.7M Aug 14 15:17 /var/log/anaconda/journal.log
    -rw-------. 1 root root    0 Aug 14 15:17 /var/log/anaconda/ks-script-fY94py.log
    -rw-------. 1 root root    0 Aug 16 09:10 /var/log/boot.log
    -rw-r--r--. 1 root root    0 Aug 14 15:28 /var/log/firewalld
    -rw-------. 1 root root    0 Aug 14 15:12 /var/log/spooler
    -rw-------. 1 root root    0 Aug 14 15:10 /var/log/tallylog
    [root@qls ~]# find  /var/log -type  f  -size  +100k  -size  -200k  |xargs  ls -lh
    -rw-------. 1 root root 122K Aug 14 15:17 /var/log/anaconda/storage.log
    -rw-r--r--. 1 root root 122K Aug 16 08:35 /var/log/dmesg
    -rw-r--r--. 1 root root 122K Aug 14 15:27 /var/log/dmesg.old
    [root@qls ~]# find  /var/log -type  f  -size  +100k  -a  -size  -200k  |xargs  ls -lh
    -rw-------. 1 root root 122K Aug 14 15:17 /var/log/anaconda/storage.log
    -rw-r--r--. 1 root root 122K Aug 16 08:35 /var/log/dmesg
    -rw-r--r--. 1 root root 122K Aug 14 15:27 /var/log/dmesg.old

    4、根据用户或者组查找

        -user          # 根据用户
        -group         # 根据用户组
        -nouser        # 没有属主
        -nogroup       # 没有属组
    [root@qls ~]# find  /opt/   -user  jason  -ls
    101765330    0 -rw-rw-r--   1 jason    setgid          0 Aug 19 10:46 /opt/jason.txt
    101765332    0 -rw-rw-r--   1 jason    jason           0 Aug 19 10:48 /opt/jason
    101765333    0 -rw-rw-r--   1 jason    setgid          0 Aug 19 10:49 /opt/jason-1
    [root@qls ~]# find  /opt  -group  jason -ls
    101765332    0 -rw-rw-r--   1 jason    jason           0 Aug 19 10:48 /opt/jason
    [root@qls ~]# find  /opt  -user jason -group  jason -ls
    101765332    0 -rw-rw-r--   1 jason    jason           0 Aug 19 10:48 /opt/jason
    [root@qls ~]# find  /opt ( -user jason -o  -group  jason ) -ls
    101765330    0 -rw-rw-r--   1 jason    setgid          0 Aug 19 10:46 /opt/jason.txt
    101765332    0 -rw-rw-r--   1 jason    jason           0 Aug 19 10:48 /opt/jason
    101765333    0 -rw-rw-r--   1 jason    setgid          0 Aug 19 10:49 /opt/jason-1
    
    [root@qls ~]# find  /opt/  -nouser  -ls
    101765331    0 -rw-rw-r--   1 1007     setgid          0 Aug 19 10:46 /opt/test-1
    101765334    0 -rw-rw-r--   1 1007     setgid          0 Aug 19 10:50 /opt/test-2
    [root@qls ~]# find /opt/  -nogroup  -ls 
    101765332    0 -rw-rw-r--   1 1006     1006            0 Aug 19 10:48 /opt/jason

    5、根据目录的阶级,深度查找

        -maxdepth     # 根据目录深度查找
    [root@qls ~]# find  /  -maxdepth  4   -name 'ifcfg-eth0'

    6、根据权限查找

    [root@qls ~]# find  /opt/   -perm  -444  -ls       # 包含读权限,全局,每一项都包含
    101765326    0 drwxrwsrwx   2 root     setgid        123 Aug 19 15:28 /opt/
    101765329    0 -rw-r--r--   1 root     setgid          0 Aug 19 10:45 /opt/root.txt
    101765330    0 -rw-rw-r--   1 1006     setgid          0 Aug 19 10:46 /opt/jason.txt
    [root@qls ~]# find  /opt/   -perm  644  -ls        # 精确匹配
    101765329    0 -rw-r--r--   1 root     setgid          0 Aug 19 10:45 /opt/root.txt
    101765336    4 -rw-r--r--   1 root     setgid          5 Aug 19 11:38 /opt/test.log
    [root@qls ~]# chmod  o-r  /opt/test.log
    [root@qls ~]# chmod  g-r  /opt/root.txt
    [root@qls ~]# ll /opt/
    total 4
    -rwxrwxrwx. 1 1006   1006 0 Aug 19 10:48 jason
    -rw-rw-r--. 1 1006 setgid 0 Aug 19 10:49 jason-1
    -rw-rw-r--. 1 1006 setgid 0 Aug 19 10:46 jason.txt
    -rw----r--. 1 root setgid 0 Aug 19 10:45 root.txt
    -rw-rw-r--. 1 1007 setgid 0 Aug 19 10:46 test-1
    -rw-rw-r--. 1 1007 setgid 0 Aug 19 10:50 test-2
    -rw-r-----. 1 root setgid 5 Aug 19 11:38 test.log
    -rw-rw-r--. 1 user setgid 0 Aug 19 10:51 user
    [root@qls ~]# find  /opt/  -perm  -444  -ls
    101765326    0 drwxrwsrwx   2 root     setgid        123 Aug 19 15:28 /opt/
    101765330    0 -rw-rw-r--   1 1006     setgid          0 Aug 19 10:46 /opt/jason.txt
    101765331    0 -rw-rw-r--   1 1007     setgid          0 Aug 19 10:46 /opt/test-1
    101765332    0 -rwxrwxrwx   1 1006     1006            0 Aug 19 10:48 /opt/jason
    101765333    0 -rw-rw-r--   1 1006     setgid          0 Aug 19 10:49 /opt/jason-1
    101765334    0 -rw-rw-r--   1 1007     setgid          0 Aug 19 10:50 /opt/test-2
    101765328    0 -rw-rw-r--   1 user     setgid          0 Aug 19 10:51 /opt/user
    [root@qls ~]# find  /opt/  -perm  /444  -ls        # 包含,只要有一项满足,条件就成立
    101765326    0 drwxrwsrwx   2 root     setgid        123 Aug 19 15:28 /opt/
    101765329    0 -rw----r--   1 root     setgid          0 Aug 19 10:45 /opt/root.txt
    101765330    0 -rw-rw-r--   1 1006     setgid          0 Aug 19 10:46 /opt/jason.txt
    101765331    0 -rw-rw-r--   1 1007     setgid          0 Aug 19 10:46 /opt/test-1
    101765332    0 -rwxrwxrwx   1 1006     1006            0 Aug 19 10:48 /opt/jason
    101765333    0 -rw-rw-r--   1 1006     setgid          0 Aug 19 10:49 /opt/jason-1
    101765334    0 -rw-rw-r--   1 1007     setgid          0 Aug 19 10:50 /opt/test-2
    101765328    0 -rw-rw-r--   1 user     setgid          0 Aug 19 10:51 /opt/user
    101765336    4 -rw-r-----   1 root     setgid          5 Aug 19 11:38 /opt/test.log

    7、根据特殊权限查找

    [root@qls ~]# find  /   -perm   -4000  -ls
    100853298   32 -rwsr-xr-x   1 root     root        32096 Oct 31  2018 /usr/bin/fusermount
    100973706   24 -rws--x--x   1 root     root        24048 Oct 31  2018 /usr/bin/chfn
    100973709   24 -rws--x--x   1 root     root        23960 Oct 31  2018 /usr/bin/chsh
    100973761   32 -rwsr-xr-x   1 root     root        32048 Oct 31  2018 /usr/bin/umount
    
    [root@qls ~]# find  /   -perm   -2000  -ls
    100783613   16 -r-xr-sr-x   1 root     tty         15344 Jun 10  2014 /usr/bin/wall
    100973767   20 -rwxr-sr-x   1 root     tty         19624 Oct 31  2018 /usr/bin/write
    101041329  376 ---x--s--x   1 root     nobody     382240 Apr 11  2018 /usr/bin/ssh-agent
    101725997   40 -rwx--s--x   1 root     slocate     40520 Apr 11  2018 /usr/bin/locate
    
    [root@qls ~]# find  /   -perm   -1000  -ls
        69    0 drwxrwxrwt   4 root     root           43 Aug 19 09:22 /var/tmp
    33554504    0 drwxrwxrwt  12 root     root          257 Aug 19 12:25 /tmp
    33879954    0 drwxrwxrwt   2 root     root            6 Aug 14 15:11 /tmp/.X11-unix
    101002768    0 drwxrwxrwt   2 root     root            6 Aug 14 15:11 /tmp/.XIM-unix
    33879955    0 drwxrwxrwt   2 root     root            6 Aug 14 15:11 /tmp/.ICE-unix
    67502497    0 drwxrwxrwt   2 root     root            6 Aug 14 15:11 /tmp/.font-unix

    8、根据时间进行查找

        -mtime        # 根据修改时间查找
            +7        # 七天以前
            -7        # 七天以内
            7         # 第七天
    [root@qls ~]# find  /opt/  -mtime +7  -ls

    [root@qls ~]# find /opt/ -mtime -7 -ls [root@qls ~]# find /opt/ -mtime +7 |xargs rm -f # 把七天以前的数据删除

    9、find自带动作

    ①print :打印,默认就是该动作

    ②-ls :以长格形式显示文件信息,详细的属性信息

    [root@qls ~]# find  /opt/  -mtime  +7  -ls

    ③-delete :删除查询出来的内容,只能删除文件,或者是空目录

    [root@qls ~]# find  /opt/  -mtime  7 -delete

    ④-ok :后面跟shell命令,会询问是否确定操作

    [root@qls ~]# find  /opt/  -mtime  -7  -ok   rm -f  {} ;

    ⑤-exec :后面跟shell命令

    [root@qls ~]# find  /opt/  -mtime  -7  -exec    rm -f  {} ;

    ⑥find与xargs配合

    [root@qls ~]# find  /var/log/ -type f  -size  +200k  -exec  cp -v  {}  /opt/01/  ;
    
    [root@qls ~]# find  /var/log/ -type f  -size  +200k | xargs  cp  -t  /opt/02
    
    [root@qls ~]# find  /var/log/ -type f  -size  +200k | xargs  -I  {}  cp  {}  /opt/03
    
    [root@qls ~]# cp  `find  /var/log/ -type f  -size  +200k`  /opt/04
    
    [root@qls ~]# cp  $(find  /var/log/ -type f  -size  +200k)  /opt/05

    find训练

    1.查找/tmp目录下,属主不是root,且文件名不以f开头的文件
    [root@qls ~]# find  /tmp/  -not  -user root  !  -name 'f*' -ls
    33970406    4 -rw-r--r--   1 user     root           12 Aug 19  2019 /tmp/test.log
    
    2.查找/var目录下属主为root,且属组为mail的所有文件
    [root@qls ~]# find  /var -type f  -user root -group mail -ls
    33605500    0 drwxrwxr-x   2 root     mail          152 Aug 19  2019 /var/spool/mail
    33978097    4 -rw-------   1 root     mail          616 Aug 17 12:29 /var/spool/mail/root
    
    3.查找/var目录下属主不属于root、lp、adm的所有文件
    [root@qls ~]# find /var/ -type f  -not  ( -user root -o -user lp -o -user adm )  -ls
     32679    4 -rw-r--r--   1 user01   user01       3736 Nov 26  2018 /var/tmp/yum-user01-2oaLuc/x86_64/7/base/repomd.xml
     32680    0 -rw-r--r--   1 user01   user01          0 Aug 17 11:14 /var/tmp/yum-user01-2oaLuc/x86_64/7/base/cachecookie
     32715    4 -rw-r--r--   1 user01   user01        528 Aug 15 16:26 /var/tmp/yum-user01-2oaLuc/x86_64/7/base/mirrorlist.txt
    
    4.查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
    [root@qls ~]# find /var  -type f  -mtime -7  ! ( -user root -o  -user postfix ) -ls
     32680    0 -rw-r--r--   1 user01   user01          0 Aug 17 11:14 /var/tmp/yum-user01-2oaLuc/x86_64/7/base/cachecookie
     32715    4 -rw-r--r--   1 user01   user01        528 Aug 15 16:26 /var/tmp/yum-user01-2oaLuc/x86_64/7/base/mirrorlist.txt
    
    5.查找/etc目录下大于1M且类型为普通文件的所有文件
    [root@qls ~]# find  /etc/ -type f   -size  +1M  |xargs ls -lh
    -rw-------. 1 root root 3.8M Nov  3  2018 /etc/selinux/targeted/active/policy.kern
    -rw-r--r--. 1 root root 1.4M Nov  3  2018 /etc/selinux/targeted/contexts/files/file_contexts.bin
    -rw-r--r--. 1 root root 3.8M Nov  3  2018 /etc/selinux/targeted/policy/policy.31
    -r--r--r--. 1 root root 7.6M Aug 14 15:27 /etc/udev/hwdb.bin
    
    6.将/etc/中的所有目录(仅目录)复制到/tmp下,目录结构不变
    [root@qls ~]# find   /etc  -type d  |xargs  -I {}  mkdir -p  /tmp/{}
    [root@qls ~]# find   /etc  -type d   -exec  mkdir -p /tmp/{}  ;
    
    7.将/etc目录复制到/var/tmp/,/var/tmp/etc的所有目录权限777,/var/tmp/etc目录中所有文件权限666
    [root@qls ~]# cp -a /etc  /var/tmp/
    [root@qls ~]# find  /var/tmp/  -type  d  -exec  chmod 777  {} ;
    [root@qls ~]# find  /var/tmp/ !  -type  d  -exec  chmod 666  {} ;
    
    8.保留/var/log/下最近7天的日志文件,其他全部删除
    find  /var/log  ! -mtime  -7  -delete
    
    9.创建touch file{1..10}10个文件, 保留file9,其他一次全部删除
    [root@qls opt]# find  ./  -type  f  !  -name 'file9'  -delete

    二十三、管道

    管道操作符号 "|" ,主要用来连接左右两个命令, 将左侧的命令的标准输出, 交给右侧命令的标准输入

    PS:无法传递标准错误输出至后者命令

    管道中的tee技术:

    选项
        -a        # 追加

    二十四、打包压缩

    压缩包工具

    .zip        # zip压缩工具    
    .bz2        # bzip2压缩工具,只能压缩文件,会删除源文件,使用少
    .gz         # gzip压缩工具,只能压缩文件,会删除源文件
    tar.gz      # gzip压缩,使用tar打包
    tar.bz2     # 使用bzip2压缩,使用tar打包

    1、zip

    zip    # 打包压缩
        选项:
          -r        # 递归压缩
          -q        # 静默输出
          -T        # 检查压缩包是完整
        
    unzip  # 解压zip格式的压缩包
        选项:
          -d        # 指定解压的目录
          -l        # 查看压缩包的内容
          -t        # 检查压缩包里面的内容是否完整
          -q        # 静默输出
    # 需要下载安装
    [root@qls ~]# yum  install -y  zip  unzip
    

    [root@qls ~]# cp /etc/services ./ # 复制一个文件 [root@qls ~]# ll total 656 -rw-r--r--. 1 root root 670293 Aug 20 08:46 services [root@qls ~]# zip ser.zip services # 压缩文件 adding: services (deflated 80%) [root@qls ~]# ll total 792 -rw-r--r--. 1 root root 670293 Aug 20 08:46 services -rw-r--r--. 1 root root 136227 Aug 20 08:46 ser.zip [root@qls ~]# ll -h # 查看文件大小 total 792K -rw-r--r--. 1 root root 655K Aug 20 08:46 services -rw-r--r--. 1 root root 134K Aug 20 08:46 ser.zip [root@qls ~]# zip -T ser services ser.zip [root@qls ~]# zip -T ser.zip # 检查压缩包是否完整,显示ok表示完整 test of ser.zip OK [root@qls ~]# unzip services # 这样会覆盖源文件,不推荐 [root@qls ~]# ll total 792 -rw-r--r--. 1 root root 670293 Aug 20 08:46 services -rw-r--r--. 1 root root 136227 Aug 20 08:46 ser.zip [root@qls ~]# unzip ser.zip -d /opt/ # 压缩到opt下 Archive: ser.zip inflating: /opt/services [root@qls ~]# ll /opt/ total 656 -rw-r--r--. 1 root setgid 0 Aug 19 01:03 file9 -rw-r--r--. 1 root setgid 670293 Aug 20 08:46 services

    2、gzip:只能压缩文件,会删除源文件

    选项:
        -d        # 解压
        -r        # 压缩目录下的所有文件
        
    zcat    # 查看gzip格式压缩包
    [root@zgs ~]# ll
    total 792
    -rw-r--r--. 1 root root 670293 Aug 20 22:36 services
    -rw-r--r--. 1 root root 136227 Aug 20 22:37 ser.zip
    [root@zgs ~]# gzip services
    [root@zgs ~]# ll
    total 272
    -rw-r--r--. 1 root root 136088 Aug 20 22:36 services.gz
    -rw-r--r--. 1 root root 136227 Aug 20 22:37 ser.zip
    [root@zgs ~]# gzip -d services.gz
    [root@zgs ~]# ll
    total 792
    -rw-r--r--. 1 root root 670293 Aug 20 22:36 services
    -rw-r--r--. 1 root root 136227 Aug 20 22:37 ser.zip
    [root@zgs ~]# zcat services.gz   # 在不解压的情况下查看文件内容

    3、bzi2:只能压缩文件,会删除源文件

    [root@zgs ~]# ll
    total 792
    -rw-r--r--. 1 root root 670293 Aug 20 22:36 services
    -rw-r--r--. 1 root root 136227 Aug 20 22:37 ser.zip
    [root@zgs ~]# bzip2 services          # 压缩
    [root@zgs ~]# ll
    total 260
    -rw-r--r--. 1 root root 123932 Aug 20 22:36 services.bz2
    -rw-r--r--. 1 root root 136227 Aug 20 22:37 ser.zip
    [root@zgs ~]# bzip2 -d services.bz2   # 解压
    [root@zgs ~]# ll
    total 792
    -rw-r--r--. 1 root root 670293 Aug 20 22:36 services
    -rw-r--r--. 1 root root 136227 Aug 20 22:37 ser.zip
    [root@zgs ~]# bzcat services.bz2      # 查看压缩包内容

    4、tar

    选项
        z    # 使用gzip格式压缩
        j    # 使用bzip2格式压缩
        J    # 使用xz格式压缩
        c    # 创建压缩包
        f    # 指定压缩包名
        v    # 显示打包过程
        zcf
        t    # 查看压缩包里面的内容
        tf
        x    # 解压,根据压缩自动解压
        xf
        -C   # 指定解压路径
        P    # 使用绝对路径打包
        h    # 打包软连接
        X    # 指定排除列表
        --exclude    # 排除
        --exclude-from=xxx  # 排除列表
    [root@qls ~]# tar  zcvf  services.tar.gz  services  # 压缩文件
    services
    
    [root@qls ~]# tar  zcf  etc.tar.gz  /etc            # 压缩目录
    
    [root@qls ~]# tar  xf  etc.tar.gz                   # 解压
    
    [root@qls ~]# tar xf  etc.tar.gz   -C  /opt/        # 解压 指定路径

    二十五、定时任务

    crond
    
    系统级别    :定时文件清理,日志切割,定时收集系统的状态
    用户级别    :同步系统时间,定时备份数据

    定时任务相关的文件

    [root@qls ~]# ll  /etc/cron*  -d    # 查看
    drwxr-xr-x. 2 root root  21 Aug 14 15:11 /etc/cron.d        
    drwxr-xr-x. 2 root root  42 Aug 14 15:12 /etc/cron.daily       # 系统每天执行定时任务
    -rw-------. 1 root root   0 Apr 11  2018 /etc/cron.deny        # 黑名单
    drwxr-xr-x. 2 root root  22 Aug 14 15:11 /etc/cron.hourly      # 系统每小时
    drwxr-xr-x. 2 root root   6 Jun 10  2014 /etc/cron.monthly     # 系统每个月
    -rw-r--r--. 1 root root 451 Jun 10  2014 /etc/crontab          # 定时任务的主配置文件
    drwxr-xr-x. 2 root root   6 Jun 10  2014 /etc/cron.weekly      # 系统每周
    
    /var/spool/cron/        # 用户定时任务存放地址
    
    [root@qls ~]# ll /var/log/cron        # 定时任务日志
    
    
    [root@qls ~]# cat  /etc/crontab
    SHELL=/bin/bash                # 定时任务的命令解释器
    PATH=/sbin:/bin:/usr/sbin:/usr/bin    # 命令的环境变量
    MAILTO=root            # 接收邮件的用户
    
    # For details see man 4 crontabs
    
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
    
    *     # 所有,每
    -     # 连续的时间,1-5# 不连续的时间,1,5
    */5   # 每个5个单位
    00 02 * * *        # 每天的凌晨2点整执行     
    00 02 1 * *        # 每月的1号的凌晨2点整执行  
    00 02 14 2 *       # 每年2月份的14号的凌晨2点整执行     
    00 02 * * 7        # 每周日的的凌晨2点整执行     00 02 * 6 5        # 每年的6月份每周五的凌晨2点整执行    00 02 14 * 7       # 每个月14号且是周日的凌晨2点整执行      
    00 02 14 2 7       # 每年的2月份14号且是周日的凌晨2点整执行    */10  02 * * *     # 每天凌晨2点每隔十分钟执行一次   * * * * *          # 每分钟执行一次       00 00 14 2 *       # 每年的2月份14号凌晨12点整执行一次 
    crontab        # 定时任务的命令
    
      选项
          -e        # 编辑定时任务 vim  /var/spool/cron/username
          -l        # 查看定时任务 cat
          -r        # 删除定时任务文件
          -u        # 指定用户,默认是当前用户
  • 相关阅读:
    洛谷 [SDOI2015]约数个数和 解题报告
    multiset-count
    multiset-begin
    multiset-begin
    set-value_comp
    set-value_comp
    multiset-constructors
    multiset-constructors
    set-upper_bound
    set-upper_bound
  • 原文地址:https://www.cnblogs.com/zhangguosheng1121/p/11359974.html
Copyright © 2011-2022 走看看