常见的命令
在Linux中,命令的一般格式为:命令名称 [命令参数] [命令对象]
命令对象一般是指要处理的文件、目录、用户等资源,而命令参数可以用长格式(完整的选项名称), 也可以用短格式(单个字母的缩写), 两者分别用–与-作为前缀
常见系统工作命令
echo
:用于在终端输出字符串或变量提取后的值,格式为echo [字符串 | $变量]
date
命令用于显示及设置系统的时间或日期,格式为date [选项] [+指定的格式]
。
date "+%Y-%m-%d %H:%M:%S"
参数 | 作用 |
---|---|
%t | 跳格[Tab 键] |
%H | 小时( 00~23) |
%I | 小时( 00~12) |
%M | 分钟( 00~59) |
%S | 秒( 00~59) |
%j | 今年中的第几天 |
reboot
命令用于重启系统,其格式为 reboot
poweroff
命令用于关闭系统,其格式为 poweroff
wget
(World Wide Web Get”)命令用于在终端中下载网络文件,格式为wget [参数] 下载地址
ps
Process status命令用于查看系统中的进程状态,格式为ps [参数]
参数 | 作用 |
---|---|
-a | 显示所有进程(包括其他用户的进程) |
-u | 用户以及其他详细信息 |
-x | 显示没有控制终端的进程 |
在Linux 系统中,有 5 种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自含义如下所示。
-
R(运行): 进程正在运行或在运行队列中等待。
-
S(中断): 进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
-
D(不可中断): 进程不响应系统异步信号,即便用 kill 命令也不能将其中断。
-
Z(僵死): 进程已经终止,但进程描述符依然存在, 直到父进程调用
wait4()
系统函数后将进程释放。 -
T(停止): 进程收到停止信号后停止运行。
当执行 ps aux
命令后通常会看到进程状态
长格式和长格式之间不能合并,长格式和短格式之间也不能合并,但短格式和短格式之间是可以合并的,合并后仅保留一个-
(减号)即可。另外 ps
命令可允许参数不加减号( -
),因此可直接写成 ps aux
的样子。
top
命令用于动态地监视进程活动与系统负载等信息,其格式为 top
。top
命令相当强大,能够动态地查看系统运维状态,完全将它看作 Linux 中的“强化版的Windows 任务管理器”。
pidof
命令用于查询某个指定服务进程的 PID 值,格式为pidof [参数] [服务名称]
。
每个进程的进程号码值(PID
)是唯一的,因此可以通过 PID 来区分不同的进程。
kill
命令用于终止某个指定 PID 的服务进程,格式为kill [参数] [进程 PID]
。
killall
命令用于终止某个指定名称的服务所对应的全部进程,格式为: killall [参数] [进程名称]
。 通常来讲,复杂软件的服务程序会有多个进程协同为用户提供服务,如果逐个去结束这些进程会比较麻烦,此时可以使用 killall
命令来批量结束某个服务程序带有的全部进程。
[!NOTE]
如果我们在系统终端中执行一个命令后想立即停止它, 可以同时按下
Ctrl + C
组合键(生产环境中比较常用的一个快捷键),这样将立即终止该命令的进程。或者,如果有些命令在执行时不断地在屏幕上输出信息,影响到后续命令的输入,则可以在执行命令时在末尾添加上一个&符号,这样命令将进入系统后台来执行。
系统状态检测命令
ifconfig
命令用于获取网卡配置与网络状态等信息,格式为ifconfig [网络设备] [参数]
。
uname
命令用于查看系统内核与系统版本等信息,格式为uname [-a]
。
uptime
用于查看系统的负载信息,格式为 uptime
。
free
用于显示当前系统中内存的使用量信息,格式为free [-h]
。
who
用于查看当前登入主机的用户终端信息,格式为who [参数]
。
last
命令用于查看所有系统的登录记录,格式为last [参数]
。
history
命令用于显示历史执行过的命令,格式为history [-c]
。
sosreport
命令用于收集系统配置及架构信息并输出诊断文档,格式为 sosreport
。
工作目录切换命令
pwd
命令用于显示用户当前所处的工作目录,格式为pwd [选项]
。
cd
命令用于切换工作路径,格式为cd [目录名称]
。
除了常见的切换目录方式,还可以使用cd -
命令返回到上一次所处的目录,使用cd ..
命令进入上级目录,以及使用cd ~
命令切换到当前用户的家目录,亦或使用cd ~username
切换到其他用户的家目录。
ls
命令用于显示目录中的文件信息,格式为ls [选项] [文件]
。
所处的工作目录不同,当前工作目录下的文件肯定也不同。使用 ls
命令的-a
参数看到全部文件(包括隐藏文件),使用-l
参数可以查看文件的属性、大小等详细信息。如果想要查看目录属性信息,则需要额外添加一个-d
参数。
文本文件编辑命令
Linux 系统中“一切都是文件”,而对服务程序进行配置自然也就是编辑程序的配置文件。
cat
命令用于查看纯文本文件(内容较少的),格式为cat [选项] [文件]
。
more
命令用于查看纯文本文件(内容较多的),格式为more [选项]文件
。
head
命令用于查看纯文本文档的前 N 行,格式为head [选项] [文件]
。
tail
命令用于查看纯文本文档的后 N 行或持续刷新内容,格式为tail [选项] [文件]
。
tail 命令最强悍的功能是可以持续刷新一个文件的内容,当想要实时查看最新日志文件时,这特别有用,此时的命令格式为tail -f 文件名
tr
命令用于替换文本文件中的字符,格式为tr [原始字符] [目标字符]
。
wc
命令用于统计指定文本的行数、字数、字节数,格式为wc [参数] 文本
。
参数 | 作用 |
---|---|
-l | 只显示行数 |
-w | 只显示单词数 |
-c | 只显示字节数 |
stat
命令用于查看文件的具体存储信息和时间等信息,格式为stat 文件名称
。
cut
命令用于按“列”提取文本字符,格式为cut [参数] 文本
。
diff
命令用于比较多个文本文件的差异,格式为diff [参数] 文件
。在使用 diff
命令时,不仅可以使用--brief
参数来确认两个文件是否不同,还可以使用-c
参数来详细比较出多个文件的差异之处,这绝对是判断文件是否被篡改的有力神器。
文件目录管理命令
touch
命令用于创建空白文件或设置文件的时间,格式为touch [选项] [文件]
。
参数 | 作用 |
---|---|
-a | 仅修改“读取时间”( atime) |
-m | 仅修改“修改时间”( mtime) |
-d | 同时修改 atime 与 mtime |
mkdir
命令用于创建空白的目录,格式为mkdir [选项] 目录
。
在 Linux 系统中,文件夹是最常见的文件类型之一。除了能创建单个空白目录外, mkdir
命令还可以结合-p
参数来递归创建出具有嵌套叠层关系的文件目录。
cp
命令用于复制文件或目录,格式为cp [选项] 源文件 目标文件
。
大家对文件复制操作应该不陌生,在 Linux 系统中,复制操作具体分为 3 种情况:
-
如果目标文件是目录,则会把源文件复制到该目录中;
-
如果目标文件也是普通文件,则会询问是否要覆盖它;
-
如果目标文件不存在,则执行正常的复制操作。
参数 | 作用 |
---|---|
-p | 保留原始文件的属性 |
-d | 若对象为“链接文件”,则保留该“链接文件”的属性 |
-r | 递归持续复制(用于目录) |
-i | 若目标文件存在则询问是否覆盖 |
-a | 相当于-pdr ( p 、 d 、 r 为上述参数) |
mv
命令用于剪切文件或将文件重命名, 格式为mv [选项] 源文件 [目标路径|目标文件名]
。剪切操作不同于复制操作,因为它会默认把源文件删除掉,只保留剪切后的文件。如果在同一个目录中对一个文件进行剪切操作,其实也就是对其进行重命名:
rm
命令用于删除文件或目录,格式为rm [选项] 文件
。在 Linux 系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息, 可在 rm
命令后跟上-f
参数来强制删除。 另外, 想要删除一个目录,需要在 rm
命令后面一个-r
参数才可以, 否则删除不掉。
dd
命令用于按照指定大小和个数的数据块来复制文件或转换文件,格式为dd [参数]
。
file
命令用于查看文件的类型,格式为file 文件名
。
打包压缩与搜索命令
tar
命令用于对文件进行打包压缩或解压,格式为tar [选项] [文件]
。
参数 | 作用 |
---|---|
-c | 创建压缩文件 |
-x | 解开压缩文件 |
-t | 查看压缩包内有哪些文件 |
-z | 用 Gzip 压缩或解压 |
-j | 用 bzip2 压缩或解压 |
-v | 显示压缩或解压的过程 |
-f | 目标文件名 |
-p | 保留原始的权限与属性 |
-P | 使用绝对路径来压缩 |
-C | 指定解压到的目录 |
首先, -c
参数用于创建压缩文件, -x
参数用于解压文件,因此这两个参数不能同时使用。其次, -z
参数指定使用 Gzip 格式来压缩或解压文件,-j
参数指定使用 bzip2 格式来压缩或解压文件。用户使用时则是根据文件的后缀来决定应使用何种格式参数进行解压。在执行某些压缩或解压操作时,可能需要花费数个小时,如果屏幕一直没有输出,您一方面不好判断打包的进度情况,另一方面也会怀疑电脑死机了,因此非常推荐使用-v
参数向用户不断显示压缩或解压的过程。 -C
参数用于指定要解压到哪个指定的目录。 -f
参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称。一般使用tar -czvf 压缩包名称.tar.gz 要打包的目录
命令把指定的文件进行打包压缩;相应的解压命令为tar -xzvf 压缩包名称.tar.gz
。下面我们来逐个演示下打包压缩与解压的操作。
grep
命令用于在文本中执行关键词搜索, 并显示匹配的结果, 格式为“grep [选项] [文件]”。
参数 | 作用 |
---|---|
-b | 将可执行文件( binary)当作文本文件( text)来搜索 |
-c | 仅显示找到的行数 |
-i | 忽略大小写 |
-n | 显示行号 |
-v | 反向选择—仅列出没有“关键词”的行 |
我们在这里只讲两个最最常用的参数: -n
参数用来显示搜索到信息的行号; -v
参数用于反选信息(即没有包含 关键词的所有信息行)。
find
命令用于按照指定条件来查找文件,格式为find [查找路径] 寻找条件 操作
。
参数 | 作用 |
---|---|
-name | 匹配名称 |
-perm | 匹配权限( mode 为完全匹配, -mode 为包含即可) |
-user | 匹配所有者 |
-group | 匹配所有组 |
-mtime -n +n | 匹配修改内容的时间( -n 指 n 天以内, +n 指 n 天以前) |
-atime -n +n | 匹配访问文件的时间( -n 指 n 天以内, +n 指 n 天以前) |
-ctime -n +n | 匹配修改文件权限的时间( -n 指 n 天以内, +n 指 n 天以前) |
-nouser | 匹配无所有者的文件 |
-nogroup | 匹配无所有组的文件 |
-newer f1 !f2 | 匹配比文件 f1 新但比 f2 旧的文件 |
--type b/d/c/p/l/f | 匹配文件类型(后面的字幕参数依次表示块设备、目录、字符设备、管道、链接文件、文本文件) |
-size | 匹配文件的大小( +50KB 为查找超过 50KB 的文件,而-50KB 为查找小于50KB 的文件) |
-prune | 忽略某个目录 |
-exec …… {}\; | 后面可跟用于进一步处理搜索结果的命令(下文会有演示) |
管道符、重定向与环境变量
输入输出重定向
输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到 屏幕的数据信息写入到指定文件中。
-
标准输入重定向(STDIN,文件描述符为 0):默认从键盘输入,也可从其他文件或命 令中输入。
-
标准输出重定向(STDOUT,文件描述符为 1):默认输出到屏幕。
-
错误输出重定向(STDERR,文件描述符为 2):默认输出到屏幕。
符号 | 作用 |
---|---|
命令 < 文件 | 将文件作为命令的标准输入 |
命令 << 分界符 | 从标准输入中读入,直到遇见分界符才停止 |
命令 < 文件 1 > 文件 2 | 将文件 1 作为命令的标准输入并将标准输出到文件 2 |
符号 | 作用 |
---|---|
命令 > 文件 | 将标准输出重定向到一个文件中(清空原有文件的数据) |
命令 2> 文件 | 将错误输出重定向到一个文件中(清空原有文件的数据) |
命令 >> 文件 | 将标准输出重定向到一个文件中(追加到原有内容的后面) |
命令 2>> 文件 | 将错误输出重定向到一个文件中(追加到原有内容的后面) |
命令 >> 文件 2>&1或命令 &>> 文件 | 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面) |
管道命令符
同时按下键盘上的 Shift+\
键即可输入管道符,其执行格式为命令 A | 命令 B
。命令符的作用也可以用一句话来概括“把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输入”。
命令行的通配符
顾名思义,通配符就是通用的匹配信息的符号,比如星号( *)代表匹配零个或多个字符,问号( ?)代表匹配单个字符,中括号内加上数字[0-9]代表匹配 0~9之间的单个数字的字符,而中括号内加上字母[abc]则是代表匹配 a、 b、 c 三个字符中的任意一个字符。
常用的转义字符
4 个最常用的转义字符如下所示。
- 反斜杠(
\
):使反斜杠后面的一个变量变为单纯的字符串。 - 单引号(
''
):转义其中所有的变量为单纯的字符串。 - 双引号(
""
):保留其中的变量属性,不进行转义处理。 - 反引号( ``):把其中的命令执行后返回结果。
重要的环境变量
在 Linux 系统中,变量名称一般都是大写的,这是一种约定俗成的规范。
简单来说,命令在 Linux 中的执行分为 4 个步骤。
-
第 1 步:判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则直接执行。
-
第 2 步: Linux 系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名称来替换原本的命令名称。可以用 alias 命令来创建一个属于自己的命令别名,格式为“alias 别名=命令”。若要取消一个命令别名,则是用 unalias 命令,格式为“unalias 别名”。
-
第 3 步: Bash 解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤 4 继续处理。可以使用“type 命令名称”来判断用户输入的命令是内部命令还是外部命令。
-
第 4 步:系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作 PATH,可以简单地把它理解成是“解释器的小助手”,作用是告诉 Bash 解释器待执行的命令可能存放的位置,然后 Bash 解释器就会乖乖地在这些位置中逐个查找。 PATH 是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到 Bash 解释器对Linux 命令的查找。
变量名称 | 作用 |
---|---|
HOME | 用户的主目录(即家目录) |
SHELL | 用户在使用的 Shell 解释器名称 |
HISTSIZE | 输出的历史命令记录条数 |
HISTFILESIZE | 保存的历史命令记录条数 |
邮件保存路径 | |
LANG | 系统语言、语系名称 |
RANDOM | 生成一个随机数字 |
PS1 | Bash 解释器的提示符 |
PATH | 定义解释器搜索用户执行命令的路径 |
EDITOR | 用户默认的文本编辑器 |
其实变量是由固定的变量名与用户或系统设置的变量值两部分组成的,我们完全可以自行创建变量,来满足工作需求。 但是,这样的变量不具有全局性,作用范围也有限,默认情况下不能被其他用户使用。如果工作需要,可以使用 export 命令将其提升为全局变量,这样其他用户也就可以使用它了
Vim 编辑器与 Shell 命令脚本
编写 Shell 脚本
可以将 Shell 终端解释器当作人与计算机硬件之间的“翻译官”,它作为用户与 Linux 系统内部的通信媒介,除了能够支持各种变量与参数外,还提供了诸如循环、分支等高级编程语言才有的控制结构特性。要想正确使用 Shell 中的这些功能特性,准确下达命令尤为重要。Shell
脚本命令的工作方式有两种:交互式和批处理。
-
交互式( Interactive):用户每输入一条命令就立即执行。
-
批处理( Batch):由用户事先编写好一个完整的 Shell 脚本, Shell 会一次性执行脚本中诸多的命令。
接收用户的参数
已经内设了用于接收参数的变量,变量之间可以使用空格间隔。例如$0 对应的是当前 Shell 脚本程序的名称, $#对应的是总共有几个参数, $*对应的是所有位置的参数值, $?对应的是显示上一次命令的执行返回值,而$1、 $2、 $3……则分别对应着第 N 个位置的参数值
判断用户的参数
Shell 脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字 0,否则便返回其他随机数值。
测试语句格式:[ 条件表达式 ]
切记,条件表达式两边均应有一个空格。
按照测试对象来划分,条件测试语句可以分为 4 种:
-
文件测试语句;
-
逻辑测试语句;
-
整数值比较语句;
-
字符串比较语句。
文件测试即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符
流程控制语句
if条件测试语句
- 单分支
if 条件测试操作
then 命令序列
fi
- 双分支
if 条件测试操作
then 命令序列1
else 命令序列2
fi
- 多分支
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else 命令序列3
fi
for条件循环语句
for 变量名 in 取值列表
do
命令序列
done
[!CAUTION]
/dev/null
类似于没有回收功能的垃圾箱
while条件循环语句
while 条件测试语句
do
命令序列
done
case条件语句
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
...
*)
默认命令序列
esac
计划任务服务程序
计划任务分为一次性任务和长久性任务
-
一次性计划任务:今晚 11 点 30 分开启网站服务。
-
长期性计划任务:每周一的凌晨 3 点 25 分把/home/wwwroot 目录打包备份为backup.tar.gz。
顾名思义,一次性计划任务只执行一次,一般用于满足临时的工作需求。我们可以用 at命令实现这种功能,只需要写成“at 时间”的形式就可以。如果想要查看已设置好但还未执行的一次性计划任务,可以使用“at -l”命令;要想将其删除,可以用“atrm 任务序号”。在 使用 at 命令来设置一次性计划任务时,默认采用的是交互式方法。
如果我们希望 Linux 系统能够周期性地、有规律地执行某些具体的任务,那么 Linux 系统 中默认启用的 crond 服务简直再适合不过了。
用户身份和文件权限
用户身份和能力
为了方便管理属于同一组的用户,Linux 系统中还引入了用户组的概念。在 Linux 系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且 这个基本用户组只有该用户一个人。如果该用户以后被归纳入其他用户组,则这个其他用户 组称之为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组,从而满 足日常的工作需要。
useradd
命令用于创建新的用户,格式为useradd [选项] 用户名
。
groupadd
命令用于创建用户组,格式为groupadd [选项] 群组名
。
usermod
命令用于修改用户的属性,格式为usermod [选项] 用户名
。
passwd
命令用于修改用户密码、过期时间、认证信息等,格式为passwd [选项] [用户名]
。普通用户只能使用 passwd
命令修改自身的系统密码,而 root 管理员则有权限修改其他所 有人的密码。更酷的是,root 管理员在 Linux 系统中修改自己或他人的密码时不需要验证旧密 码,这一点特别方便。既然 root 管理员可以修改其他用户的密码,就表示完全拥有该用户的 管理权限。
userdel
命令用于删除用户,格式为userdel [选项] 用户名
。
文件权限和归属
尽管在 Linux 系统中一切都是文件,但是每个文件的类型不尽相同,因此 Linux 系统使 用了不同的字符来加以区分,常见的字符如下所示。
-
:普通文件。
d
:目录文件。
l
:链接文件。
b
:块设备文件。 c:字符设备文件。 p:管道文件。