终端和文件初级操作

登录 Linux 终端

1. 输入账号密码登录

2. 使用 shell

help命令:查看命令的帮助列表。

1
help [option] <command>

man命令:进入命令的帮助手册页面,比help显示的信息更详细。

1
man [option] <command>

查看系统的使用者信息(登录名,终端号和登录时间)和当前登录的用户信息:

1
2
who
who am i

date命令:显示当前的系统日期和时间。

cal命令:显示指定年月的日历表。

1
cal <month> <year>

tty命令:显示当前连接到标准输入的终端的文件名。

file命令:用于辨识文件类型。

1
file [option] <filename>

3. 退出当前用户

执行[Ctrl-D]exitlogout命令退出当前终端。

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 ..:切换到上一级目录。
  • cdcd ~:切换到当前用户的主目录。
  • 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 基础

建立文件目录

利用cdmkdir命令建立如下所示文件目录:

1
2
3
4
5
6
7
8
9
~
└── Mydir
├── MyBin
│ ├── Tool
| └── Game
├── MyDoc
└── MyMusic
├── Chinese
└── English
1
2
3
4
5
6
7
8
cd ~
mkdir Mydir
cd Mydir
mkdir MyBin MyDoc MyMusic
cd MyBin
mkdir Tool Game
cd ../MyMusic
mkdir Chinese English

查看和拼接文本

vi 在编辑文本时导入其它文件的内容:

1
:r <filename>

在 vi 的命令模式下快速添加空白行:

  • 行数 + “o” 命令:在当前行的下面插入多个空白行。
  • 行数 + “O” 命令:在当前行的上面插入多个空白行。

shell 中不同查看文件内容的方式:

1
2
3
cat [option] <filename>
more [option] <filename>
less [option] <filename>

使用moreless命令可以进入文本的交互界面,逐页查看文本内容,more会在 shell 上打印文本内容,而less不会。

head命令:输出文本的开头 N 行内容。

1
head -n [N]

tail命令:输出文本的末尾 N 行内容。

1
tail -n [N]

headtail命令可以使用管道符结合在一起,例如:将源文件的 13 - 15 行写入至别的文件中:

1
head -n 15 source | tail -n 3 > destination

文件的查找和改名

mv命令:移动目录及目录下的子文件,或对文件进行改名。

1
2
mv <filename> <dir>
mv <filename> <name>

使用find命令搜索所有 .c 扩展名的文件,并保存搜索结果:

1
find -type f -name "*.c" > destination

为所有 AB 开头,x 结尾的文件添加 .txt 扩展名:

方法一:使用find-exec参数,搭配mvrename

1
2
find -name "AB*x" -exec mv {} {}.txt \;
find -name "AB*x" -exec rename "s/x/x.txt/" {} \;

方法二:使用循环命令

1
2
3
for file in AB*x; \
do mv "$file" "${file}.txt"; \
done

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
2
3
4
5
6
Hello World.

Hello
World

"Hello World"

对应的 shell 代码如下:

1
2
3
echo Hello World.
echo -e "Hello\nWorld"
echo -e "\"Hello World\""
  • -e:启用反斜杠转义符。
  • -n:禁用echo执行后的自动换行。

使用echo输出变量:

1
2
var=variable
echo $var

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
2
find .profile
touch .profile

修改 .profile 文件,使用户每次登录时都显示当前日期:

1
2
echo "Hello World"
echo "Current Date and Time:$(date +%Y年%m月%d日%H时%M分%S秒)"

shell 后台进程:

在每条指令的最后加上 & 符号可以使该任务在后台执行。例如,创建后台进程vi numbers,并查看其 ID 的方法如下:

1
2
vi numbers &
ps -ef|grep 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,要求如下:

  1. 使用方式为:sum a b,其中 a 和 b 代表两个整数,a < b;
  2. 功能是计算从 a 到 b 的累加和;
  3. 在屏幕上显示:a + … + b = 累加和;

例如sum 57 90的输出结果为57 + ... + 90 = 2499

1
2
3
4
5
6
sum=0
for ((i=$1; i<=$2; i++))
do
sum=$[$sum+$i]
done
echo "$1 + ... + $2 = $sum"

执行该脚本:

1
bash sum 57 90

shell 脚本编程

命令行参数

命令行参数又称位置变量,是指用户输入命令时后面跟的数据项,用空格分隔。

变量 含义
$0 脚本文件名
$1, $2,…, $9 第1个到第9个命令行参数
$# 命令行参数的个数
$@ 所有命令行参数 (每个参数都用一对双引号括起)
$? 最后一个命令的退出状态
$* 所有命令行参数 (将所有参数认为是一个字段)
$$ 正在执行进程的 ID(PID)

算术运算

expr命令:提供整数算术运算功能,对数字和非数字字符串进行计算,会将参数作为表达式,计算表达式值输出到标准输出。

1
2
3
x=10
x=`expr $x + 1`
echo $x

let命令:进行整数计算,并将表达式的值赋值给变量。

1
2
3
x=100
let x=x+1
echo

let命令可以简写为双括号(( expression ))

条件判断

数值判断:

操作符 含义
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于

字符串判断:

操作符 含义
= 相等
!= 不相等
-z 长度为零
-n 长度不为零

文件判断:

操作符 含义
-e 文件存在
-r 文件存在且可读
-w 文件存在且可写
-x 文件存在且可执行
-s 文件存在且至少有一个字符
-d 文件存在且为目录
-f 文件存在且为普通文件
-c 文件存在且为字符型特殊文件
-b 文件存在且为块特殊文件

if-then-elif-else 结构:

1
2
3
4
5
6
7
8
9
if [ condition_1 ]
then
commands_1
elif [ condition_2 ]
then
commands_2
else
commands_3
fi

test命令:计算作为其参数的表达式的真假。

1
if test "$variable" = value

循环结构

for-in-do-done 结构: 按指定次数执行一系列命令。

1
2
3
4
for variable in sequence
do
commands
done

while-do-done 结构: 条件为真则继续执行。

1
2
3
4
while [ condition ]
do
commands
done

until-do-done 结构: 条件为假则继续执行。

1
2
3
4
until [ condition ]
do
commands
done

脚本编写示例

(一)编写一个 shell 脚本,要求如下:

  1. 屏幕显示 “Please enter the first integer:” 然后接收用户的输入;
  2. 屏幕显示 “Please enter the second integer:” 然后接收用户的输入
  3. 屏幕显示 “Please enter the third integer:” 然后接收用户的输入
  4. 之后显示最大的整数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash

echo -n "Please enter the first integer:"
read a
echo -n "Please enter the second integer:"
read b
echo -n "Please enter the third integer:"
read c

max=$a
if [ $b -gt $max ]
then
max=$b
fi
if [ $c -gt $max ]
then
max=$c
fi
echo "$max"

脚本第一行的#!/bin/bash用于指定执行脚本的 shell 路径,如果不写这行则使用当前用户的默认 shell。

(二)编写一个 shell 脚本,要求如下:

  1. 屏幕显示 “Please input a username:” 然后键盘输入一个用户名;
  2. 如果该用户存在,显示 “[该用户名]'s shell is [该用户的默认 shell]”;
  3. 如果不存在,则显示 “[该用户名] not exists.”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

echo -n "Please input a username:"
read username

egrep "\<$username\>" /etc/passwd > /dev/null

if [ $? = 0 ]
then
shell=$(getent passwd "$username" | awk -F ':' '{print $NF}')
echo "$username's shell is $shell"
else
echo "$username not exists."
fi

/dev/null 是一个特殊的文件,被称为 “空设备”,将输出重定向至此可以使该输出被丢弃。

在此处,我使用getent命令来获取用户的 passwd 条目,并使用awk命令来提取最后一列,即为该用户的默认 shell。

(三)编写一个 shell 脚本,要求如下:

  1. 判断 exp 目录下是否存在目录 FILE,如果存在则先删除再新建,否则新建;
  2. 在 FILE 目录下,新建 100 个文件,文件名依次为 file001 至 file100;
  3. 使用 tar 命令打包并压缩这 100 个文件为 allfile.tar.gz,将该文件移动到 exp 目录下;
  4. 查看 allfile.tar.gz 文件的权限,并将其权限修改为 user 可读可写可执行,group 和 other 可读。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash

if [ -d ~/exp/FILE ]
then
rm -rf ~/exp/FILE
fi
mkdir ~/exp/FILE

cd ~/exp/FILE
touch file{001..100}

tar -czf allfile.tar.gz *
mv -f ~/exp/FILE/allfile.tar.gz ~/exp

cd ~/exp
ls -l allfile.tar.gz
chmod u=rwx,go=r allfile.tar.gz

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 脚本,要求如下:

  1. 判断当前用户是否为 root,如果为 root 则输出 “Current user : root”;否则输出 “Current user : [用户名]”;
  2. 检查当前目录是否为用户主目录,是当前用户主目录则输出 “You are in the home directory!”;如果不是当前用户主目录,则进入当前用户主目录,然后输出 “You have gone back to your home directory!”;
  3. 检测工作目录中是否存在 bin 子目录,如果存在则先删除该目录,再重新创建 bin 目录,并输出 “bin has been recreated!”;否则直接创建 bin 目录后输出 “bin has been created!”;
  4. 使用set命令将date命令执行的结果设置成位置参数,然后通过位置参数判断今天是否为休息日(周六或周日),如果是则输出 “Today is a weekend!”;否则输出 “Today is [英文星期几的前三位缩写(如Wed)]”。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash

if [ $USER = "root" ]
then
echo "Current user : root"
else
echo "Current user : $USER"
fi

if [ $PWD = $HOME ]
then
echo "You are in the home directory!"
else
cd $HOME
echo "You have gone back to your home directory!"
fi

if [ -d bin ]
then
rm -r bin
mkdir bin
echo "bin has been recreated!"
else
mkdir bin
echo "bin has been created!"
fi

set $(date)
if [ $1 = "Sat" ] || [ $1 = "Sun" ]
then
echo "Today is a weekend!"
else
echo "Today is ${1:0:3}"
fi

附: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. 查看内部命令:
1
help [参数] 内部命令
  1. 查看外部命令:
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. 创建文件副本:
1
cp 文件名1 文件名2
  1. 将文件复制到其它目录:
1
cp 文件名 目录名
  1. 将多个文件复制到其它目录:
1
cp 文件名1 文件名2 ... 目录名

mv(英文全拼:move file)命令用来为文件或目录改名、或将文件或目录移入其它位置。

  1. 将文件移到其它目录:
1
mv 文件名 目录
  1. 改变文件名:
1
mv 文件名1 文件名2
  1. 将文件批量移动到其它目录:
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
2
kill [-s <信息名称或编号>] [程序]
kill [-l <信息编号>]

选项:

  • -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:显示较详细的讯息。
  • -auxaux:显示所有包含其他使用者的进程。
  • -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
2
3
4
test num1 逻辑运算符 num2
test string1 逻辑运算符 string2
test 选项 string
test 选项 filename

选项:

  • -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. 打包文件:
1
tar -cvf tarfilename files/directories
  1. 显示打包文件:
1
tar  -tvf tarfilename
  1. 解包包中所有文件:
1
tar  -xvf tarfilename
  1. 解包包中特定文件:
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命令用于重新启动计算机,与haltshutdown命令相似。

选项:

  • -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:] 匹配一个可打印字符

扩展正则表达式: 仅在部分程序中支持,例如egrepawk等。

正则表达式 含义
①|② 匹配 ① 或 ②
①? 匹配 0 或 1 个 ①
①+ 匹配至少一个 ①
①{m} 匹配 m 个 ①
①{m,n} 匹配 m 到 n 个 ①
①{m,} 匹配至少 m 个 ①
(①②) 匹配字符串 ①②