Linux 基础操作实践笔记
终端和文件初级操作
登录 Linux 终端
1. 输入账号密码登录
2. 使用 shell
help
命令:查看命令的帮助列表。
1 | help [option] <command> |
man
命令:进入命令的帮助手册页面,比help
显示的信息更详细。
1 | man [option] <command> |
查看系统的使用者信息(登录名,终端号和登录时间)和当前登录的用户信息:
1 | who |
date
命令:显示当前的系统日期和时间。
cal
命令:显示指定年月的日历表。
1 | cal <month> <year> |
tty
命令:显示当前连接到标准输入的终端的文件名。
file
命令:用于辨识文件类型。
1 | file [option] <filename> |
3. 退出当前用户
执行[Ctrl-D]
、exit
或logout
命令退出当前终端。
vi 初级操作
1. 打开 vi
1 | vi <filename> |
2. 文件录入和修改
切换至命令模式:esc 键。
- 使用 “u” 命令撤销上一步操作,使用 “r” 命令重做上一步操作。
切换至插入模式:
- 按 “i” 进入插入模式后,从光标当前位置开始输入文件。
- 按 “a” 进入插入模式后,从目前光标所在位置的下一个位置开始输入文字。
- 按 “o” 进入插入模式后,插入新的一行,并从行首开始输入文字。
切换至末行模式:按 “:” 键。
新建文件:
1 | :open <filename> |
保存文件:
1 | :w <filename> |
3. 内容查找
输入 “/” 切换至向下查找模式,再输入要查找的字符串并按回车确认,“n” 表示查找下一个字符串(和搜索方向相同),“N” 表示查找上一个字符串(和搜索方向相反)。
输入 “?” 切换至向上查找模式,再输入要查找的字符串并按回车确认,“n” 表示查找上一个字符串(和搜索方向相同),“N” 表示查找下一个字符串(和搜索方向相反)。
4. 删除和替换
行数 + “dd” 命令:删除从光标开始的几行。
字符数 + “x” 命令:删除从光标开始的几个字符。
使用 “R” 命令进入替换模式,此时新输入的字符将替代光标之下的当前字符。
使用 “r” 命令进入单字符替换模式,在替代一次字符后,自动返回常规模式。
5. 退出 vi
直接退出:
1 | :q |
保存修改后退出:
1 | :wq <filename> |
不保存修改强制退出:
1 | :q! |
目录和文件初级操作
查看根目录中的系统目录:
1 | ls / |
- /bin:二进制文件目录,存放着最经常使用的命令。
- /boot:存放启动 Linux 时使用的一些核心文件,包括一些链接文件以及镜像文件。
- /dev:设备文件目录,存放着 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
- /etc:存放所有的系统管理所需要的配置文件和子目录。
- /home:存放用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
- /root:系统管理员的主目录。
- /var:存放在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下,包括各种日志文件。
- /usr:unix shared resources 的缩写,存放共享资源。
- /sys:安装了 Linux 2.6 内核中新出现的文件系统 sysfs。
只有管理员用户可以在根目录下新建和删除目录。
ls
命令:用于显示指定工作目录下之内容。
1 | ls [option] <filenames...> |
-a
:显示所有文件及目录(包括隐藏文件)。-l
:以长格式显示文件和目录信息,包括权限、所有者、大小、创建时间等。-d
:只列出目录(不递归列出目录内的文件)。-R
:递归显示目录中的所有文件和子目录。-i
:显示文件的索引节点。
cd
命令:用于改变当前的工作目录,切换到指定的路径。
cd ..
:切换到上一级目录。cd
或cd ~
:切换到当前用户的主目录。cd ~<username>
:切换到该用户的主目录。cd -
:返回进入此目录之前所在目录。
pwd
命令:显示当前所在工作目录的全路径。
mkdir
命令:创建子目录。
1 | mkdir [-p] dirName |
-p
可以确保目录名称存在,在不存在时新建一个。
rmdir
命令:删除空的目录(只有 . 文件和 … 文件)。
1 | rmdir [-p] dirName |
-p
确保当子目录被删除后也成为空目录的话,顺便一并删除。
rm
命令:删除文件和目录。
1 | rm [option] <filenames...> |
-i
:删除前逐一询问确认。-f
:即使原档案属性设为只读,也直接删除,无需确认。-r
:将目录及其中文件逐一删除。
cat
命令的用法:
显示文件内容:
1 | cat file |
连接多个文件,并按顺序显示:
1 | cat file1 file2 |
创建文件:
1 | cat > file |
追加内容到文件:
1 | cat >> file |
复制文件:
1 | cat source > destination |
文件系统和 shell 基础
建立文件目录
利用cd
和mkdir
命令建立如下所示文件目录:
1 | ~ |
1 | cd ~ |
查看和拼接文本
vi 在编辑文本时导入其它文件的内容:
1 | :r <filename> |
在 vi 的命令模式下快速添加空白行:
- 行数 + “o” 命令:在当前行的下面插入多个空白行。
- 行数 + “O” 命令:在当前行的上面插入多个空白行。
shell 中不同查看文件内容的方式:
1 | cat [option] <filename> |
使用more
和less
命令可以进入文本的交互界面,逐页查看文本内容,more
会在 shell 上打印文本内容,而less
不会。
head
命令:输出文本的开头 N 行内容。
1 | head -n [N] |
tail
命令:输出文本的末尾 N 行内容。
1 | tail -n [N] |
head
和tail
命令可以使用管道符结合在一起,例如:将源文件的 13 - 15 行写入至别的文件中:
1 | head -n 15 source | tail -n 3 > destination |
文件的查找和改名
mv
命令:移动目录及目录下的子文件,或对文件进行改名。
1 | mv <filename> <dir> |
使用find
命令搜索所有 .c 扩展名的文件,并保存搜索结果:
1 | find -type f -name "*.c" > destination |
为所有 AB 开头,x 结尾的文件添加 .txt 扩展名:
方法一:使用find
的-exec
参数,搭配mv
或rename
1 | find -name "AB*x" -exec mv {} {}.txt \; |
方法二:使用循环命令
1 | for file in AB*x; \ |
vi 和 shell 命令操作
vi 和文本操作
在 vi 中快速输入重复字符的方式: 在命令模式下,输入要插入的字符数量,然后输入 “a”,“i” 或 “o”进入插入模式,输入字符,退出插入模式后将会自动输入指定个数的重复字符。
cut
命令:用于从文件的每一行剪切内容并将其写至标准输出。例如,使用cut
命令显示文件中每行的前 5 个字符的方法如下:
1 | cut -c 1-5 <filename> |
默认情况下,
cut
命令认为文本中域分隔符是制表符。
paste
命令:用于将两个文件以列对列的形式进行合并。
1 | paste file1 file2 |
-d
:设定自定义分隔符。-s
:将每个文件粘贴成一行。
wc
命令:用于统计文件中的字符信息。
-l
:打印文件中的行数。-w
:打印文件中的单词数。-c
:显示文件中的字节数。-m
:打印文件中的字符数。-L
:仅打印文件中最长行的长度。
默认情况下,
wc
命令认为单词之间的分隔符是空格或制表符。
如果想要查看 vi 中某个选项的当前值,可以使用:set option?
命令。使用以下命令可以设置布尔值选项:
命令 | 描述 |
---|---|
:set option | 打开选项 |
:set nooption | 关闭选项 |
:set option! | 反转选项 |
:set invoption | 反转选项 |
:set option& | 将选项设置为默认值 |
shell 命令操作
echo
命令的用法:
使用echo
命令向 shell 中输出以下信息:
1 | Hello World. |
对应的 shell 代码如下:
1 | echo Hello World. |
-e
:启用反斜杠转义符。-n
:禁用echo
执行后的自动换行。
使用echo
输出变量:
1 | var=variable |
shell 提示符: shell 的内置环境变量 PS1(prompt string one) 定义了命令行提示符的参数。
转义序列 | 显示内容 |
---|---|
\u | 当前用户的名称 |
\h | 当前机器的主机名 |
\W | 最底层的工作目录 |
\$ | 对 root 用户显示 #,普通用户显示 $ |
\s | 当前运行的 shell 名称 |
\w | 工作目录的完整路径 |
\d | 显示当前日期 |
\t | 显示当前时间 |
\! | 显示当前命令序号 |
下面演示了 PS1 的一种修改方法:
1 | PS1="\u@\n\W\!" |
alias
命令:用于设定指令的别名。例如为指令rm -i
创建别名del
的方法如下:
1 | alias del='rm -i' |
修改用户 .profile 配置文件:
检查目录中是否有 .profile 文件,没有则创建:
1 | find .profile |
修改 .profile 文件,使用户每次登录时都显示当前日期:
1 | echo "Hello World" |
shell 后台进程:
在每条指令的最后加上 & 符号可以使该任务在后台执行。例如,创建后台进程vi numbers
,并查看其 ID 的方法如下:
1 | vi numbers & |
kill
命令:根据进程 ID 强制终止该进程。
1 | kill [signal] <pid> |
执行kill -l
可以显示所有可用信号,以下是几个常用信号:
- 1 (HUP):重新加载进程。
- 9 (KILL):杀死一个进程。
- 15 (TERM):正常停止一个进程(默认信号)。
文本的排序与查找
sort
命令:可针对文本文件的内容,以行为单位进行排序。
1 | sort <filename> [option] |
[-k field1[,field2]]
:以指定的列进行排序。-r
或-rk
:以相反的顺序进行排序。
grep
命令:可针对文本文件的内容,以行为单位进行排序。
1 | grep [option] "pattern" <filename> |
其中pattern
表示要查找的字符串或正则表达式。
-i
:忽略大小写进行匹配。-v
:反向查找,只打印不匹配的行。-n
:显示匹配行的行号。-r
:递归查找子目录中的文件。-l
:只打印匹配的文件名。-c
:只打印匹配的行数。
尝试编写 shell 脚本
创建一个 shell 脚本 sum,要求如下:
- 使用方式为:
sum a b
,其中 a 和 b 代表两个整数,a < b; - 功能是计算从 a 到 b 的累加和;
- 在屏幕上显示:a + … + b = 累加和;
例如sum 57 90
的输出结果为57 + ... + 90 = 2499
。
1 | sum=0 |
执行该脚本:
1 | bash sum 57 90 |
shell 脚本编程
命令行参数
命令行参数又称位置变量,是指用户输入命令时后面跟的数据项,用空格分隔。
变量 | 含义 |
---|---|
$0 | 脚本文件名 |
$1, $2,…, $9 | 第1个到第9个命令行参数 |
$# | 命令行参数的个数 |
$@ | 所有命令行参数 (每个参数都用一对双引号括起) |
$? | 最后一个命令的退出状态 |
$* | 所有命令行参数 (将所有参数认为是一个字段) |
$$ | 正在执行进程的 ID(PID) |
算术运算
expr
命令:提供整数算术运算功能,对数字和非数字字符串进行计算,会将参数作为表达式,计算表达式值输出到标准输出。
1 | x=10 |
let
命令:进行整数计算,并将表达式的值赋值给变量。
1 | x=100 |
let
命令可以简写为双括号(( expression ))
。
条件判断
数值判断:
操作符 | 含义 |
---|---|
-eq | 等于 |
-ne | 不等于 |
-gt | 大于 |
-ge | 大于等于 |
-lt | 小于 |
-le | 小于等于 |
字符串判断:
操作符 | 含义 |
---|---|
= | 相等 |
!= | 不相等 |
-z | 长度为零 |
-n | 长度不为零 |
文件判断:
操作符 | 含义 |
---|---|
-e | 文件存在 |
-r | 文件存在且可读 |
-w | 文件存在且可写 |
-x | 文件存在且可执行 |
-s | 文件存在且至少有一个字符 |
-d | 文件存在且为目录 |
-f | 文件存在且为普通文件 |
-c | 文件存在且为字符型特殊文件 |
-b | 文件存在且为块特殊文件 |
if-then-elif-else 结构:
1 | if [ condition_1 ] |
test
命令:计算作为其参数的表达式的真假。
1 | if test "$variable" = value |
循环结构
for-in-do-done 结构: 按指定次数执行一系列命令。
1 | for variable in sequence |
while-do-done 结构: 条件为真则继续执行。
1 | while [ condition ] |
until-do-done 结构: 条件为假则继续执行。
1 | until [ condition ] |
脚本编写示例
(一)编写一个 shell 脚本,要求如下:
- 屏幕显示 “Please enter the first integer:” 然后接收用户的输入;
- 屏幕显示 “Please enter the second integer:” 然后接收用户的输入
- 屏幕显示 “Please enter the third integer:” 然后接收用户的输入
- 之后显示最大的整数。
1 | !/bin/bash |
脚本第一行的
#!/bin/bash
用于指定执行脚本的 shell 路径,如果不写这行则使用当前用户的默认 shell。
(二)编写一个 shell 脚本,要求如下:
- 屏幕显示 “Please input a username:” 然后键盘输入一个用户名;
- 如果该用户存在,显示 “[该用户名]'s shell is [该用户的默认 shell]”;
- 如果不存在,则显示 “[该用户名] not exists.”
1 | !/bin/bash |
/dev/null 是一个特殊的文件,被称为 “空设备”,将输出重定向至此可以使该输出被丢弃。
在此处,我使用
getent
命令来获取用户的 passwd 条目,并使用awk
命令来提取最后一列,即为该用户的默认 shell。
(三)编写一个 shell 脚本,要求如下:
- 判断 exp 目录下是否存在目录 FILE,如果存在则先删除再新建,否则新建;
- 在 FILE 目录下,新建 100 个文件,文件名依次为 file001 至 file100;
- 使用 tar 命令打包并压缩这 100 个文件为 allfile.tar.gz,将该文件移动到 exp 目录下;
- 查看 allfile.tar.gz 文件的权限,并将其权限修改为 user 可读可写可执行,group 和 other 可读。
1 | !/bin/bash |
chmod
命令用于更改文件权限,命令中字母的含义如下:
对象 | 作用对象 |
---|---|
u | 所有者用户 |
g | 组用户 |
o | 其它用户 |
权限 | 权限种类 |
r | 读权限 |
w | 写权限 |
x | 执行权限 |
- | 无权限 |
操作符 | 对权限进行的操作 |
+ | 赋予权限 |
- | 取消权限 |
= | 设置权限 |
chmod
命令也可以使用八进制语法,每三位数字为一组,分别代表所有者、组用户和其它用户的权限。八进制代码的含义如下:
代码 | 权限 | rwx |
---|---|---|
7 | 读 + 写 + 执行 | rwx |
6 | 读 + 写 | rw- |
5 | 读 + 执行 | r-x |
4 | 只读 | r– |
3 | 写 + 执行 | -wx |
2 | 只写 | -w- |
1 | 只执行 | –x |
0 | 无权限 | — |
(四)编写一个 shell 脚本,要求如下:
- 判断当前用户是否为 root,如果为 root 则输出 “Current user : root”;否则输出 “Current user : [用户名]”;
- 检查当前目录是否为用户主目录,是当前用户主目录则输出 “You are in the home directory!”;如果不是当前用户主目录,则进入当前用户主目录,然后输出 “You have gone back to your home directory!”;
- 检测工作目录中是否存在 bin 子目录,如果存在则先删除该目录,再重新创建 bin 目录,并输出 “bin has been recreated!”;否则直接创建 bin 目录后输出 “bin has been created!”;
- 使用
set
命令将date
命令执行的结果设置成位置参数,然后通过位置参数判断今天是否为休息日(周六或周日),如果是则输出 “Today is a weekend!”;否则输出 “Today is [英文星期几的前三位缩写(如Wed)]”。
1 | !/bin/bash |
附:Linux 命令本
ls
命令用于显示指定工作目录下的内容(列出目前工作目录所含之文件及子目录)。
1 | ls [-alrtAFR] [name...] |
其中[-alrtAFR]
中每个字母代表一个选项,[name...]
表示指定的工作目录。
选项:
-a
:显示所有文件及目录。-l
:除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出。-r
:将文件以相反次序显示(原定依英文字母次序)。-t
:将文件依建立时间之先后次序列出。-A
:同 -a,但不列出 “.”(目前目录)及 “…”(父目录)。-R
:若目录下有文件、则以下之文件亦皆依序列出。
date
命令可以用来显示或设定系统的日期与时间。
1 | date [OPTION]... [+FORMAT] |
选项:
-d
:通过字符串显示时间格式。-r
:显示文件的上次修改时间。-s
:根据字符串设置系统时间。-u
:显示或设置协调世界时(UTC)。
who
命令用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者 ID、使用的终端机、从哪边连上来的、上线时间、呆滞时间、CPU 使用量、动作等等。
1 | who [-husfV] [user] |
选项:
-i
:显示闲置时间。-q
:只显示登入系统的帐号名称和总人数。--help
:在线帮助。--version
:显示版本信息。
cal
命令可以用来显示公历(阳历)日历。
1 | cal [参数][月份][年份] |
如只有一个参数、则表示年份(1-9999);如有两个参数、则表示月份和年份。
-3
:显示前一月、当前月、后一月三个月的日历。-m
: 显示星期一为第一列。-j
:显示在当前年第几天。-y [year]
:显示当前年份的日历。
help
命令用于显示 shell 内部命令的帮助信息。
- 查看内部命令:
1 | help [参数] 内部命令 |
- 查看外部命令:
1 | 命令 --help |
选项:
-d
:输出每个命令的简短描述。-s
:输出短格式的帮助信息。-m
:以伪man
手册的格式显示帮助信息。
man
命令可以查看 Linux 中的命令帮助、配置文件帮助和编程帮助等信息。
1 | man [选项] [参数] |
选项:
-a
:在所有的man
帮助手册中搜索。-f
:等价于whatis
命令,显示给定关键字的简短描述信息。-P
:指定内容时使用分页程序。-M
:指定man
手册搜索的路径。
pwd
(英文全拼:print work directory)命令用于显示工作目录、执行pwd
指令可立刻得知您目前所在的工作目录的绝对路径名称。
1 | pwd [--help][--version] |
选项:
--help
:在线帮助。--version
:显示版本信息。
cd
(英文全拼:change directory)命令用于切换当前工作目录。
1 | cd [dirName] |
其中[dirName]
为要切换的目标目录。
mkdir
(英文全拼:make directory)命令用于创建目录。
1 | mkdir [-p] dirName |
选项:
-p
:确保目录名称存在,不存在的话就新建一个。
rmdir
(英文全拼:remove directory)命令用于删除空的目录。
1 | rmdir [-p] dirName |
选项:
-p
:若子目录被删除后使它也成为空目录的话,则顺便一并删除。
cat
(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
1 | cat [选项] [文件名] |
-n
:由 1 开始对所有输出的行数编号。-b
:和-n
相似,只不过对于空白行不编号。-s
:当遇到有连续两行以上的空白行,就代换为一行的空白行。-E
: 在每行结束处显示 $。-T
或--show-tabs
: 将 TAB 字符显示为 ^I。
rm
(英文全拼:remove)命令用于删除一个文件或者目录。
1 | rm [options] name... |
cp
(英文全拼:copy file)命令主要用于复制文件或目录。
- 创建文件副本:
1 | cp 文件名1 文件名2 |
- 将文件复制到其它目录:
1 | cp 文件名 目录名 |
- 将多个文件复制到其它目录:
1 | cp 文件名1 文件名2 ... 目录名 |
mv
(英文全拼:move file)命令用来为文件或目录改名、或将文件或目录移入其它位置。
- 将文件移到其它目录:
1 | mv 文件名 目录 |
- 改变文件名:
1 | mv 文件名1 文件名2 |
- 将文件批量移动到其它目录:
1 | mv 文件名1 文件名2 ... 目录名 |
选项:
-b
: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。-i
: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件。-f
: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。-u
:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
ln
(英文全拼:link files)命令为某一个文件在另外一个位置建立一个同步的链接。
1 | ln [参数] [源文件] [目标文件] |
选项:
-b
:删除、覆盖以前建立的链接。-d
:允许超级用户制作目录的硬链接。-f
:强制执行。-i
:交互模式,文件存在则提示用户是否覆盖。-n
:把符号链接视为一般目录。-s
:软链接(符号链接)。-v
:显示详细的处理过程。
wc
命令用于计算字数。
1 | wc [选项] [文件...] |
选项:
-c
:只显示字节数。-l
:显示行数。-w
或--words
只显示字数。--help
:在线帮助。--version
:显示版本信息。
find
命令用来在指定目录下查找文件。
1 | find [路径名] [搜索选项] [路径选项] |
选项:
-atime n
: 在过去 n 天内被读取过的文件。-mtime n
: 在过去 n 天内修改过的文件。-name
: 文件名称符合 name 的文件。-size n
: 根据文件大小查找文件。-type c
: 文件类型是 c 的文件。(f: 一般文件,d: 目录,c: 字型装置文件,b: 区块装置文件)
head
命令可用于查看文件的开头部分的内容。
1 | head [参数] [文件] |
选项:
-q
:隐藏文件名。-v
:显示文件名。-c<数目>
:显示前 <数目> 个字节数。-n<行数>
:显示前 <行数> 行。
tail
命令用于显示文件尾部内容。
1 | tail [参数] [文件] |
选项:
-c<数目>
:显示后 <数目> 个字节数。-n<行数>
:显示后 <行数> 行。
cut
命令用于显示每行从开头算起 num1 到 num2 的文字。
1 | cut [选项] [文件名] |
选项:
-c
:以字符为单位进行分割。-d
:自定义分隔符,默认为制表符。-f
:与-d
一起使用,指定显示哪个区域。
paste
命令用于合并文件的列。
1 | paste [选项] [文件...] |
选项:
-d<间隔字符>
:用指定的间隔字符取代跳格字符。-s
:串列进行而非平行处理。[文件...]
:指定操作的文件路径。--help
:在线帮助。
more
命令可以按页来查看文件的内容,还支持直接跳转行等功能。
1 | more 文件名 |
选项:
-c
:先清屏,然后显示要查看的文件或日志内容。-d
:显示提示 “Press space to continue,‘q’ to quit(按空格键继续,按q键退出)”。-lines
:每屏显示的行数。+line-number
:从第 line-number 行开始显示。+/pattern
:从包含 pattern 的行的上两行开始显示。
less
命令可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。
1 | less [参数] 文件 |
选项:
-e
:当文件显示结束后,自动离开。-g
:只标记最后搜索的关键词。-i
:忽略搜索时的大小写。-N
:显示每行的行号。
echo
命令可以将消息参数显示在用户终端上。
1 | echo string |
选项:
-n
:禁止换行(输出后不换行)。-e
: 解释反斜杠引导的转义字符。
转义字符:
\n
:换行。\a
:警报(响铃)。\b
:回退。\c
:禁止换行。\f
:换页。\t
:水平制表符。\v
:垂直制表符。
alias
命令用于设置指令的别名。
1 | alias [别名]=[指令名称] |
kill
命令用于中断执行中的程序或工作。
1 | kill [-s <信息名称或编号>] [程序] |
选项:
-l <信息编号>
:若不加 <信息编号> 选项,则 -l 参数会列出全部的信息名称。-s <信息名称或编号>
:指定要送出的信息。[程序]
:[程序]
可以是程序的 PID 或是 PGID,也可以是工作编号。
set
命令可以查看当前使用的 shell 变量。
1 | set [选项] |
选项:
-a
:标示已修改的变量,以供输出至环境变量。-b
:使被中止的后台程序立刻回报执行状态。-d
:shell预设会用杂凑表记忆使用过的指令,以加速指令的执行,使用-d
参数可取消。-e
:若指令传回值不等于 0,则立即退出 shell。-f
:取消使用通配符。
unset
命令用于删除变量或函数。
1 | unset [选项] [变量或函数名称] |
选项:
-f
:仅删除函数。-v
:仅删除变量。
sleep
命令可以用来将目前动作延迟一段时间。
1 | sleep [选项] [number] |
选项:
--help
: 显示辅助讯息。--version
: 显示版本编号。[number]
: 时间长度,后面可接 s、m、h 或 d(其中 s 为秒,m 为分钟,h 为小时,d 为天数)。
ps
(英文全拼:process status)命令用于显示当前进程的状态。
1 | ps [选项] |
选项:
-A
:列出所有的进程。-w
:显示加宽,可以显示较多的讯息。-au
:显示较详细的讯息。-aux
或aux
:显示所有包含其他使用者的进程。-ef
:和-aux
类似,但显示风格不同。
su
(英文全拼:switch user)命令用变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。
1 | su [选项] [用户名] |
选项:
-
:同时切换到新用户的工作环境。c [命令]
:变更帐号执行命令后再变回原来使用者。
tee
命令用于读取标准输入的数据,并将其内容输出成文件。
1 | tee [选项] [文件] |
选项:
-a
:附加到既有文件的后面,而非覆盖它。-i
:忽略中断信号。
sort
命令用于将文本文件内容加以排序。
1 | sort [选项] [文件] |
选项:
-b
:忽略每行前面开始出的空格字符。-c
:检查文件是否已经按照顺序排序。-d
:排序时,处理英文字母、数字及空格字符外,忽略其他的字符。-f
:排序时,将小写字母视为大写字母。-n
:依照数值的大小排序。-r
或-rk
:以相反的顺序进行排序。
chmod
(英文全拼:change mode)命令是控制用户对文件的权限的命令。
1 | chmod [选项] [文件] |
选项:
-c
: 若该文件权限确实已经更改,才显示其更改动作。-f
: 若该文件权限无法被更改也不要显示错误讯息。-v
: 显示权限变更的详细资料。-R
: 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)。
test
命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
1 | test num1 逻辑运算符 num2 |
选项:
-eq
:判断 num1 与 num2是否相等。-ne
:判断 num1 与 num2 是否不等。-gt
:判断 num1 是否大于 num2。-lt
:判断 num1 是否小于 num2。=
:判断 string1 是否与 string2 相同.-n
:判断 string 是否包含字符(长度非零)。-z
:判断 string 是否为空串(长度为零)-f
:判断文件 filename 是否存在并且是普通文件。-d
:判断文件 filename 是否存在并且是一个目录。
read
命令用于从标准输入读取数值。
1 | read [选项] [参数] |
选项:
-a
:后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。-d
:后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。-p
:后面跟提示信息,即在输入前打印提示信息。-n
:后跟一个数字,定义输入文本的长度。-t
:后跟秒数,定义输入字符的等待时间。
expr
命令用于求表达式变量的值,一般用于整数值,也可用于字符串。
1 | expr [表达式] |
let
命令用于执行一个或多个表达式。
1 | let [表达式1] [表达式2] |
df
(英文全拼:disk free)命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。
1 | df [选项] [FILE] |
选项:
-h
:以易读方式显示。
du
(英文全拼:disk usage)命令用于显示目录或文件的大小。
1 | du [选项] [目录] |
选项:
-a
:显示目录中个别文件的大小。-b
:显示目录或文件大小时,以字节为单位。-c
:除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。-s
:显示指定目录,不显示子目录。
fdisk
命令用于创建和维护分区表。
1 | fdisk [选项] |
选项:
-l
:列出所有分区表。-u
:和-l
搭配使用,显示分区数目。
mount
命令用于挂载 Linux 系统外的文件系统。
1 | mount [文件系统文件名] [目录] |
umount
命令用于卸除文件系统。
1 | umount [文件系统文件名] |
at
命令在指定时间执行一个或一组命令。
1 | at [选项] [日期时间] |
选项:
-f
:指定包含具体指令的任务文件。-q
:指定新任务的队列名称。-l
:列出所有at
命令提交的作业。-d
:删除指定的待执行任务。-m
:作业完成时向用户发送一条确认信息。-r
:从at
调度作业中删除指定的作业号。
crontab
命令用于周期性执行命令。
1 | crontab [ -u 用户 ] 文件 |
选项:
-u
:设置指定用户的时程表。-e
: 执行文字编辑器来设定时程表。-r
: 删除目前的时程表。-l
: 列出目前的时程表。
type
命令用于判断一个命令是外部命令(程序),还是内部命令。
1 | type [选项] [命令] |
选项:
-a
:显示所有可能的类型。-p
:只返回外部命令的信息。-f
:只返回 shell 函数的信息。
time
命令用于测量特定指令执行时所需消耗的时间及系统资源等资讯。
1 | time 命令 |
-o
:设定结果输出档。这个选项会将 time 的输出写入指定的档案中,如果档案已经存在,系统将覆写其内容。-a
:配合-o
使用,会将结果写到档案的末端,而不会覆盖掉原来的内容。
history
用于显示与管理历史命令记录。
1 | history [参数] |
-a
:写入命令记录。-c
:清空命令记录。-d
:删除指定序号的命令记录。-n
:读取命令记录。-r
:读取命令记录到缓冲区。-s
:将指定的命令添加到缓冲区。-w
:将缓冲区信息写入到历史文件。
clear
命令用于清除终端内容。
1 | clear |
touch
命令用于创建文件。
1 | touch [文件名] |
egrep
命令用于在文件内查找指定的字符串。
1 | egrep [范本模式] [文件或目录] |
tar
(英文全拼:tape archive)命令用于备份文件。
- 打包文件:
1 | tar -cvf tarfilename files/directories |
- 显示打包文件:
1 | tar -tvf tarfilename |
- 解包包中所有文件:
1 | tar -xvf tarfilename |
- 解包包中特定文件:
1 | tar -xvf tarfilename filename |
选项:
-v
:显示打包文件信息。-f
:指定存档文件名。-t
:列出存档文件内容。-c
:创建存档文件。
compress
命令用于压缩文件。
1 | compress [选项] [文件名] |
选项:
-v
:显示压缩比例。
zip
命令用于压缩文件。
1 | zip [参数] 待压缩文件1 待压缩文件2 ... |
选项:
-r
:被压缩含文件夹内容时使用。
gcc
命令用于使用 GNU 的 C/C++ 编译器 GCC 编译源代码。
1 | gcc [参数] 源代码文件 |
选项:
-x
:设定文件所使用的语言,使后缀名无效。-c
:只激活预处理、编译和汇编,即只将程序做成 obj 文件。-S
:只激活预处理和编译,即只将文件编译成为汇编代码。-E
:只激活预处理,不生成文件,需要自行将输出重定向到一个文件里面。-o
:指定目标名称,默认为 a.out。
rpm
命令来自 “redhat package manager” 的缩写,其功能是用于在Linux系统下对软件包进行安装、卸载、查询、验证、升级等工作,常见的例如 RHEL、CentOS、Fedora 等主流系统都采用这种软件包管理器。
1 | rpm [参数] 软件包名 |
选项:
-a
:显示所有软件包。-c
:仅显示组态配置文件。-d
:仅显示文本文件。-e
:卸载软件包。-f
:显示文件或命令属于哪个软件包。-h
:安装软件包时显示标记信息。-I
:安装软件包。-h
:安装软件包时显示标记信息。
get
(英文全拼:web get)命令用于从指定网址下载网络文件。wget命令非常稳定,一般即便网络波动也不会导致下载失败,而是不断地尝试重连,直至整个文件下载完毕。
1 | wget [参数] 网址URL [对象] |
选项:
-4/6
:基于 IPv4/6 网络协议。-a
:将日志追加写入至指定文件。-b
:启动后转入后台执行。-c
:支持断点续传。-d
:使用调试模式。
curl
(英文全拼:command line URL)命令用于在 shell 终端界面中基于 URL 规则进行的文件传输工作。curl 是一款综合的传输工具,可以上传也可以下载,支持 HTTP、HTTPS、FTP 等三十余种常见协议。
选项:
-a
:追加写入到指定文件。-A
:设置用户代理标头信息。-b
:设置用户 Cookie 信息。-B
:使用 ASCII 文本传输。-C
:支持断点续传。
reboot
命令用于重新启动计算机,与halt
和shutdown
命令相似。
选项:
-d
:不将重启系统的过程写入日志中。-f
:强制重启系统而不询问。-I
:关闭所有的网络服务然后再重启系统。-n
:直接重启系统,不保存当前资料。
ssh
命令用于安全的远程连接服务器主机系统,作为 openssh 套件中的客户端连接工具,ssh
命令可以让我们轻松地基于 SSH 加密协议进行远程主机访问,从而实现对远程服务器的管理工作。
1 | ssh [参数] 域名或IP地址 |
选项:
-1/2/4/6
使用 SSH 协议版本 1/2,基于 IPv4/6 网络协议。-a
:关闭认证代理连接转发功能。-A
:打开认证代理连接转发功能。-b
:设置本机对外提供服务的 IP 地址。
yes
命令用于输出指定的字符串,直到yes
进程被杀死。不带任何参数输的yes
命令默认的字符串就是 y。
1 | yes [字符串] |
hash
(英文全拼:Hash Algorithm)命令用于管理命令运行时查询的哈希表。hash
命令可以显示与删除命令运行时系统查询的哈希表信息,如果不加任何参数,则会默认输出路径列表的信息,这个列表会包含先前hash
命令调用找到的 shell 环境中命令的路径名。
选项:
-f
:设置要进行哈希运算的文件路径。-l
:显示哈希表中的命令。-p
:将完整路径的命令加入到哈希表中。-r
:清除哈希表中的记录。-t
:显示哈希表中命令的完整路径。
ftpwho
命令用于显示 FTP 会话信息。
1 | ftpwho [参数] |
选项:
-h
:显示帮助信息。-v
:详细信息模式。
rsync
命令用于远程数据同步。
1 | rsync [参数] |
选项:
-v
:详细模式输出。-z
:压缩文件。-o
:保留文件原始所有者身份。-g
:保留文件原始所有组身份。-p
:保留文件原始权限信息。-b
:备份目标文件。-r
:递归目录文件(传输目录内的子文件)。-d
:不递归目录文件(不传输目录内的子文件)。-P
:显示进度信息。-q
:精简输出模式。-h
:显示帮助信息。
ifconfig
命令用于显示或设置网络设备参数信息。
1 | ifconfig [参数] [网卡设备] |
选项:
add <地址>
:设置网络设备 IPv6 的 IP 地址。del <地址>
:删除网络设备 IPv6 的 IP 地址。down
:关闭指定的网络设备。up
:启动指定的网络设备。
ping
命令用于测试主机间网络连通性,发送出基于 ICMP 传输协议的数据包,要求对方主机予以回复,若对方主机的网络功能没有问题且防火墙放行流量,则就会回复该信息,也就可得知对方主机系统在线并运行正常了。
1 | ping [参数] 目标主机 |
选项:
-d
:使用 Socket 的 SO_DEBUG 功能。-c
:指定发送报文的次数。-i
:指定收发信息的间隔时间。-I
:使用指定的网络接口送出数据包。-l
:设置在送出要求信息之前,先行发出的数据包。-n
:只输出数值。-p
:设置填满数据包的范本样式。-q
:不显示指令执行过程。-R
:记录路由过程。-s
:设置数据包的大小。-t
:设置存活数值 TTL 的大小。-v
:详细显示指令的执行过程。
sshd
用于 openssh 服务器守护进程。
1 | sshd [参数] |
选项:
-4
:强制使用 IPv4 地址。-6
:强制使用 IPv6 地址。-D
:以非后台守护进程的方式运行服务。-d
:调试模式。-e
:直接显示报错信息。-f <配置文件>
:指定服务器的配置文件。-g <登录过期时间>
:指定客户端登录的过期时间。-h <主机key文件>
:指定读取主机密钥文件。-i
:以 inetd 方式运行。-o <选项>
:指定服务配置选项。-p <端口>
:指定使用的端口号。-q
:不将任何信息写入系统日志。-t
:测试模式。
附:正则表达式速查
表中的 “①”、“②” 代表任意两个不同字符。
基本正则表达式:
正则表达式 | 含义 |
---|---|
① | 匹配 ① 字符本身 |
. | 匹配任意一个字符 |
①* | 匹配任意多个 ①(包括 0 个) |
[①②] | 匹配中括号中任意一个字符 |
[^①②] | 匹配除中括号中字符以外任意一个字符 |
[A-Za-z] | 匹配任意一个大小写字母 |
[0-9] | 匹配任意一个数字字符 |
^① | 行首匹配 |
①$ | 行尾匹配 |
①\{m\} | 匹配 m 个字符 |
①\{m,n\} | 匹配 m 到 n 个字符 |
①\{m,\} | 匹配至少 m 个字符 |
\<①②\> | 精确匹配单词 ①② |
POSIX 标准正则表达式: 用来匹配字符集中的一个字符,它主要用于消除不同字符编码之间的差异。
正则表达式 | 含义 |
---|---|
[:alnum:] | 匹配一个数字或字母 |
[:alpha:] | 匹配一个字母 |
[:digit:] | 匹配一个数字 |
[:upper:] | 匹配一个大写字母 |
[:lower:] | 匹配一个小写字母 |
[:blank:] | 匹配一个空格或制表符 |
[:print:] | 匹配一个可打印字符 |
扩展正则表达式: 仅在部分程序中支持,例如egrep
、awk
等。
正则表达式 | 含义 |
---|---|
①|② | 匹配 ① 或 ② |
①? | 匹配 0 或 1 个 ① |
①+ | 匹配至少一个 ① |
①{m} | 匹配 m 个 ① |
①{m,n} | 匹配 m 到 n 个 ① |
①{m,} | 匹配至少 m 个 ① |
(①②) | 匹配字符串 ①② |