目录
一、常用快捷键
按键 | 说明 |
---|---|
Tab | 补全提示(命令/目录/参数/…) |
Ctrl + c | 强行终止当前程序(但不会使终端退出) |
Ctrl + d | 键盘输入结束 或 退出终端(或者使用命令 exit ) |
Ctrl + s | 暂停当前程序(再次按下任意键恢复运行) |
Ctrl + z | 当前程序放到后台运行(fg 恢复到前台) |
Ctrl + a | 光标移到输入行头(= Home 键) |
Ctrl + e | 光标移到输入行尾(= End 键) |
Ctrl + k | 删除从光标到行末内容 |
Alt + Backspace | 向前删除一个单词 |
Shift + PgUp | 终端显示向上移动 |
Shift + PgDn | 终端显示向下移动 |
↑(方向键上) | 恢复之前输入过的命令 |
二、通配符
2.1 通配符的作用
使用通配符可以代替一个或多个字符,对字符串进行模糊匹配。通配符可代替 文件夹名/文件名,不能替代命令字符(忘记命令字符使用 Tab 键)。
2.2 通配符的原理
终端内输入的通配符由 Shell 处理,Shell 会将其当作路径或文件名在磁盘上搜寻可能的匹配:若有符合要求的匹配存在,则进行代换(路径扩展);否则就将该通配符作为一个普通字符传递给“命令”,再由命令进行处理。
字符 | 说明 |
---|---|
? | 匹配 1 个字符 |
* | 匹配 0 个或多个字符 |
[list] | 匹配 list 中任意一个字符 |
[^list] | 匹配 除了【list 中任意字符】以外的字符 |
[c1-c2] | 匹配 c1~c2 中任意一个字符,如:[1-9]、[a-z] |
{str1,str2,…} | 匹配 str1 或 str2 或 … 中的任意字符串 |
{c1..c2} | 匹配 c1~c2 中全部字符,如:{1..9} |
三、帮助命令
3.1 Linux 命令行下的不同命令
① 内建命令
shell 程序的一部分,包含一些比较简单的 Linux 系统命令。这些命令写在 bash 源码的 builtins 中,由 shell 程序识别并在 shell 程序内部完成运行,通常在 Linux 系统加载运行时 shell 就被加载并驻留在系统内存中。
解析内建命令 shell 不需要创建子进程,因此内建命令的执行速度比外部命令快。如:cd、exit、history 等。
② 外部命令
Linux 系统中的实用程序部分。因为实用程序的功能通常都比较强大,所以包含的程序量也很大。外部命令在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调入内存。
外部命令不包含在 shell 中,但是命令执行的过程还是由 shell 程序控制。外部命令是在 bash 之外额外安装的,通常位于 /bin、/usr/bin、/sbin、/usr/sbin 等目录下。如:ls、vi 等。
命令 | 说明 |
---|---|
type <command> | 区分 command 命令是内建的还是外部的 |
help <command> | 显示 shell 内建命令的简要帮助信息 |
<command> --help | 显示外部命令的简要帮助信息 |
man <command> | 获取 command 命令的详细介绍:使用方式/参数…(不区分内建和外部命令) |
info <command> | 获取 command 命令的详细介绍(比 man 更详细) |
sudo apt-get install info | 安装 inf |
- 信息量:info > man > help
四、目录操作
命令 | 说明 |
---|---|
cd <路径> | 切换目录(change directory) |
cd . | 切换到当前目录 |
cd .. | 切换到上一级目录 |
cd ~ | 切换到 home 目录 |
pwd | 打印当前所在目录(print working directory) |
ls | 列出并显示当前目录下文件(list) |
ls <路径> | 列出并显示目标路径下文件 |
ls -a | 列出所有文件,包括隐藏文件 |
mkdir d1 | 创建一个空目录 d1 |
mkdir -p d1/d2/d3 | 创建多级目录(安装软件、配置安装路径时非常有用) |
五、文件操作
命令 | 说明 |
---|---|
touch f1 | 创建一个名为 f1 的空文件 |
ls -l | 使用较长格式列出当前目录下文件(可查看文件各种信息:权限、大小…) |
cat f1 | 读取文件 f1 内容并打印到终端输出 |
cat -n f1 | 读取文件 f1 内容并显示行号 |
nl f1 | 打印文件 f1 内容并添加行号 |
tac f1 | 倒序显示文件 f1 内容 |
tail f1 | 查看文件 f1 的后面几行 |
tail -n 1 f1 | 查看文件 f1 的最后 1 行(数字 1 可根据需要修改) |
head f1 | 查看文件 f1 的前面几行 |
head -n 1 f1 | 查看文件 f1 的前面 1 行(数字 1 可根据需要修改) |
file f1 | 查看文件 f1 的文件类型 |
六、复制 / 删除 / 移动 / 重命名
命令 | 说明 |
---|---|
cp f1 d1/d2/d3 | 将 f1 文件复制到 d1/d2/d3 目录下 |
cp -r d1 D1 | 将 d1 文件夹复制到 D1 目录下(r/R:递归复制) |
rm f1 | 删除文件 f1 |
rm -f f1 | 强制删除 |
rm -r d1 | 删除目录 d1 |
rm -rf d1 | 强制删除 |
mv f1 d1 | 将文件 f1 移动到 d1 目录下 |
mv <路径>f1 <路径>f2 | 将文件 f1 重命名为 f2 |
rename | 可以批量重命名 |
七、用户操作
7.1 查看用户信息
命令 | 说明 |
---|---|
who am i 或 who mom likes | 查看当前伪终端的用户、伪终端序号、伪终端启动时间 |
whoami | 查看当前登录的用户 |
who -a | 打印能打印的全部 |
who -d | 打印死掉的进程 |
who -m | 等于 am i 和 mom likes |
who -q | 打印当前登录用户的数量及用户名 |
who -u | 打印当前登录用户的登录信息 |
who -r | 打印运行等级 |
7.2 新建 / 切换 / 删除 用户
命令 | 说明 |
---|---|
sudo adduser u1 | 创建新用户 u1,并在 home 目录下创建一个该用户的工作目录 |
sudo useradd u1 | 创建新用户 u1,但不会创建用户密码和工作目录 |
passwd u1 | 设置新用户 u1 的密码 |
su u2 | 切换到用户 u2,需要输入目标用户密码(su - switch user) |
su - u2 | 切换到用户 u2,同时用户的环境变量和工作目录也会跟着切换 |
sudo deluser u2 | 删除用户 u2(保留工作目录) |
sudo deluser u2 --remove-home | 删除用户 u2(删除工作目录) |
八、用户组操作
8.1 什么是用户组
Linux 中每个用户都归属于一个用户组,用户组就是一个或多个用户的集合,同一个用户组的用户共享组内的资源和权限,但同时也拥有自己的私有资源。
命令 | 说明 |
---|---|
groups u1 | 查看用户 u1 所属用户组 |
sudo usermod -G sudo u1 | 将用户 u1 加入 sudo 用户组 |
groupdel g1 | 删除用户组 g1(需要先删除组内用户) |
九、变量操作
9.1 什么是变量
变量就是计算机中用于记录一个值(数值/字符/字符串/…)的符号,这些符号用于不同的运算处理中。大部分的编程语言会区分变量的类型,如:数值、字符、字符串…
9.2 环境变量
环境变量是指在操作系统中用来指定系统运行的一些参数,环境变量的作用域比自定义变量作用域大,如 Shell 的环境变量作用于自身和它的子进程。
在所有 UNIX 和类 UNIX 系统中,每个进程都有各自的环境变量设置。默认情况下,当一个进程被创建时,除创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。
9.3 环境变量 PATH
保存了 Shell 中执行的命令的搜索路径。
命令 | 说明 |
---|---|
declare tmp | 创建一个名为 tmp 的变量(变量名只能是英文字母、数字或_,但不能以数字开头) |
unset tmp | 删除变量 tmp |
tmp=linux | '=' 为赋值符号,将右边的值(这里是字符串 linux)赋给左边的变量 |
$ | 引用一个变量的值 |
tmp=$tmp2 | 将变量 tmp2 的值赋给 tmp 变量 |
echo $tmp | 读取变量 tmp 的值,并在终端输出 |
set | 显示当前 Shell 所有变量:内建环境变量、用户自定义变量、导出的环境变量 |
env | 显示与当前用户相关的环境变量 |
export | 显示从 Shell 中导出成为环境变量的变量 |
export tmp | 将自定义变量 tmp 导出成为环境变量 |
PATH=$PATH:/home/d1/d2 | 添加自定义路径 /home/d1/d2 到 PATH 环境变量(PATH 里的路径以 : 作为分隔符) |
source .zshrc | 修改配置文件 zshrc 后使其立即生效 |
修改已有变量: | |
${变量名#匹配字符串} | 从前向后匹配,删除符合匹配字符串的最短数据 |
${变量名##匹配字符串} | 从前向后匹配,删除符合匹配字符串的最长数据 |
${变量名%匹配字符串} | 从后向前匹配,删除符合匹配字符串的最短数据 |
${变量名%%匹配字符串} | 从后向前匹配,删除符合匹配字符串的最长数据 |
${变量名/旧字符串/新字符串} | 将符合旧字串的第一个字串替换为新字串 |
${变量名//旧字符串/新字符串} | 将符合旧字串的全部字串替换为新字串 |
十、搜索文件
命令 | 说明 |
---|---|
whereis | 不从硬盘中查找,从数据库中查询(只能搜索二进制文件 -b、man 帮助文件 -m、源代码文件 -s) |
locate | 查找指定目录下的不同文件类型 |
which | 从环境变量 PATH 指定的路径中搜索命令并返回第一个搜索到的结果 |
find | 通过文件类型、文件名、文件属性(如:时间戳、权限…)进行搜索 |
十一、文件打包、压缩、解压
压缩文件格式 | 说明 |
---|---|
.zip | zip 程序打包压缩的文件 |
.rar | rar 程序压缩的文件 |
.7z | 7zip 程序压缩的文件 |
.tar | tar 程序打包的文件(未压缩) |
.gz | gzip 程序压缩的文件 |
.xz | xz 程序压缩的文件 |
.bz2 | bzip2 程序压缩的文件 |
.tar.gz | tar 打包,gzip 程序压缩的文件 |
.tar.xz | tar 打包,xz 程序压缩的文件 |
.tar.bz2 | tar 打包,bzip2 程序压缩的文件 |
.tar.7z | tar 打包,7z 程序压缩的文件 |
11.1 zip 压缩工具
① 使用 zip 打包压缩
#压缩包默认放到当前目录下
zip xxx.zip <需压缩文件的路径>
参数 | 说明 |
---|---|
-r | 递归打包,打包文件夹需要添加该参数 |
-9 | 设置压缩级别(1~9) |
-q | 安静模式(不向屏幕输出信息) |
-o | 输出文件,后面必须跟着打包输出的文件名 |
-x | 排除文件夹内其它 zip 文件,避免其它 zip 文件也被打包进本次压缩文件内 |
-e | 创建加密压缩包 |
② 使用 zip 解压
#默认解压到当前目录下
unzip xxx.zip
参数 | 说明 |
---|---|
-q | 安静模式 |
-d | 指定解压目录,后面必须跟着目标解压目录(如: -d /home) |
-l | 不解压,仅查看压缩包内容 |
11.2 tar 打包工具
① 使用 tar 打包
# tar包默认放到当前目录下
tar -cf xxx.tar <需打包文件的路径>
参数 | 说明 |
---|---|
-c | 创建一个 tar 包文件 |
-f | 指定创建的文件名,后面必须跟着打包输出文件名 |
-P | 保留绝对路径 |
② 使用 tar 解包
#默认解包到当前目录下
tar -x -f xxx.tar
参数 | 说明 |
---|---|
-x | 解包一个 tar 文件 |
-f | 指定解包文件名,后面必须跟着需要解包的文件名 |
-C | 指定解包目录,后面必须跟着目标解包目录(如 -C /home) |
-t | 不解包,仅查看 tar 包内容 |
③ 使用 tar 压缩、解压
tar 原本只是一个打包工具,但同时还支持 7z、gzip、xz、bzip2 等工具,这些压缩工具本身只能实现对文件或目录的压缩(目录压缩:单独压缩目录中的文件),但没有实现对文件的打包压缩。
由于 tar 支持 7z、gzip、xz、bzip2 等压缩工具,所以在创建 tar 文件和解包 tar 文件的基础上添加不同参数,就能使用不同的压缩工具来压缩和解压文件,例:
tar -c -z -f xxx.tar.gz /home
参数 | 对应压缩文件格式 |
---|---|
-z | .tar.gz |
-j | .tar.bz2 |
-J | .tar.xz |
11.3 查看打包后文件大小
du -h xxx.zip
十二、文件操作与磁盘管理
命令 | 说明 |
---|---|
df | 查看磁盘容量 report file system disk space usage |
du | 查看目录容量 estimate file space usage |
dd | 转换和复制文件 |
fdisk | 为磁盘分区 |
mkfs | 格式化磁盘 |
mount | 挂载 |
unmount | 卸载 |
12.1 dd 命令
dd 命令用于转换和复制文件,但 dd 的复制不同于 cp 。在 Linux 内一切即文件。无论是硬件的设备驱动(如 硬盘)还是特殊设备文件(如 /dev/zero 和 /dev/random)都像普通文件一样,只是在各自的驱动程序中实现对应的功能。dd 命令可以读取或写入这些文件。所以,dd 命令可以用于备份硬件的引导扇区、获取一定数量的随机数据或空数据等。
dd 的命令行选项格式为 选项=值。dd 默认从标准输入中读取,写入到标准输出中,但可以使用选项 if(input file - 输入文件)和 of(output file - 输出文件)改变。
12.2 使用 dd 命令从标准输入读入用户输入,再输出到标准输出或一个文件中
命令 | 说明 |
---|---|
dd of=test bs=10 count=1 | 输出到文件 test |
dd if=/dev/stdin of=/dev/stdout bs=10 count=1 | 输出到标准输出 |
参数 | |
bs | block size,用于指定块大小(缺省单位为 Byte,也可指定 K M G 等单位) |
count | 指定块数量 |
十三、任务计划 crontab
13.1 什么是 crontab
crontab 命令常见于 Unix 和类 Unix 操作系统中,用于设置周期性被执行的指令。通过 crontab 命令,可以在固定的间隔时间执行指定的系统指令或 shell 脚本。
crontab 命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。通常,crontab 储存的指令被守护进程激活,crond 为其守护进程,crond 常在后台运行,每分钟检查一次是否有预定的作业需要执行。
命令 | 说明 |
---|---|
sudo cron -f & | 启动 crontab |
crontab -e | 添加一个计划任务 |
crontab -r | 删除任务 |
crontab -l | 查看添加的任务 |
- 了解更多 crontab:鸟哥的 Linux 私房菜 -- 例行性工作排程的创建
十四、命令执行顺序控制
命令 | 说明 |
---|---|
命令1;命令2;命令3 | 顺序执行多条命令 |
命令1 && 命令2 | 选择性执行命令: 如果 命令1 的执行结果返回 0 则执行 命令2 ,否则不执行 |
命令1 || 命令2 | 选择性执行命令: 如果 命令1 的执行结果返回 ≠0 则执行 命令2 ,否则不执行 |
echo $? | 获取上一次命令的返回结果 |
- 执行结果不是终端输出的内容,而是命令执行状态的结果。可通过 $? 环境变量获取上一次命令的返回结果
- || 和 && 控制效果相反,两者可结合使用
十五、管道
15.1 什么是管道
管道是一种通信机制,通常用于进程间的通信(也可通过 socket 进行网络通信)。管道表现出的形式就是将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。
管道分为匿名管道和具名管道(这里将不会讨论在源程序中使用系统调用创建并使用管道的情况,它与命令行的管道在内核中实际都是采用相同的机制)。匿名管道在命令行中用 |
表示;具名管道简单来说就是有名字的管道,通常只会在源程序中用到具名管道。
- 经常使用管道的命令:
命令 | 说明 |
---|---|
cut | 打印每一行的某一字段 |
grep | 在文本或 stdin 中查找匹配字符串 |
wc | 统计并输出一个文件中行、单词和字节的数目 |
sort | 将输入按照一定方式排序,然后再输出 |
uniq | 过滤或输出重复行 |
history | 查看最近执行过的命令 |
十六、简单文本处理
16.1 tr 命令
#删除或转换一段文本信息中的某些文字
tr <option>…set1 <set2>
命令 | 说明 |
---|---|
tr -d 'abc' | 删除一段文本信息中所有的 'a' 'b' 'c' |
tr -s 'a' | 删除一段文本信息中连续并重复的 'a' |
tr '[:lower:]' '[:upper:]' | 将一段文本全部转换为大写 |
16.2 col 命令
# Tab 和 空格键 转换
col <option>
命令 | 说明 |
---|---|
col -x | 将 Tab 转换为 空格 |
col -h | 将 空格 转换为 Tab |
16.3 join 命令
#将两个文件中包含相同内容的那一行合并在一起
join <option>… f1 f2
option | 说明 |
---|---|
-t | 指定分隔符,默认为空格 |
-i | 忽略大小写的差异 |
-1 | 指明第一个文件要用哪个字段来对比,默认对比第一个字段 |
-2 | 指明第二个文件要用哪个字段来对比,默认对比第一个字段 |
16.4 paste 命令
#与 join 命令类似,但 paste 是在不对比数据的情况下,简单地将多个文件合并在一起,默认以Tab隔开
paste <option> file…
命令 | 说明 |
---|---|
paste -d | 指定合并的分隔符,默认为 Tab |
paste -s | 不合并到一行,每个文件为一行 |
十七、数据流重定向
命令/操作 | 说明 |
---|---|
> | 将标准输出导向一个文件 |
>> | 将标准输出追加到一个文件 |
tee | 同时重定向到多个文件 |
exec | 永久重定向 |
十八、软件下载与安装
18.1 Linux 系统下软件安装的四种方式
- 在线安装
- 从磁盘安装 deb 软件包
- 从二进制软件包安装
- 从源代码编译安装(略~)
18.2 在线安装 - apt 工具
apt-get 命令 | 说明 |
---|---|
sudo apt-get update | 更新本地软件包数据库 |
sudo apt-get install <软件名> | 安装软件包 |
sudo apt-get --reinstall install <软件名> | 重新安装软件包,如:系统被破坏、一些错误的配置导致软件无法正常工作… |
sudo apt-get upgrade | 升级所有已安装的软件包 |
sudo apt-get full-upgrade | 完全升级已安装的软件包 |
sudo apt-get remove <软件名> | 移除已安装的软件包(包括与被移除软件包有依赖关系的软件包,但不包含软件包的配置文件) |
sudo apt-get autoremove | 移除之前被其他软件包依赖,但现在不再被使用的软件包 |
sudo apt-get purge <软件名> | 完全移除软件包(包括软件包的配置文件) |
sudo apt-get clean | 移除下载到本地的已经安装的软件包,默认保存在 /var/cache/apt/archives/ |
sudo apt-get list | 生成软件包列表 |
sudo apt-get search <软件名> | 搜索软件包 |
sudo apt-get show <软件名> | 显示软件包具体信息,如:版本号、安装大小、依赖关系等 |
source ~/.zshrc | 如果安装一个软件后,无法立即使用 Tab 键补全该命令,可执行该命令后再进行尝试 |
apt-get 参数 | 说明 |
-y | 自动回应是否安装软件包的选项,在一些自动化安装脚本中非常有用 |
-s | 模拟安装 |
-q | 安静安装方式,指定多个 q 或 -q=#(#表示数字,用于设定静默级别),在不想要安装过程中屏幕输出过多内容时非常有用 |
-f | 修复损坏的依赖关系 |
-d | 仅下载,不安装 |
--reinstall | 重新安装已经安装但可能存在问题的软件包 |
--install-suggests | 同时安装 APT 给出的建议安装的软件包 |
18.3 从磁盘安装 deb 软件包 - dpkg 工具
命令 | 说明 |
---|---|
sudo dpkg -i xxx.deb | 安装指定 deb 包 |
sudo dpkg -R /d1 | 后面接目录名,安装该目录下的所有 deb 包 |
sudo dpkg -r xxx | 移除某个已安装的软件包 |
sudo dpkg -I xxx.deb | 显示 deb 包文件的信息 |
sudo dpkg -s xxx | 显示已安装软件的信息 |
sudo dpkg -S xxx | 搜索已安装的软件包 |
sudo dpkg -L xxx | 显示已安装软件包的目录信息 |
18.4 从二进制包安装
① 将下载的二进制包解压后放到合适的目录下
② 将包含【可执行的主程序文件】的路径添加到环境变量 PATH
安装完成!
十九、进程管理
命令 | 说明 |
---|---|
top | 实时查看进程的状态 |
ps | 静态查看当前进程的信息 |
pstree | 查看当前活跃进程的树形结构 |
kill | 操作进程的结束或者重启 |
renice | 修改已经存在的进程的优先级 |