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文件
    \rm /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
    • %m
    • %d
    • %H
    • %M
    • %S
    • %N 纳秒
    • %u 星期
    • %j 一年的第多少天
    • %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 \n World"
    Hello \n World
    [root@God test]# echo -e "Hello \n 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 ~/

posted on 2020-06-24 23:49  AustralGeek  阅读(1116)  评论(0编辑  收藏  举报

导航