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

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

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

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

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

    1. # 查看所有的使用别名的命令
    2. [root@God ~]# alias
    3. alias cp=\'cp -i\'
    4. alias l.=\'ls -d .* --color=auto\'
    5. alias ll=\'ls -l --color=auto\'
    6. alias ls=\'ls --color=auto\'
    7. alias mv=\'mv -i\'
    8. alias rm=\'rm -i\'
  • 在命令前加\或者使用命令全路径可忽略使用别名

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

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

  • 选项

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

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

  • 语法

    1. cp [选项] 目标
  • 选项

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

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

  • 语法

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

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

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

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

  • 语法

    1. 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天,那么该账号将失效
    1. # 列出 jet 用户的账号密码有效日期详细信息
    2. chage -l jet
    3. # 使 jet 用户下次登陆时必须修改密码
    4. chage -d 0 jet
    5. # 设置 jet 用户2020年8月8日账号失效
    6. chage -E \'2020-8-8\' jet
    7. # 设置用户至少每90天就需要改一次密码,并在15天之前提醒
    8. chage -M 90 -W 15 jet

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

  • 语法

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

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

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

  • 语法

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

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

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

  • 语法

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

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

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

lsattr 命令可以查看隐藏属性

  • 语法

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

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

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

  • 避免资源分配不均匀,即多个定时任务在同一时间点执行时,尽量错开
  • 取消不要的输出选项,将执行结果 >> /dev/null中,避免一直发邮件
  • 一般情况下周与日、月不可同时共存
  • anacron是可唤醒关机期间的工作任务的配置,有检测机制,针对不24小时开机的服务器,需要的自行百度
  1. # cron表达式 分时日月周:
  2. # .---------------- minute (0 - 59)
  3. # | .------------- hour (0 - 23)
  4. # | | .---------- day of month (1 - 31)
  5. # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
  6. # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
  7. # | | | | |
  8. # * * * * * user-name command to be executed
  9. # * 代表任何时刻
  10. # , 代表分隔时段
  11. # - 代表时间范围
  12. # /N N为数字,表示执行几次
  • crontab 常用命令

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

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

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

  • 语法

    1. df [选项]
  • 选项

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

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

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

  • 语法

    1. 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 到现在的秒数
    1. # 格式化显示当前系统时间
    2. [root@God ~]# date "+%F %T.%N"
    3. 2020-06-22 20:34:36.179451922
    4. # 显示今天是今年的第多少天
    5. [root@God ~]# date "+%j"
    6. 174
    7. # 设置系统时间为2012-12-12 12:12:12
    8. [root@God ~]# date -s "2012-12-12 12:12:12"
    9. Wed Dec 12 12:12:12 CST 2012
    10. [root@God ~]# date
    11. Wed Dec 12 12:12:12 CST 2012
  • 选项

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

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

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

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

  • 语法

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

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

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

  • 选项

    • -e 开启转义字符
    1. # 转义:开启与不开启的区别
    2. [root@God test]# echo "Hello \n World"
    3. Hello \n World
    4. [root@God test]# echo -e "Hello \n World"
    5. Hello
    6. World
    7. # echo 单引号与双引号的区别
    8. [root@God test]# echo "$PATH"
    9. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    10. [root@God test]# echo \'$PATH\'
    11. $PATH
    12. [root@God test]# echo "Hello,World!"
    13. -bash: !": event not found
    14. [root@God test]# echo \'Hello,World!\'
    15. Hello,World!

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

  • 语法

    1. 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. # 查找下1层的目录
    2. find / -maxdepth 1 -type d
    3. # 查找下2层的目录
    4. find / -maxdepth 2 -type d
    5. # 根据名称精确查找
    6. find / -name "restart_tomcat.sh"
    7. # 根据名称模糊查找
    8. find / -name "*.log"
    9. # 根据修改时间查找
    10. find / -name "*.log" -mtime +7
    11. # 查找是否有权限为777的文件
    12. find / -type f -perm 777 | xargs ls -l
    13. # 找到7天前的日志文件,直接将其删除
    14. find / -type f -name \'*.log\' -mtime +7 -delete
    15. # 找到7天前的日志文件,并询问是否将其删除
    16. find / -type f -name \'*.log\' -mtime +7 -ok rm -rf {} \;
    17. # 找到7天前的日志文件,直接将其删除
    18. find / -type f -name \'*.log\' -mtime +7 -exec rm -rf {} \;
    19. # 使用 xrags 命令实现删除
    20. 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

  • 语法

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

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

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

  • 语法

    1. free [选项]
  • 选项

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

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

  • 语法

    1. head [选项] 文件
  • 选项

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

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

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

    1. history [选项]
  • 选项

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

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命令非常强大,如果要完全运用的话估计能写一本书了。这里就随用随加了,需要深入自行查阅官方文档。

  • 语法

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

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

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

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

  • 语法

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

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

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

  • 语法

    1. ln [选项] 目标
  • 选项

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

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

  • 语法

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

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

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

  • 语法

    1. 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 停止
    1. # 使用 less 命令查看文件
    2. less -smN /etc/service
    3. # 使用 less 命令接收其他命令的标准输出
    4. history | Dless

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

  • 语法

    1. mv [选项] 目标
  • 选项

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

mkdir命令用来创建目录

  • 语法

    1. mkdir [选项] 目录
  • 选项

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

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

  • 语法

    1. ps [选项]
  • 选项

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

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

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

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

  • 语法

    1. passwd [选项] 用户
  • 选项

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

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

  • 语法

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

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

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

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

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

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

  • 语法

    1. stat [选项] 文件
  • 选项

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

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

  • 语法

    1. sort [选项] 文件
  • 选项

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

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

  • 语法

    1. uniq [选项] 源数据
  • 选项

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

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

  • 语法

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

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

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

  • 语法

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

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

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

  • 语法

    1. top [选项]
  • 选项

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

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

  • 语法

    1. tail [选项] 文件
  • 选项

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

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

  • 语法

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

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

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

  • 添加用户

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

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

    1. # 修改用户的初始用户组,通过名称修改
    2. usermod -g root jack
    3. # 修改用户的初始用户组,通过GID修改
    4. usermod -g 888 jack
    5. # 相当于passwd -l,锁定用户
    6. usermod -L jack
    7. # 相当于passwd -u,解除锁定
    8. usermod -U jack
    9. # 禁止用户登录
    10. usermod -s /sbin/nologin jack
    11. # 修改用户ID
    12. usermod -u 888 jack
  • 查看用户

    1. # 查看当前用户
    2. id
    3. # 查看当前登录的用户
    4. w
    5. # 查看所有的用户
    6. cat /etc/passwd
    7. cat /etc/passwd | cut -d \':\' -f 1
  • 添加用户组

    1. # 建立一个一般用户组
    2. groupadd mygroup
    3. # 建立一个系统用户组
    4. groupadd -r admingroup
  • 删除用户组

    1. # 删除用户组
    2. groupdel admingroup
  • 修改用户组

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

    1. cat /etc/group

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

  • 打开文件

    1. # 打开一个文件
    2. vim /tmp/yum.log
    3. # 按 ctrl+w 然后按 上下左右键 可在窗口之间切换
    4. # 打开多个文件,纵向窗口分割,左右一边一个窗口
    5. vim -O /etc/hosts /etc/hosts.bak
    6. # 打开多个文件,横向窗口分割,上下一遍一个窗口
    7. 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命令可以统计字节数、行数、单词数

  • 语法

    1. wc [选项] 文件
  • 选项

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

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

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

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

  • 语法

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

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

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

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

  1. # 将当前目录下所有txt文本压缩在一起
  2. zip txt.zip *.txt
  3. # 将目录/local压缩成local.zip文件
  4. zip -r local.zip /local
  5. # 将local.zip解压缩到指定目录,不加-d选项,则解压到当前目录
  6. unzip local.zip -d ~/
版权声明:本文为qq1207501666原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/qq1207501666/p/13190725.html