1991年8月25日,Linux操作系统诞生
历史上的今天 在29年前的今天,1991年8月25日(农历1991年7月16日),Linux操作系统诞生。 Linux操作系统的诞生、发展和成长过程始终依赖着五个重要支柱:UNIX 操作系统、MINIX 操作系统、GNU 计划、POSIX 标准和Internet 网络。 1981年IBM公司推出微型计算机IB

深入理解Linux命令
命令提示符
当使用账号登录Linux后,终端上会显示指定格式的命令提示符
CentOS8.2的命令提示符
[root@centos8 ~]#
CentOS7.8的命令提示符
[root@centos7 ~]#
Ubuntu Server20.04的命令提示符
guanglei@ubuntu-server:~$
命令提示符显示的格式由环境变量PS1决定的,使用echo $PS1查看命令提示符的默认配置
guanglei@ubuntu-server:~$ echo $PS1\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
[root@centos7 ~]# echo $PS1[\u@\h \W]\$
[root@centos8 ~]# echo $PS1[\u@\h \W]\$
CentOS系列(CentOS7.8,CentOS8.2)命令提示符的含义说明
\u 表示当前登录的账号,例如管理员登录时账号就是root
\h 表示当前登录的主机名,例如centos8.2登录时主机名就是centos8,不同的操作系统版本设置成了不同的主机名,用于区分系统版本
\W表示当前用户所在的目录,~表示当前用户的家目录,如果切换目录,则会替换成切换后的目录
$表示当前用户登录的账号类型,其中# 表示当前登录的用户是root用户,如果是普通用户登录,显示的是$
命令提示符的格式由PS1变量决定,我们可以修改PS1变量的值,从而来修改命令提示符的格式
CentOS8.2 自定义命令提示符
[root@centos8 ~]# PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]"

CentOS8.2命令提示符格式
命令提示符格式的说明
- 31-37表示字体颜色
- 41-47 表示背景颜色
- 1 表示高亮
- 5表示闪烁
- \e 控制符\033
- \u 当前用户
- \h 主机名简称
- \H 主机名
- \w 当前工作目录
- \W 当前工作目录基名
- \t 24小时时间格式
- \T 12小时时间格式
- ! 命令历史数
- 开机后命令历史数
CentOS7.8自定义命令提示符
[root@centos7 ~]# PS1="\[\e[1;32m\][\[\e[0m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"

CentOS7.8自定义命令提示符
不过这种方式只会临时生效,一旦重新登录则恢复默认的命令提示符。我们可以使用echo结合重定向来将命令提示符的格式写入文件,让其永久生效。
[root@centos8 ~]# echo 'PS1="\[\e[1;32m\][\[\e[0m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"' > /etc/profile.d/env.sh

自定义命令提示符
如果不想使用,则使用rm -rf删除该文件即可
[06:41:19 root@centos8 ~]#rm -rf /etc/profile.d/env.sh

回到默认的命令提示符
企业运维场景通常会区分测试环境和生产环境,可以给不同的环境设置不同的命令提示符来避免误操作。
Linux命令分类
在日常运维时需要使用Linux提供的大量命令,这些命令可以分为别名、内部命令,外部命令三种。
别名可以看做是某条命令的缩写,如果某条命令太长,就可以使用别名来命名,执行别名等价于执行命令。
内部命令是Shell自带的,例如pwd,cd,echo都是内部命令,内部命令在系统启动后由Shell加载到内存中。而外部命令是位于PATH变量定义的路径中,一般是对应某个磁盘路径的可执行程序。
tpye命令能够区分执行的命令是别名,内部命令,还是外部命令。
ls 用于查看文件,默认使用的是别名,即默认添加添加了长选项–color=auto
[root@centos8 ~]# type lsls is aliased to `ls --color=auto'
如果想要自己创建别名,可以使用alias 变量名=变量值 的形式创建。
在创建别名时,别名的名称切勿和系统的命令冲突
例如需要切换到/etc/sysconfig/network-scripts目录,使用cd 加上目录名,由于该目录名称太长,这里就可以创建一个cdnet的别名
[root@centos8 ~]# alias cdnet='cd /etc/sysconfig/network-scripts'
然后只要输入cdnet就可以直接切换到/etc/sysconfig/network-scripts目录了,pwd命令是用于查看当前用户所在的目录,因为命令提示符只会显示最后一级目录。
[root@centos8 ~]# cdnet[root@centos8 network-scripts]# pwd/etc/sysconfig/network-scripts
不过这种创建别名的方式只是临时的,因为别名的配置只是存在了内存中,没有写入配置文件,当重新登录系统后就无法使用,执行别名时bash shell会提示找不到命令。

如果想要永久使用,可以将别名的配置保存到家目录的.bashrc文件文件中,
修改文件可以使用nano .bashrc命令,
[root@centos8 ~]# nano .bashrc
其中nano是文本编辑器,类似于Windows的记事本,使用nano打开文件后,直接编辑别名,然后按Ctrl+x退出,然后按y保存修改,最后回车即可,

增加别名
修改后可以使用cat .bashrc查看修改后的结果
[root@centos8 ~]# cat .bashrc # .bashrc# User specific aliases and functionsalias rm='rm -i'alias cp='cp -i'alias mv='mv -i'alias cdnet='cd /etc/sysconfig/network-scripts'# Source global definitionsif [ -f /etc/bashrc ]; then . /etc/bashrcfi
修改.bashrc文件后不会立即生效,如果让配置的别名生效,可以使用source .bashrc命令或者是. bashrc命令来让cdnet别名生效,只有生效后才能使用别名。
[root@centos8 ~]# cdnetbash: cdnet: command not found...[root@centos8 ~]# source .bashrc[root@centos8 ~]# cdnet[root@centos8 network-scripts]# pwd/etc/sysconfig/network-scripts
cd,pwd,echo等等都是shell内置的命令,也被称作内部命令
[root@centos8 ~]# type cdcd is a shell builtin[root@centos8 ~]# type pwdpwd is a shell builtin[root@centos8 ~]# type echoecho is a shell builtin
enable命令可以查看所有的命令
[root@centos8 network-scripts]# enable
enable还可以启用、禁用内部命令,其中禁用内部命令是enable -n command,启用内部命令是enable command
禁用内部命令echo
[root@centos8 ~]# enable -n echo[root@centos8 ~]# type echoecho is /usr/bin/echo
启用内部命令echo
[root@centos8 ~]# enable echo[root@centos8 ~]# type echoecho is a shell builtin
有些别名、内部命令会和外部命令重名,例如echo命令既是内部命令,又是外部命令,ls即是别名,也是外部命令,优先执行别名。
[root@centos8 ~]# type -a echoecho is a shell builtinecho is /usr/bin/echo
当执行echo的时候优先执行的是内部命令,如果想要执行外部命令,可以在外部命令的左边加上\或者使用”包含。
[root@centos8 ~]# 'echo' $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
ls默认是使用的别名,在查看文件时会给文件增加颜色,而如果想要执行外部命令ls,则可以使用\ls
[root@centos8 ~]# ls /etc[root@centos8 ~]# \ls /etc
而cat,hostname等等就是外部命令,使用type查看外部命令会输出该命令的完整路径
例如cat和hostname都是位于/usr/bin路径下的可执行程序
[root@centos8 ~]# type catcat is /usr/bin/cat[root@centos8 ~]# type hostnamehostname is /usr/bin/hostname
除了type查看路径以外,还可以使用whereis命令查看,该命令除了显示外部命令的路径以外,还会显示命令对应的帮助文档的路径。
[root@centos8 ~]# whereis lsls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
在执行外部命令时,每次都要从PATH环境变量中查找对应的可执行程序,这个过程相对而言比较耗时,为了提高执行效率,Linux在执行外部命令时将其缓存起来,使用hash命令可以查看缓存的外部命令,其中hits表示缓存执行的次数,也就是说当执行外部命令时首先会从缓存中查找,如果找不到再到PATH路径下查找。
[root@centos8 ~]# hashhits command 3 /usr/bin/nano 1 /usr/bin/cat 1 /usr/bin/whereis 5 /usr/bin/ls 7 /usr/bin/clear
如果缓存的命令的执行路径发生了变化,可以使用hash -d command 删除缓存
[root@centos8 ~]# hashhits command 3 /usr/bin/nano 1 /usr/bin/cat 1 /usr/bin/whereis 5 /usr/bin/ls 7 /usr/bin/clear[root@centos8 ~]# hash -d nano[root@centos8 ~]# hashhits command 1 /usr/bin/cat 1 /usr/bin/whereis 5 /usr/bin/ls 7 /usr/bin/clear
清空缓存可以使用hash -r命令实现。
Linux命令的执行过程
当运维人员在终端上输入命令并回车后,后台运行的shell程序会查找该命令所对应的可执行程序或者代码,并分析后提交给内核分配资源将其运行起来。

首先Shell会判断用户输入的是别名、内部命令还是外部命令,它们的执行顺序依次是别名、内部命令,外部命令,如果是外部命令,首先从缓存中查找命令的路径,如果缓存中没有找到,则从PATH中查找,如果别名,内部命令,缓存和外部命令都找不到,则会提示command not found。
Linux命令格式
Linux命令由命令[选项][参数]三部分组成,其中命令的选项和参数都是可选的
- 命令是别名、外部命令或者内部命令
- 选项用于启用或者关闭命令的某个或者某些功能,选项有短选项和长选项两种,其中短选项由 -和字符组成,例如 ls -l,id -u,短选项称为Unix风格,长选项由–和单词组成,例如ls –help,长选项相对于短选项更加直观的表达作用,长选项称为GNU风格。还有一种BSD风格的短选项,即不带-,命令后面直接跟字母,例如ps a
并不是每种命令都支持这三种风格,BSD风格使用相对较少,而Unix风格和GNU风格基本都支持。
- 参数是命令作用的对象,例如文件名、用户名等等,例如hostname ittimeline.net ,ittimeline.net就是修改的主机名
需要注意的是:
- 命令的多个选项以及参数和命令之间使用空白字符分隔 例如 ls -a -l
- 命令的多个短选项可以合并使用,例如ls -al
- 多个命令可以使用;符号隔开
- 一个命令可以使用\分成多行,命令太长时使用,例如编译Nginx
不带选项和参数的命令用例
[root@centos8 ~]# lsanaconda-ks.cfg initial-setup-ks.cfg test.txt
带选项的命令用例
ls -a 用于显示以.开头的隐藏文件
[root@centos8 ~]# ls -a. .bash_history .bashrc .cshrc initial-setup-ks.cfg.. .bash_logout .cache .dbus .tcshrcanaconda-ks.cfg .bash_profile .config .esd_auth .Xauthority
带多个选项的命令用例
ls -al 显示所有文件的完整信息
[root@centos8 ~]# ls -altotal 40dr-xr-x---. 5 root root 241 Aug 26 11:32 .dr-xr-xr-x. 18 root root 236 Aug 24 07:59 ..-rw-------. 1 root root 1591 Aug 24 08:08 anaconda-ks.cfg-rw-------. 1 root root 1467 Aug 26 11:32 .bash_history-rw-r--r--. 1 root root 18 May 11 2019 .bash_logout-rw-r--r--. 1 root root 176 May 11 2019 .bash_profile-rw-r--r--. 1 root root 224 Aug 26 11:40 .bashrcdrwx------. 3 root root 19 Aug 24 22:33 .cachedrwx------. 4 root root 31 Aug 25 16:51 .config-rw-r--r--. 1 root root 100 May 11 2019 .cshrcdrwx------. 3 root root 25 Aug 24 22:33 .dbus-rw-------. 1 root root 16 Aug 25 16:51 .esd_auth-rw-r--r--. 1 root root 1701 Aug 24 22:36 initial-setup-ks.cfg-rw-r--r--. 1 root root 129 May 11 2019 .tcshrc-rw-------. 1 root root 340 Aug 26 11:32 .Xauthority
带长选项的命令用例
ls –help 显示命令的帮助信息
[root@centos8 ~]# ls --help
带选项和参数的命令用例
ls -l initial-setup-ks.cfg 查看指定文件的完整信息
[root@centos8 ~]# ls -l initial-setup-ks.cfg -rw-r--r--. 1 root root 1701 Aug 24 22:36 initial-setup-ks.cfg
带选项和参数的命令用例
[root@centos8 ~]# id -u guanglei1000
一行执行多个命令用例
[root@centos8 ~]# hostname;uname -r;whocentos8.ittimeline.net4.18.0-193.el8.x86_64root pts/0 2020-07-27 10:18 (10.0.0.1)guanglei tty2 2020-07-27 04:50 (tty2)root pts/1 2020-07-27 05:46 (10.0.0.1)
一条命令放在多行执行用例
[root@centos8 ~]# wh\> o\> ami\> root
短选项和长选项等价的命令示例
free –human 等价于 free -h
[root@centos8 ~]# free --human total used free shared buff/cache availableMem: 7.8Gi 722Mi 6.5Gi 10Mi 534Mi 6.8GiSwap: 4.0Gi 0B 4.0Gi[root@centos8 ~]# free -h total used free shared buff/cache availableMem: 7.8Gi 722Mi 6.5Gi 10Mi 534Mi 6.8GiSwap: 4.0Gi 0B 4.0Gi
ls -a 等价于 ls –all
[root@centos8 ~]# ls -a. .bash_history .bashrc .cshrc initial-setup-ks.cfg.. .bash_logout .cache .dbus .tcshrcanaconda-ks.cfg .bash_profile .config .esd_auth .Xauthority[root@centos8 ~]# ls --all. .bash_history .bashrc .cshrc initial-setup-ks.cfg.. .bash_logout .cache .dbus .tcshrcanaconda-ks.cfg .bash_profile .config .esd_auth .Xauthority
想要强行中断执行中的命令,可以使用快捷键ctrl+c,可能会丢失数据
在终端上输入yes命令,该命令就是不停的输出y,如果中断执行,使用ctrl+c
[root@centos8 ~]# yes
而和ctrl+c作用类似的还有ctrl+d,ctrl+d可以注销登录,除此以外在执行交互式命令时,还能实现正常结束命令的执行。
在终端上输入bc命令,此时会等待用户输入数据,如果此时想要正常退出,则可以使用ctrl+d
[root@centos8 ~]# bcbc 1.07.1Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.This is free software with ABSOLUTELY NO WARRANTY.For details type `warranty'.
Linux命令帮助
日常运维的工作中会会使用到几百种命令,而最好记的记忆方式就是经常使用,在使用中记忆。如果记不住,那么就要学会查帮助,查帮助的能力决定了技术的能力。
Linux命令获取帮助可以通过如下几种方式进行
- whatis
- command –help 大多数命令都带了–help选项查看帮助
- man 命令帮助手册
- /usr/share/doc 命令帮助文档
- Red Hat document 红帽官方文档
- 其他软件的官方站点、文档
- 搜索引擎(Google,baidu)
whatis
whatis命令用于查看指定命令的简要说明,例如初学者如果不知道rm命令的作用,就可以使用whatis命令查看
[root@centos7 ~]# whatis rmrm (1) - remove files or directoriesrm (1p) - remove directory entries
whatis在查看命令的帮助时依赖数据库,如果没有生成数据库(例如CentOS8就没有生成),则无法使用
[root@centos8 ~]# whatis rmrm: nothing appropriate.[root@centos8 ~]# whatis lsls: nothing appropriate.
可以使用mandb命令创建数据库
[root@centos8 ~]# mandb
数据库创建成功之后再次使用whereis命令查看
[root@centos8 ~]# whatis lsls (1) - list directory contentsls (1p) - list directory contents
命令帮助
命令分为内部命令和外部命令,它们查看帮助的方法是不相同的,内部命令直接使用help command来查看其帮助。
查看enable命令的帮助信息
help命令会列出命令的功能以及常用选项的说明
[root@centos8 ~]# help enable
如果help命令不能满足需求,可以使用man bash 列出所有内部命令的帮助信息
man bash的内容累计3000多行
[root@centos8 ~]# man bash
外部命令可以使用–help选项获取命令的帮助信息
查看date命令的帮助信息
[root@centos8 ~]# date --help
显示完整日期和时间
[root@centos8 ~]# date '+%F %T'2020-08-01 09:30:34
修改时间为10天后的日期后还原修改的时间
[root@centos8 ~]# date -s '+10 day'Tue Aug 11 09:39:33 CST 2020[root@centos8 ~]# date -s '-10 day'Sat Aug 1 09:39:39 CST 2020
显示昨天的日期时间
[root@centos8 ~]# date -d yesterdayFri Jul 31 09:32:42 CST 2020
显示明天的日期
[root@centos8 ~]# date -d tomorrowSun Aug 2 09:33:10 CST 2020
显示10天后的日期
[root@centos8 ~]# date -d '10 day'Tue Aug 11 09:34:35 CST 2020
man命令
man命令概述
当使用whereis查看命令可执行程序的路径时,如果是外部命令还会列出该命令的帮助手册,通常存放在/usr/share/man路径下
例如ls命令的帮助手册位于/usr/share/man/man1/ls.1.gz路径下
[root@centos8 ~]# whereis lsls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
如果想要查看外部命令的帮助手册,可以使用man命令,而且几乎所有的命令都可以使用man查看,内部命令可以使用man bash查看,因为内部命令都内置在bash shell中。
man命令章节
而帮助手册是按照不同的章节存放的
- man 1表示用户命令
- man 2 表示系统调用
- man 3 表示C库调用
- man 4 表示设备文件以及特殊文件
- man 5 表示配置文件格式
- man 6 表示游戏
- man 7表示杂项
- man 8 表示管理类的命令
- man 9 表示Linux内核API
[root@centos8 ~]# ls /usr/share/manca de hu ja man1 man2 man3p man4x man6 man7x man9 nl pt sk ukcs es id ko man1p man2x man3x man5 man6x man8 man9x overrides pt_BR sv zh_CNda fr it man0p man1x man3 man4 man5x man7 man8x mann pl ru tr zh_TW
作为Linux运维工程师通常关注man1,man5,man8三个章节。C语言程序员关注man3,Linux系统人员关注man 2
在使用man命令查看帮助时,最好是指定章节,查看对应的帮助手册。因为某些命令既是外部命令,又会是配置文件
如果不指定章节的话使用man command 时默认列出的是最小的章节(即第一章)

[root@centos8 ~]# man passwd
如果想要查看passwd对应的配置文件格式,可以使用man 5 passwd查看
[root@centos8 ~]# man 5 passwd

man 5 passwd
如果不知道命令的章节,可以使用whatis passwd查看
[root@centos8 ~]# whatis passwdopenssl-passwd (1ssl) - compute password hashespasswd (1) - update user's authentication tokenspasswd (5) - password file
其中passwd(1)表示用户命令,用于修改用户的密码,而passwd(5)表示配置文件格式。
如果想要查看man命令的man帮助,首先使用whatis man查看对应的章节
[root@centos8 ~]# whatis manman (7) - macros to format man pagesman (1) - an interface to the on-line reference manualsman (1p) - display system documentation
然后可以使用man 1 man 查看
[root@centos8 ~]# man 1 man
查看date命令的man帮助
[root@centos8 ~]# whatis datedate (1) - print or set the system date and timedate (1p) - write the date and time[root@centos8 ~]# man 1 date
man命令搜索
在使用man命令查看帮助时,经常会使用到搜索,如果想要搜索某个关键字,可以使用/keyword来搜索某个关键字,默认是从当前位置向文件的尾部搜索,而且不区分大小写。

当匹配到多个时,可以使用n键获取下一个匹配的关键字,使用N获取上一个匹配的关键字。
man命令快捷键
man命令的空格键是向文件的尾部翻屏,b键是向文件的首部翻屏。q表示退出帮助。
man命令常用选项
man命令提供了-a选项查看命令的所有章节帮助。
[root@centos8 ~]# man -a passwd--Man-- next: passwd(1ssl) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]--Man-- next: passwd(5) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]
man -f 可以显示命令的章节,等价于whatis
[root@centos8 ~]# man -f passwdopenssl-passwd (1ssl) - compute password hashespasswd (1) - update user's authentication tokenspasswd (5) - password file[root@centos8 ~]# whatis passwdopenssl-passwd (1ssl) - compute password hashespasswd (1) - update user's authentication tokenspasswd (5) - password file
man -w 显示命令的帮助手册路径
[root@centos8 ~]# man -w date/usr/share/man/man1/date.1.gz
man帮助的段落说明
在查看man帮助手册时,有几个段落
- NAME 表示名称以及简要说明
- SYNOPSIS 表示用法格式说明[] 表示可选内容<>表示必选内容a|b 二选一{} 表示分组… 表示同一个内容可以出现多次
- DESCRIPTION 表示详细说明
- OPTIONS 表示选项说明
- EXAMPLES 表示示例
- FILES 表示相关文件
- AUTHOR 表示作者
- COPYRIGHT 表示版本信息
- REPORTING BUGS 表示bug信息
- SEE ALSO 表示其他帮助参考信息
本地帮助文档
Linux系统上安装的软件自带的文档都位于/usr/share/doc目录下,其常见的文档有README,INSTALL,CHANGES等文件。
[root@centos8 ~]# ls /usr/share/doc
通过在线文档获取帮助
如果不是Linux发行版的软件,而是额外安装的,通常可以去官网获取帮助信息
例如从Nginx官网获取帮助信息

Docker官网

除此以外还可以使用Google,Baidu等搜索引擎获取帮助。
【云技术在线】为您提供以下专业技术服务:
上云服务:上云架构设计,大流量高并发架构设计,混合云架构设计,上云迁移,云上容灾,跨国云访问加速等;
安全服务:等保咨询及实施,渗透测试,漏洞扫描,木马查杀,安全加固,应急响应,DDOS/CC防护,勒索病毒防护,安全托管等;
运维服务:Linux系统运维,数据恢复及备份,负载均衡集群搭建及维护,数据库集群搭建及维护,网站运行环境搭建及维护,系统性能调优,中间件性能调优,数据库性能调优,数据库读写分离,分库分表,性能(压力)测试,7*24小时监控及故障应急响应,故障排查,大流量高并发活动护航等。