zoukankan      html  css  js  c++  java
  • Linux-权限详解

    前言

    • 以下命令测试环境为CentOS7.8
    • 使用的shell为系统默认的bash
    • Linux下是区分大小写的,这点和Windows不同
    • Linux大部分命令语法为命令 [选项] [参数],我所介绍的选项为常用选项并不包含全部

    alias / unalias 命令别名

    alias命令用于给指令设置一个别名,unalias命令用于取消设置

    • 可以给长命令起一个简单的别名便于使用,如:

      alias ens33="vi /etc/sysconfig/network-scripts/ifcfg-ens33"
      
    • 取消已设置的别名命令

      unalias ens33
      
    • 可以避免危险操作,如系统默认的命令rm mv cp等,都是通过alias加了-i参数的

      # 查看所有的使用别名的命令
      [root@God ~]# alias  
      alias cp='cp -i'
      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'
      
    • 在命令前加或者使用命令全路径可忽略使用别名

      # 不进行询问直接删除mail.log文件
      
      m /var/log/mail.log  
      或
      /usr/bin/rm  /var/log/mail.log
      
    • 在命令行通过aliasunalias设置或取消的别名都是暂时性的,仅作用于当前登录的会话。如果想要永久生效,可以在~/.bashrc文件添加别名设置

    cd 切换目录

    cd命令用于切换工作目录至指定的目录,可用相对路径和绝对路径

    • 选项

      • / 表示根目录
      • . 表示当前目录
      • .. 表示上一级目录
      • - 表示上次所在的目录
      • ~ 表示当前用户的家目录
      # 进入用户家目录
      cd ~
      
      # 进入指定目录
      cd /etc
      
      # 进入上两级目录
      cd ../..
      

    cp 复制文件或目录

    cp用来复制文件或目录到指定位置

    • 语法

      cp [选项] 源 目标
      
    • 选项

      • -a 相当于同时指定-dpr
      • -d 复制时保留链接(相当于Windows系统中的快捷方式)
      • -p 保留源文件或目录的属性
      • -r|R 对目录进行递归处理,复制目录时必须加上它才能复制
      • -f 覆盖已存在的目标而不给出提示
      • -i-f相反,如果目标文件存在,则提示是否覆盖
      # 复制文件/etc/hosts到目录/local下
      cp /etc/hosts /local
      
      # 复制文件/etc/hosts到目录/local下并命名为hosts.bak
      cp /etc/hosts /local/hosts.bak
      
      # 复制目录/etc到目录/local下,如果/local/etc已存在直接覆盖
      cp -af /etc /local
      
      # 复制目录/etc到目录/local下并重命名为etc.bak
      cp -a /etc /local/etc.bak
      

    cat 查看文件内容

    cat命令适合查看少量内容,并可将多个文件连接到一起进行标准输出,当文本数据内容量过大时,推荐使用lessmore进行查看

    • 语法

      cat [选项] 文件1 [文件2 文件N]
      
    • 选项

      • -n 输出时显示行号
      • -s 当遇到有连续两行以上的空白行,就替换成一个空白行
      # 查看resolv.conf的内容
      cat /etc/resolv.conf
      
      # 将/etc/resolv.conf和/etc/hosts两个文件连接到一起进行标准输出,并显示行号
      cat -n /etc/resolv.conf  /etc/hosts
      
    • cat还可以配合重定向将标准输入写到文件中

      [root@God ~]# cat > demo.txt << EOF
      > 我在命令行打上 cat > demo.txt << EOF
      > 在 > 后面写的东西都能写入到文件中
      > 写完了所有内容后,在最后单独写个EOF就可以了
      > EOF
      [root@God ~]# cat -n demo.txt 
           1	我在命令行打上 cat > demo.txt << EOF
           2	在 > 后面写的东西都能写入到文件中
           3	写完了所有内容后,在最后单独写个EOF就可以了
      

    chage 设置密码有效期

    chage 命令本质是修改通过/etc/shadow文件中的内容来设置账号密码有效期限的

    • 语法

      chage [选项] 用户
      
    • 选项

      • -l 列出用户的当前设置
      • -d DATE DATE为日期,格式YYYY-MM-DD,即设置上次修改密码的时间,设置为0则下次登录时必须改密码,设置为-1则密码永不过期,密码是否过期就是根据这个时间计算的
      • -E DATE DATE为日期,格式YYYY-MM-DD,设置账号失效日期(对root慎用),设置为0则立即失效,设置为-1则永不失效
      • -M N N为天数,密码有效期,即每过N天不修改密码的话密码就会过期
      • -m N N为天数,即距离上次修改日期N天后,才可以更改密码,设置为0表示随时可更改
      • -W N N为天数,即距离密码过期日N天前开始发出警告信息
      • -I N N为天数,即如果一个密码已过期N天,那么该账号将失效
      # 列出 jet 用户的账号密码有效日期详细信息
      chage -l jet
      
      # 使 jet 用户下次登陆时必须修改密码
      chage -d 0 jet
      
      # 设置 jet 用户2020年8月8日账号失效
      chage -E '2020-8-8' jet
      
      # 设置用户至少每90天就需要改一次密码,并在15天之前提醒
      chage -M 90 -W 15 jet
      

    chown 更改文件所属

    chown命令可以更改Linux下文件或目录的所属用户、所属组,Linux下一切皆文件,而文件必须有所属

    • 语法

      chown [用户][:用户组] 文件或目录              
      
    • 选项

      • -R 递归处理,将指定目录下所有文件及子目录一并处理
      • -v 显示执行过程
      # 更改/local/myfile.txt的拥有者为root用户
      chown root /local/myfile.txt
      
      # 更改/local/myfile.txt的群组的使用者为root组
      chown :root /local/myfile.txt
      
      # 更改/local/myfile.txt的拥有者为root用户,群组的使用者为root组
      chown root:root /local/myfile.txt
      
      # 更改目录/local的拥有者为root用户
      chown -R root /local
      

    chmod 设置文件rwx权限

    chmod命令可用于更改文件的r读、w写、x执行权限, 通过ls -lstat命令可查看文件的权限-rw-r--r-- 第一位表示文件类型,后9位每三位为一组,分别表示所属用户、所属组、其他用户的权限。

    • 语法

      chmod [选项] rwx的权限分值 文件或目录
      
      • 权限分值 r=4, w=2, x=1
      chmod [选项] 身份标识(+|-)(r|w|x) 文件或目录
      
      • 身份标识 u=user所属用户 , g=group所属组, o=other其他用户, a=all(u+g+o)所有用户
    • 选项

      • -R 递归处理,将指定目录下所有文件及子目录一并处理
      # 更改文件/local/myscript.sh的权限
      # 文件拥有者权限=7(r+w+x) 同组用户权限=5(r+x) 其他用户权限=5(r+x)
      chmod 755 /local/myscript.sh
      
      # 去掉其他用户对文件/local/myscript.sh的写权限
      chmod o-w /local/myscript.sh
      
      # 去掉其他用户对文件/local/myscript.sh的写权限,给同组用户加上执行权限
      chmod o-w,g+x /local/myscript.sh
      
      # 更改目录/local的权限
      chmod -R 754 /local
      

    chattr / lsattr 隐藏属性

    chattr命令可以用来修改文件或目录的隐藏属性,只有root用户可以使用

    • 语法

      chattr [选项] (+|-|=)属性 文件或目录
      
      • + 表示增加该属性
      • - 表示去掉该属性
      • = 表示去掉其他属性,只保留该属性
    • 选项

      • -R 递归处理,将指定目录下所有文件及子目录一并处理
    • 属性

      • a 设置后只能增加数据,而不能删除或修改数据
      • i 设置后不能被删除、改名、设定链接也无法新增,相当于锁定
      • s 彻底删除的属性,即有该属性的文件删除后无法恢复
      • u 当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复,预防意外删除
      # 给test.txt文件添加a属性,使其只能增加数据
      chattr +a /local/test.txt
      
      # 去掉改属性
      chattr -a /local/test.txt
      

    lsattr 命令可以查看隐藏属性

    • 语法

      lsattr [选项] [文件或目录]
      
    • 选项

      • -a 显示隐藏文件
      • -d 显示目录的属性,而不是目录中内容
      # 查看test.txt文件的隐藏属性
      lsattr /local/test.txt
      
      # 查看/local目录的隐藏属性
      lsattr -d /local
      
      # 查看当前目录下的文件或目录的隐藏属性,包含吟唱文件
      lsattr -a
      

    crontab 定时任务

    crontab命令用来管理需要周期性执行的任务,与Windows下的计划任务类似,依赖于crond服务执行,定时任务的配置文件一般以用户为单位,放在/var/spool/cron目录中,执行日志是/var/log/croncrontab通过cron 表达式来进行定时任务的配置

    • 避免资源分配不均匀,即多个定时任务在同一时间点执行时,尽量错开
    • 取消不要的输出选项,将执行结果 >> /dev/null中,避免一直发邮件
    • 一般情况下周与日、月不可同时共存
    • anacron是可唤醒关机期间的工作任务的配置,有检测机制,针对不24小时开机的服务器,需要的自行百度
    # cron表达式 分时日月周:
    # .---------------- 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
    # *    代表任何时刻
    # ,    代表分隔时段
    # -    代表时间范围
    # /N   N为数字,表示执行几次
    
    • crontab 常用命令

      # 显示当前用户crontab配置
      crontab -l
      
      # 编辑当前用户crontab配置
      crontab -e
      
      # root用户可以帮其他用户新建/删除crontab配置
      crontab -u guest
      
    • crontab 配置示例

      # 每1分钟执行一次
      * * * * * echo $(date) >> /dev/null
      
      # 每5分钟执行一次后面的命令
      */5 * * * * echo $(date) >> /local/my_crontab.txt
      
      # 每2小时执行一次后面的命令
      * */2 * * * echo $(date) >> /local/my_crontab.txt
      
      # 在3:00与10:00的时候执行一次
      * 3,10 * * * echo $(date) >> /local/my_crontab.txt
      
      # 在10:00到22:00之间每2小时执行一次
      * 10-22/2 * * * echo $(date) >> /local/my_crontab.txt
      
      # 在21:00到21:30之间每5分钟执行一次
      0-30/5 21 * * * echo $(date) >> /local/my_crontab.txt
      
      # 每周一0点执行一次
      0 0 * * 1 echo $(date) >> /local/my_crontab.txt
      
      # 每年的5月20日00:00分都会给rose发一封情书邮件
      0 0 20 5 * mail rose < /home/jack/lover.txt
      

    df 磁盘使用情况

    df命令用于显示文件系统的磁盘使用信息

    • 语法

      df [选项] 
      
    • 选项

      • -h 以人类可读的格式显示(K|M|G)
      • -i 显示inode文件的数量和使用量
      • -T 显示磁盘的文件系统类型
      # 显示磁盘使用情况
      df -h
      # 显示inode信息
      df -hi
      

    date 系统时间 / hwclock 硬件时钟

    linux系统有两个时钟:一个是由主板电池驱动的硬件时钟(Real Time Clock),也叫做RTC或者叫CMOS时钟。当操作系统关机的时候,用这个来记录时间,但是对于运行的系统是不用这个时间的;另一个时间是系统时钟(System clock)也叫内核时钟或者软件时钟,是由软件根据时间中断来进行计数的,内核时钟在系统关机的情况下是不存在的,所以,当操作系统启动的时候,内核时钟是要读取RTC时间来进行时间同步。并且在系统关机的时候将系统时间写回RTC中进行同步。

    date 命令比较常用,可以用来显示和设定系统的日期和时间,在显示方面还可以自定义格式

    • 语法

      date [+格式] [选项]
      
    • 格式

      • %Y 年 {0000..9999}
      • %m 月 {1..12}
      • %d 日 {01..31}
      • %H 时 {00..23}
      • %M 分 {00..59}
      • %S 秒 {00..59}
      • %N 纳秒 {000000000..999999999}
      • %u 星期 {1..7}
      • %j 一年的第多少天 {001..366}
      • %F 完整的日期,相当于 %Y-%m-%d
      • %T 完整的时间,相当于 %H:%M:%S
      • %R 钟表上显示的时间, 相当于 %H:%M
      • %s 从1970-01-01 00:00:00 UTC 到现在的秒数
      # 格式化显示当前系统时间
      [root@God ~]# date "+%F %T.%N"
      2020-06-22 20:34:36.179451922
      
      # 显示今天是今年的第多少天
      [root@God ~]# date "+%j"
      174
      
      # 设置系统时间为2012-12-12 12:12:12
      [root@God ~]# date -s "2012-12-12 12:12:12"
      Wed Dec 12 12:12:12 CST 2012
      [root@God ~]# date
      Wed Dec 12 12:12:12 CST 2012
      
    • 选项

      • -d DATESTR 该选项非常强大,可以根据DATESTR的描述显示时间
      • -s DATESTR 根据DATESTR的描述,设置系统时间,把-d换成-s即可
      # 年year 月month 日day 时hour 分min 秒seconds 
      
      # 显示1天前的时间
      date -d "-1day"
      
      # 显示100天后的时间
      date "+%F %T" -d "+100day"
      
      # 显示新中国成立100周年是哪天
      date "+%F" -d "1949-10-01 +100year"
      # 设置日期为新中国成立100周年那天
      date "+%F" -s "1949-10-01 +100year"
      
    • 硬件时钟hwclock的常用命令

      # 显示硬件时钟时间
      hwclock
      
      # 将当前系统时间写入硬件时钟
      hwclock -w
      
      # 以系统时钟为准,同步硬件时钟
      hwclock --systohc
      
      # 以硬件时钟为准,同步系统时钟
      hwclock --hctosys
      
      # 将硬件时钟设置成指定的时间
      hwclock --set --date="2008-08-08 08:08:08"
      
    • 使用ntpdate命令将本机时间与时间服务器的时间进行同步,没有这个命令使用yum install ntpdate安装

      # 将本机时间与阿里云时间服务器时间进行同步 ntp[1-7].aliyun.com
      ntpdate ntp7.aliyun.com
      

    diff 文件比较

    diff命令可以快速比较两个文件或目录是否有不同

    • 语法

      # 比较文件
      diff [选项] 文件1 文件2
      # 比较目录
      diff [选项] 目录1 目录2
      
    • 选项

      • -b 忽略一行当中仅有多个空白的区别(例如"about me"与"about me"视为相同)
      • -B 忽略空白行的区别
      • -i 忽略大小写的区别
      # 比较两个文件
      diff /etc/hosts /etc/hosts.bak
      

    echo 标准输出

    echo命令用于打印字符串或变量的值,在shell脚本中极为常用,可以做出进度条效果,也可以打印彩色文字,详情自行百度

    • 选项

      • -e 开启转义字符
      # 转义:开启与不开启的区别
      [root@God test]# echo "Hello 
       World"
      Hello 
       World
      [root@God test]# echo -e "Hello 
       World"
      Hello 
       World
       
      # echo 单引号与双引号的区别
      [root@God test]# echo "$PATH"
      /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
      [root@God test]# echo '$PATH'
      $PATH
      
      [root@God test]# echo "Hello,World!"
      -bash: !": event not found
      [root@God test]# echo 'Hello,World!'
      Hello,World!
      

    find / locate 文件搜索

    find支持各种姿势的查找方式,提供了相当多的查找条件,功能很强大。也正因如此它的选项也很多,有时使用起来也是比较耗费系统资源的,特别是直接从 / 下查找的时候,在实际使用中应尽量缩小查找目录范围,把/替换成你指定的查找路径即可

    • 语法

      find [选项] 查找路径 查找条件 动作
      
    • 选项

      • -L 跟随符号链接,加上此选项意味着会搜索链接指向的目录
    • 条件

      • -name NAME 根据名称进行查找,支持通配符
      • -mtime +-DAY 根据修改时间按天查找。如+7代表7天(不含)前,-7代表7天(含)内
      • -mmin +-MIN 根据修改时间按分钟查找。
      • -type TYPE 根据文件类型查找 TYPE的值有d目录,f普通文件, l符号链接等
      • -size +-SIZE 根据文件大小查找。如+100M代表大于100MB的文件,-50M代表小于50MB的文件
      • -perm MODE 根据文件权限查找
      • -maxdepth N N为数字,表示查找深度
      • -user USER 根据用户名查找
      • -uid UID 根据用户ID查找
      • -gid GID 根据组ID查找
      • -empty 查找空文件或空目录,即大小为0bytes
    • 动作

      • -delete 删除查找出来的文件,目录只能删除空目录
      • -ok CMD {} ; 交互式执行命令,每次执行前会询问
      • -exec CMD {} ; 直接执行命令,不询问
      • 说明
        • {} 表示的是查找出来的结果
        • ; 表示的是结束命令,因为;在各个系统中会有不同的意义,所以在前面的是转义字符,为了防止系统出错。如果你不愿意,使用';'结束也是可以的
      # 查找下1层的目录
      find / -maxdepth 1 -type d 
      
      # 查找下2层的目录
      find / -maxdepth 2 -type d 
      
      # 根据名称精确查找
      find / -name "restart_tomcat.sh"
      
      # 根据名称模糊查找
      find / -name "*.log"
      
      # 根据修改时间查找
      find / -name "*.log" -mtime +7 
      
      # 查找是否有权限为777的文件
      find / -type f -perm 777 | xargs ls -l
      
      # 找到7天前的日志文件,直接将其删除
      find / -type f -name '*.log' -mtime +7 -delete
      
      # 找到7天前的日志文件,并询问是否将其删除
      find / -type f -name '*.log' -mtime +7 -ok rm -rf {} ;
      
      # 找到7天前的日志文件,直接将其删除
      find / -type f -name '*.log' -mtime +7 -exec rm -rf {} ;
      
      # 使用 xrags 命令实现删除
      find / -type f -name '*.log' -mtime +7 | xargs rm -rf
      

    locate命令用来查找文件或目录,要比find命令快很多,原因在于它不搜索具体目录,而是通过/var/lib/mlocate/mlocate.db自身创建的数据库进行搜索,这个数据库含有本地所有文件信息。每天自动更新一次库中的数据,有时刚创建的文件使用locate搜索不到时就是因为库中的数据没有及时更新,为了避免这种情况,在使用locate命令之前可以使用updatedb命令手动更新。如果没有locate命令,则需要安装一下yum -y install mlocate

    • 语法

      locate [选项] 查找条件    # 查找条件支持通配符和正则表达式
      
    • 选项

      • -c 只显示找到的数量
      • -i 忽略大小写
      • -r 使用基础正则表达式
      • --regex 使用扩展正则表达式
      # 使用前最好先更新一下数据库
      updatedb
      
      # 查找包含 myfile 的文件和目录
      locate myfile
      
      # 查找以myfile开头的文件和目录
      locate myfile*
      
      # 查找以myfile结尾的文件和目录
      locate *myfile
      
      # 查找文件名为 1.txt 的文件
      locate -r "/1.txt$"
      

    free 查看内存使用

    free命令可以显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存

    • 语法

      free [选项]
      
    • 选项

      • -k 以KB为单位进行显示
      • -m 以MB为单位进行显示
      • -g 以GB为单位进行显示
      • -h 以人类可读的格式显示(K|M|G)
      • -s N N为数字,表示间隔描述,用于持续观察内存使用状况
      # 3秒一刷新,显示内存使用情况
      free -h -s 3
      

    head 查看文件前面的内容

    head命令用于查看文件头部或行内头部的内容

    • 语法

      head [选项] 文件
      
    • 选项

      • -n N N为数字,表示前N行
      • -c N N为数字,表示行内的前N个字节。UTF-8编码中一个字母占1字节,一个汉字占3字节
    # 显示前100行内容
    head -n 100 /local/
    
    # 显示前5个字节的内容
    echo "Hello,World" | head -c 5
    

    history 命令历史

    history 命令用于记录和显示你在命令行敲过的每一条命令,相邻的重复命令默认会合并成一个。命令历史记录太多会让系统变得不安全,可以根据自己的需求自定义以下环境变量进行限制

    # 记录命令历史的文件
    HISTFILE=/root/.bash_history
    # 记录命令历史的文件最大记录条数
    HISTFILESIZE=1000
    # 内存中命令历史的最大记录条数
    HISTSIZE=1000
    # 可以通过添加HISTTIMEFORMAT环境变量,记录命令执行时间
    HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
    
    • 语法

      history [选项] 
      
    • 选项

      • N N为数字,显示最近执行过的N条命令
      • -c 清空内存中的历史命令
      • -rHISTFILE设置的文件中的内容读取到内存
      • -w-r相反,把内存中的命令历史写入到文件中
      # 查看命令历史
      history
      
      # 执行第66条命令
      !66
      
      # 执行上一条命令
      !!
      

    ip 网络配置管理

    ip命令作为iproute2工具包的核心命令,它是linux下管理网络和流量控制的工具包,旨在替代老牌的工具链net-tools,即ifconfig, arp, route, netstat等命令。net-tools通过procfs(/proc)ioctl系统调用去访问和改变内核网络配置,而iproute2则通过netlink套接字接口与内核通讯。抛开性能而言,net-tools的用法给人的感觉是比较乱,而iproute2的用户接口相对net-tools来说相对来说,更加直观。比如,各种网络资源(如link、IP地址、路由和隧道等)均使用合适的对象抽象去定义,使得用户可使用一致的语法去管理不同的对象。如今很多系统管理员依然通过net-tools配置管理网络,但自2001年起,Linux社区已经对齐停止维护。同时,一些Linux发行版比如Arch Linux和CentOS/RHEL 7则已经完全抛弃了net-tools,只支持iproute2。如果你仍在使用net-tools,而且尤其需要跟上新版Linux内核中的最新最重要的网络特性的话,那么是时候转到iproute2的阵营了。原因就在于使用iproute2可以做很多net-tools无法做到的事情。ip命令非常强大,如果要完全运用的话估计能写一本书了。这里就随用随加了,需要深入自行查阅官方文档。

    • 语法

      ip [选项] 对象 {命令}
      
      • ip 命令的选项不支持连着写,每个都要加-并用空格分隔
    • 选项

      • -c 加上颜色显示
      • -s 显示更多的信息
    • 对象

      • address IP协议设备
      • link 网络设备
      • route 路由表
      • 所有对象的名称均支持完整写法和缩写,如address可写成addr add a
      # 查看IP地址
      ip -c addr
      

    kill 结束进程

    kill命令可以发送一个信号SIGTERM默认为15给进程,可将指定程序终止。程序或工作的编号可以利用ps命令和jobs命令查看

    • 语法

      kill -信号  进程ID|工作ID
      
    • 信号

      • 1 启动被终止的进程,可让该PID重新读取自己的配置文件,类似重新启动
      • 2 相当于用键盘Ctrl+c来中断一个进程的进行
      • 9 强制中断一个进程的执行,如果该进程进行到一半,那么尚未完成的部分可能会有"半产品"产生,比如vim会有.filename.swp保留下来
      • 15 以正常的进程结束方式来结束进程
      • 17 相当于用键盘Ctrl+z来暂停一个进程的进行
      # 强制结束PID为8886的进程
      kill -9 8886
      
      # 强制结束JOBNUMBER为2的进程
      kill -9 %2
      
      # 强制结束所有的以httpd启动的进程
      killall -9 httpd
      

    ln 创建链接(快捷方式)

    ln 命令可以为文件或目录创建一个链接(link),链接可分为两种:硬链接和软链接。软链接相当于windows下的快捷方式

    • 语法

      ln [选项] 源  目标
      
    • 选项

      • -s 创建为软链接
      # 在家目录下创建一软连接
      ln -s /etc/sysconfig/network-scripts/ifcfg-ens33 ~/ifcfg-ens33
      

    ls 查看目录中的内容

    ls命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。ll命令是系统自带的一个别名命令,主要用于进行长列表显示内容

    • 语法

      ls [选项] [文件或目录]
      
    • 选项

      • -a 显示所有内容,包括隐藏文件
      • -d 显示目录本身,而不是目录中的内容
      • -t 按照时间进行排序,最新的在最上面
      • -r 对排序进行翻转
      • -l 使用长列表显示内容
      • -h 以人类可读的格式显示(K|M|G)
      • --full-time 显示精确时间
      # 显示目录下的所有内容
      ls -a 
      
      # 快速找到修改时间最新的文件,最下面那个就是
      ls -lrth
      

    less 分页查看文件

    less是对文件或其他输出进行分页显示的工具,功能十分强大,而且不会一开始就加载整个文件,在性能和用法上比more更加的有弹性。使用less命令打开的内容可以使用各种功能按键来操作,个人感觉完全可以替代more,所以有人说less is more,相比于more,我更喜欢用less

    • 语法

      less [选项] 文件
      
    • 选项

      • -s 显示连续的空行为一个空行
      • -N 显示行号
      • -m 显示类似于more命令的百分比
      • -g 只标记最后搜索的关键词
      • -i 搜索时忽略大小写
    • 按键

      • h 查看帮助
      • ↑↓ 向上或向下一行
      • b 向上滚动一页 PageUp
      • space 向下滚动一页 PageDown
      • g 移动到第一行
      • G 移动到最后一行
      • N g/G N为数字,移动到第N行
      • q/Q 退出
      • / KEYWORD 进入向下搜索模式,可根据关键字进行搜索,n继续往下找,N继续往上找
      • & KEYWORD 输入关键字,可仅显示包含关键字的行
      • F 类似于tail -f,实时读取文件最新内容,按ctrl + c 停止
      # 使用 less 命令查看文件
      less -smN /etc/service
      
      # 使用 less 命令接收其他命令的标准输出
      history | Dless
      

    mv 剪切 / 重命名 文件或目录

    mv命令用来为文件或目录重命名或移动文件或目录(剪切)

    • 语法

      mv [选项] 源 目标
      
    • 选项

      • -i 若指定目录已有同名文件,则先询问是否覆盖旧文件;
      • -f 如果目标存在,直接覆盖不提示
      # 移动文件/local/hosts.bak到/local目录下
      mv /etc/hosts.bak /local
      
      # 重命名文件hosts.bak为hosts
      mv /etc/hosts.bak /etc/hosts
      

    mkdir 创建目录

    mkdir命令用来创建目录

    • 语法

      mkdir [选项] 目录
      
    • 选项

      • -m 创建目录的同时设置权限
      • -p 如果父目录不存在,则创建
      # 创建目录/local/script,如果目录/local不存在,会报错
      mkdir /local/script
      
      # 创建目录/local/script,如果目录/local不存在,则创建
      mkdir -p /local/script
      
      # 创建目录/local/script,如果目录/local不存在,则创建,并给script目录设定755的权限分数
      mkdir -pm 755 /local/script
      

    ps 查看进程

    ps命令用于显示当前进程的状态,这个状态是当前那些进程的快照,如果想要动态查看进程,请使用top命令,常用来通过管道命令搭配grep命令进行查询,然后通过kill命令,删除不需要的进程

    • 语法

      ps [选项]
      
    • 选项

      • -e 显示所有进程
      • -f 显示全格式列表,增加 UID、PPID、C与STIME栏位的显示
      # 根据关键字查找进程
      ps -ef | grep tomcat
      

    pwd 显示当前目录

    pwd用于显示当前所在的路径,加-P可显示真实路径,而非链接路径

    [root@God /]# ll -d /sbin
    lrwxrwxrwx. 1 root root 8 Jun 21 11:20 /sbin -> usr/sbin
    [root@God /]# cd sbin/
    [root@God sbin]# pwd    
    /sbin
    [root@God sbin]# pwd -P  
    /usr/sbin
    

    passwd 修改密码

    passwd可以用来更改用户的密码,还可以锁定与解锁用户

    • 语法

      passwd [选项] 用户
      
    • 选项

      • -d 删除密码
      • -f 强迫用户下次登录时必须修改密码
      • -w 设置密码到期前提前警告的天数
      • -l 锁定账户
      • -u 解锁账户
      • -x 设置密码有效天数
      # 修改当前用户的密码
      passwd
      
      # 修改其他用户的密码,root用户修改其他用户密码,不需要提供原密码
      passwd jack
      
      # 锁定用户
      passwd -l jack
      
      # 解锁锁定的用户
      passwd -u jack
      

    rm 删除文件或目录

    rm 用于删除文件或目录,生产服务器执行删除命令前一定要备份

    • 语法

      rm [选项] 文件或目录
      
    • 选项

      • -i 删除前询问
      • -f 直接删除,不确认
      • -r 删除目录时使用,否则无法删除目录
      # 删除目录下所有内容,并且不经过确认,慎用
      rm -rf /local
      
      # rm 删除目录下所有隐藏文件
      rm /local/.*
      
      # rmdir 只能删除空目录,目录不为空无法删除
      rmdir /local
      

    su 切换用户

    su命令用于切换当前用户,除了root外,需要输入该用户的密码

    su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;而后者连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误。su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su -命令切换以后,工作目录变成root的工作目录了。用echo $PATH命令看一下susu -以后的环境变量有何不同。以此类推,要从当前用户切换到其它用户也一样,应该使用su -命令。

    # 切换到用户执行命令,命令执行完在自动切换回来
    [root@God ~]# su jet -c ls
    ls: cannot open directory .: Permission denied
    [root@God ~]# su - jet -c ls
    1.txt
    

    stat 查看文件详细信息

    stat命令可以查看文件的详细信息

    • 语法

      stat [选项] 文件
      
    • 选项

      • -c FORMAT 格式化显示 FORMAT的取值可以查看帮助
      # 查看文件的权限
      [root@God ~]# stat -c %A testfile 
      -rw-r--r--
      [root@God ~]# stat -c %a testdir/
      755
      

    sort 排序 / uniq 去重

    sort命令用于对文本内容或者是对其他命令的输出进行排序显示。

    • 语法

      sort [选项] 文件
      
    • 选项

      • -u 合并重复的行
      • -r 反向排序
      • -g 按照数字大小排序
      • -t SEP 按照SEP进行分列,默认为空格
      • -k N N为数字,表示根据第N列排序
      # 根据进程号排序查看进程
      ps -ef | sort -rgk 2
      

    uniq 命令用于去除重复的行,一般与sort搭配使用

    • 语法

      uniq [选项]  源数据
      
    • 选项

      • -c 统计重复行出现的次数
      • -d 仅显示重复出现的行
      • -u 仅显示出现一次的行
      # 统计IP地址出现的次数
      cat ip.txt | sort | uniq -c 
      

    split 分割文件

    split可以将大文件分割成若干个小文件

    • 语法

      split [选项] 文件 前缀
      
    • 选项

      • -d 给文件添加数字后缀
      • -b SIZE 根据大小进行分割,可以添加单位(b|k|m|g)等
      • -l N N为数字表示行数,按照行数进行分割
      # 将catalina.out按照300m的大小进行分割,分割的文件会以catalog00,catalog01,catalog02的方式来建立
      split -db 300m catalina.out catalog
      
      # 将分割后的若干个小文件在还原
      more catalog* >> catalina.out
      

    tar 打包

    tar 命令用来打包或压缩文件,选项相当多。一般只打包不压缩的文件以.tar结尾,通过gzip进行打包压缩的文件以.tar.gz结尾,通过bzip2进行打包压缩的文件以.tar.bz2 结尾

    • 语法

      tar [选项] 压缩文件名 操作目标
      
    • 选项

      • -c 创建打包文件
      • -x 释放打包文件
      • -t 查看包文件内容
      • -v 显示详细过程
      • -z 使用gzip的方式进行压缩或解压
      • -j 使用bzip2的方式进行压缩或解压
      • -h 同时打包链接指向的文件
      • -C 指定解压目录
      # 将目录/local进行打包并使用gzip进行压缩
      tar -zcvf local.tar.gz /local
      
      # 将local.tar.gz进行解压并将打包文件释放到当前目录
      tar -zxvf local.tar.gz
      
      # 仅解压指定的档案local/script到当前工作目录
      tar -zxvf local.tar.gz local/script
      
      # 将目录/local进行打包并使用gzip进行压缩,但排除以.log结尾的文件
      tar -zcvf local.tar.gz --exclude=*.log /local
      

    top 动态查看进程

    top命令可以实时的查看系统运行的整体情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。

    • 语法

      top [选项]
      
    • 选项

      • -d N N为数字,表示刷新秒数间隔
      • -b 以追加的方式显示结果
      • -n N N为数字,表示刷新次数
      • -p PIDLIST 只显示指定PID的进程,多个PID之间用,分隔
      • -u USER 只显示指定用户的进程
      # 以1秒的时间间隔来动态查看进程
      top -d 1
      
      # 查看进程ID为 1 12 38 的进程信息
      top -d 1 -p 1,12,38
      

    tail 查看文件末尾内容

    tail 命令和head命令相反,用于查看文件末尾的内容,而且可以实时刷新

    • 语法

      tail [选项] 文件
      
    • 选项

      • -n N N为数字,表示末尾N行
      • -c N N为数字,表示行内的末尾的N个字节。UTF-8编码中一个字母占1字节,一个汉字占3字节
      • -f 实时刷新显示文件内容
      # 实时查看文件/local/mylog.log末尾100行的内容
      tail -100f  /local/mylog.log
      

    touch 修改文件的时间属性或创建空文件

    touch命令用于修改文件或者目录的时间属性,若文件不存在,则创建一个新的空文件。Linux下的三个时间属性概念分别是atime(access time)读取时间 、 mtime(modify time)修改时间、ctime(change time),注意ctime不是create time。实际工作中使用touch修改这些时间属性的需求极少,相反大多数是用来创建一个或多个空文件。有点喧宾夺主的意思~

    • 语法

      touch [选项] 文件或目录
      
    • 选项

      • -a 修改文件或目录的读取时间
      • -m 修改文件或目录的修改时间
      • -t STAMP 指定时间戳,格式为[YYYY]MMDDhhmm[.ss]
      • -c 如果文件不存在,不要创建文件
      # 使用{}可一次性创建多个空文件,如 {1..10}  {a..z}  {1,3,5,7,9}
      # 创建一个空文件
      touch olympic.txt
      
      # 创建99空文件
      touch olympic{1..99}.txt
      
      # 修改文件的修改时间 mtime
      touch -cmt 200808080808.08 olympic.txt
      

    useradd / groupadd 用户和组管理

    Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个唯一的用户名和各自的密码。用户在登录时键入正确的用户名和密码后,就能够进入系统和自己的家目录。

    • 添加用户

      # 添加一个普通用户,不指定组的话会自动创建一个同名组
      useradd jack 
      
      # 添加一个普通用户,并指定现有的组(组必须先存在)
      useradd -g root jet
      
      # 添加一个系统用户,并不让其登录 -r 代表系统用户,系统用户不会有家目录
      useradd -r -s /sbin/nologin  rose 
      
    • 删除用户

      # 只删除用户
      userdel jack
      
      # 删除用户,并删除该用户的家目录(包括目录中的内容)
      # 家目录外的用户所属文件会替换成用户ID,当有新的用户使用这个ID时,该文件自动归属新用户
      userdel -r jack
      
    • 修改用户

      # 修改用户的初始用户组,通过名称修改
      usermod -g root jack
      
      # 修改用户的初始用户组,通过GID修改
      usermod -g 888 jack
      
      # 相当于passwd -l,锁定用户
      usermod -L jack
      
      # 相当于passwd -u,解除锁定
      usermod -U jack 
      
      # 禁止用户登录
      usermod -s /sbin/nologin jack
      
      # 修改用户ID
      usermod -u 888 jack
      
    • 查看用户

      # 查看当前用户
      id
      
      # 查看当前登录的用户
      w
      
      # 查看所有的用户
      cat /etc/passwd
      cat /etc/passwd | cut -d ':' -f 1
      
    • 添加用户组

      # 建立一个一般用户组
      groupadd mygroup
      
      # 建立一个系统用户组
      groupadd -r admingroup
      
    • 删除用户组

      # 删除用户组
      groupdel admingroup
      
    • 修改用户组

      # 修改组ID
      groupmod -g 888 mygroup
      
      # 修改组名称 CIA为新名称
      groupmod -n CIA mygroup
      
    • 查看用户组

      cat /etc/group
      

    vi / vim 文本编辑器

    vivim用法基本一致,它们的关系有些类似于Windows下notepad与notepad++的关系,不过vim有时默认没有安装,需要yum -y install vim手动安装一下。因为vim相比vi,功能更强大,又有语法高亮等功能。所以个人还是习惯并推荐使用vim。下面介绍的vim的使用方法,通常在vi上同样适用,网上介绍vim使用的方式基本上就是说在三种模式下使用总结,即命令模式、输入模式、底线命令模式,介绍十分详尽,简直快把整个vim的帮助给弄下来了。我这里介绍的常用操作为单位,不是很全,但日常使用应该足够了。

    • 打开文件

      # 打开一个文件
      vim /tmp/yum.log
      
      # 按 ctrl+w 然后按 上下左右键 可在窗口之间切换
      # 打开多个文件,纵向窗口分割,左右一边一个窗口
      vim -O /etc/hosts /etc/hosts.bak
      # 打开多个文件,横向窗口分割,上下一遍一个窗口
      vim -o /etc/hosts /etc/hosts.bak
      
    • 编辑文本

      • 打开文件后,按i键可在光标处插入内容;按o键可在光标处的下一行插入内容。此时底部会显示-- INSERT --字样,按Esc键可退出编辑模式
    • 快速定位

      • : set nu 显示行号, 按 : 然后输入set nu敲回车
      • : set nonu 取消显示行号
      • : N N为数字,表示行号,按 : 然后输入11,敲回车即可快速移动光标到第11行,输入$则移动到最后一行
      • N% N为数字,表示百分比,比如按58然后按一下%,即可移动光标到文件58%的部分
      • H | M | L 按这三个键可快速移动光标到屏幕的顶部、中间、底部位置
      • ctrl+u 往上翻半页
      • ctrl+d 往下翻半页
      • ↑↓←→ 移动光标
      • Home/End 移动光标到行首或行末
      • PageUp/PageDown 翻页
    • 快速编辑

      • N yy N为数字,复制光标所在行以下的N行,默认N为1,即当前行。如复制 20 行,就按20,然后按yy就复制了
      • N ddyy用法一样,只不过它是剪切。所以它也能当删除使用
      • p 在光标所在行的下一行粘贴刚复制或剪切的内容
      • uu键,撤销刚才的操作
      • ctrl+r 反撤销
      • v 进入视图模式,可通过上下左右移动光标选择一片文本,此时底部会显示-- VISUAL --字样(按Esc键可退出视图模式)然后按y复制或按d剪切,按p在光标处后面粘贴
      • Vv一样,只不过是以行为单位
      • ctrl+vv一样,只不过是以列为单位,类似于在notepad++中,按住Alt选文字
    • 查找

      • / KEYWORD/进入查找,在底部/的后面输入想查找的内容,按回车搜索,然后按n往下继续查找,按N往上查找
    • 替换

      • :%s#OLD#NEW#gic 个人习惯先按:%s###g,然后移动光标到OLD位置输入要替换的字符串,在移动光标到NEW位置,输入新字符串,敲回车进行文字替换,%表示全文,不加代表当前行,用10,20替换百分号则表示替换10到20行;后面的gicg表示全局替换不加只替换每行的第一个;i 表示忽略大小写,c表示在替换前进行确认,需要哪个加哪个
    • 退出和保存

      • Esc 当你进入编辑模式、命令模式等其他模式时,都可按Esc键退出
      • :w 保存
      • :wq 保存并退出
      • q! 强制退出不保存

    wc 统计字数行数

    wc命令可以统计字节数、行数、单词数

    • 语法

      wc [选项] 文件
      
    • 选项

      • -l 统计行数
      • -c 统计字节数
      • -m 统计字符数
      # 依次列出/etc/passwd中的 行数、字数、字符数
      wc /etc/passwd
      
      # 查看有多少个进程数
      ps -ef | wc -l
      

    xargs 参数传递

    xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具,它可以将管道或标准输入的数据转换成命令行参数,也能够从文件的输出中读取数据。它能够捕获一个命令的输出,然后传递给另外一个命令,一般与管道在一起使用

    # 找到修改日期在7天前的日志,并将其删除
    find /local/server -name "*.log" -mtime +7 | xargs rm -rf
    

    yum 红帽系列包管理工具

    yum,是Yellow dog Updater, Modified 的简称,是杜克大学为了提高RPM 软件包安装性而开发的一种软件包管理器,适用于Redhat系列的系统。用python写成,yum 的宗旨是自动化地升级,安装/移除rpm 包,收集rpm 包的相关信息,检查依赖性并自动提示用户解决。yum 主要功能是更方便的添加/删除/更新rpm 包,自动解决包的依赖性问题,便于管理大量系统的更新问题。yum 可以同时配置多个资源库(Repository),简洁的配置文件(/etc/yum.conf),自动解决增加或删除rpm包时遇到的依赖性问题。

    • 语法

      yum [选项] 命令 [包名]
      
    • 选项

      • -y 对所有的确认都回答yes
    • 命令

      • install PACKAGE 安装包,PACKAGE替换成要安装的包名
      • update PACKAGE 更新包
      • remove PACKAGE 卸载包
      # 安装 vim 
      yum -y install vim
      

    zip / unzip 压缩与解压

    zip 是个广泛使用的压缩程序,压缩后的文件后缀名为.zip

    # 将当前目录下所有txt文本压缩在一起
    zip txt.zip *.txt
    
    # 将目录/local压缩成local.zip文件
    zip -r local.zip /local
    
    # 将local.zip解压缩到指定目录,不加-d选项,则解压到当前目录
    unzip local.zip -d ~/
    
  • 相关阅读:
    shell---telnet shell实现
    设计模式-建造者模式
    关于Http2
    转载Resharper使用
    设计模式-原型模式
    设计模式-代理模式
    设计模式-装饰器模式
    设计模式-简单工厂和策略模式
    C#直接发送打印机命令到打印机及ZPL常用打印命令
    C#打印机操作类
  • 原文地址:https://www.cnblogs.com/qq1207501666/p/13190725.html
Copyright © 2011-2022 走看看