1.链接文件命令
链接文件是 Linux 文件系统的一个优势。如果需要在系统中维护同一文件的两个或多个副本,
可以使用单个物理副本加多个虚拟副本(链接)的方法代替创建多个物理副本。链接是目录中指
向文件真实位置的占位符。在 Linux 中有两种类型的文件链接
软连接
ls -l test_file
ln -s test_file slink_test_file
ls -l *test_file
硬连接
ls -l *test_one
$ ln test_one hlink_test_one
$ ls -li *test_one
2.管理目录
创建
mkdir New_Dir
批量创建
mkdir -p New_Dir/SubDir/UnderDir
删除目录
$ mkdir Wrong_Dir
$ touch Wrong_Dir/newfile
$ rmdir Wrong_Dir/
查看文件类型
file .bashrc
3.查看命令
$ cat test_file
-n 选项会给所有的行加上行号:
$ cat -n test_file
-b给文本加上行号
$ cat -b test_file
more 命令
vi oracle.cnf
more oracle.cnf
tail 命令查看部分文本
tail -n 2 log_file
查看头部命令
head log_file
4.探查进程命令ps
-A 显示所有进程
-N 显示与指定参数不符的所有进程
-a 显示除控制进程(session leader )和无终端进程外的所有进程
-d 显示除控制进程外的所有进程
-e 显示所有进程
-C cmdlist 显示包含在 cmdlist 列表中的进程
-G grplist 显示组 ID 在 grplist 列表中的进程
-U userlist 显示属主的用户 ID 在 userlist 列表中的进程
-g grplist 显示会话或组 ID 在 grplist 列表中的进程
-p pidlist 显示 PID 在 pidlist 列表中的进程
-s sesslist 显示会话 ID 在 sesslist 列表中的进程
-t ttylist 显示终端 ID 在 ttylist 列表中的进程
-u userlist 显示有效用户 ID 在 userlist 列表中的进程
-F 显示更多的额外输出(相对-f 选项而言)
-O format 显示默认的输出列以及 format 列表指定的特定列
-M 显示进程的安全信息
-c 显示进程的额外的调度器信息
-f 显示完整格式的输出
-j 显示作业信息
-l 显示长列表
-o format 仅显示由 format 指定的列
-y 不显示进程标志
-Z 显示安全上下文信息
-H 以层级格式显示进程(显示父进程)
-n namelist 定义要在 WCHAN 输出列中显示的值
-w 采用宽输出格式,不限宽度显示
-L 显示进程中的线程
-V 显示 ps 命令的版本号
$ ps -ef
UID: 启动该进程的用户。
PID: 进程 ID。
PPID: 父进程的 PID(如果该进程是由另一个进程启动的)。
C: 进程生命期中的 CPU 利用率。
STIME: 进程启动时的系统时间。
TTY: 进程是从哪个终端设备启动的。
TIME: 运行进程的累计 CPU 时间。
CMD: 启动的程序名称。
BSD 风格的 ps 命令选项
T 显示与当前终端关联的所有进程
a 显示与任意终端关联的所有进程
g 显示包括控制进程在内的所有进程
r 仅显示运行中的进程
x 显示所有进程,包括未分配任何终端的进程
U userlist 显示属于 userlist 列表中某个用户 ID 所有的进程
p pidlist 显示 PID 在 pidlist 列表中的进程
t ttylist 显示与 ttylist 列表中的某个终端关联的进程
O format 除了标准列,还输出由 format 指定的列
X 以寄存器格式显示数据
Z 在输出中包含安全信息
j 显示作业信息
l 采用长格式显示
o format 仅显示由 format 指定的列
s 采用信号格式显示
u 采用基于用户的格式显示
v 采用虚拟内存格式显示
N namelist 定义要在 WCHAN 输出列中显示的值
O order 定义信息列的显示顺序
S 将子进程的数值统计信息(比如 CPU 和内存使用情况)汇总到父进程中
c 显示真实的命令名称(用以启动该进程的程序名称)
e 显示命令使用的环境变量
f 用层级格式来显示进程,显示哪些进程启动了哪些进程
h 不显示头信息
k sort 指定用于排序输出的列
n 使用数值显示用户 ID、组 ID 以及 WCHAN 信息
w 为更宽的终端屏幕生成宽输出
H 将线程显示为进程
m 在进程之后显示线程
L 列出所有的格式说明符
V 显示 ps 命令的版本
top 命令显示列的含义
PID: 进程的 PID。
USER: 进程属主的用户名。
PR: 进程的优先级。
NI: 进程的谦让度。
VIRT: 进程占用的虚拟内存总量。
RES: 进程占用的物理内存总量。
SHR: 进程和其他进程共享的内存总量。
S: 进程的状态(D 代表可中断的休眠,R 代表运行,S 代表休眠,T 代表被跟踪或停止,Z 代表僵化 )。
%CPU: 进程使用的 CPU 时间比例。
%MEM: 进程使用的可用物理内存比例。
TIME+: 自进程启动到目前为止所占用的 CPU 时间总量。
COMMAND: 进程所对应的命令行名称,也就是启动的程序名。
5.结束进程
信 号 名 称 描 述
1 HUP 挂起
2 INT 中断
3 QUIT 结束运行
9 KILL 无条件终止
11 SEGV 段错误
15 TERM 尽可能终止
17 STOP 无条件停止运行,但不终止
18 TSTP 停止或暂停,但继续在后台运行
19 CONT 在 STOP 或 TSTP 之后恢复执行
6.挂载存储设备
mount 命令
$ mount -t ext4
mount 命令提供了 4 部分信息。
(1)设备文件名
(2)设备在虚拟目录中的挂载点
(3)文件系统类型
(4)已挂载设备的访问状态
mount 命令选项
-a 挂载/etc/fstab 文件中指定的所有文件系统
-f 模拟挂载设备,但并不真正挂载
-F 和-a 选项一起使用时,同时挂载所有文件系统
-v 详细模式,显示挂载设备的每一步操作
-i 不使用/sbin/mount.filesystem 下的任何文件系统协助文件
-l 自动给 ext2、ext3、ext4 或 XFS 文件系统添加文件系统标签
-n 挂载设备,但不在/etc/mtab 已挂载设备文件中注册
-p num 进行加密挂载时从文件描述符 num 中获得口令
-s 忽略该文件系统不支持的挂载选项
-r 将设备挂载为只读
-w 将设备挂载为可读写(默认选项)
-L label 将设备按指定的 label 挂载
-U uuid 将设备按指定的 uuid 挂载
-O 和-a 选项一起使用,限制其所作用的文件系统
-o 给文件系统添加特定的选项
7.使用 df 命令
$ df -t ext4 -t vfat
该命令的输出如下。
(1)设备文件位置
(2)包含多少以 1024 字节为单位的块
(3)使用了多少以 1024 字节为单位的块
(4)还有多少以 1024 字节为单位的块可用
(5)已用空间所占的百分比
(6)设备挂载点
8.数据搜索
你经常需要在大文件中查找位于文件中间部分某处的数据行。与其手动翻找整个文件,
(1)不如使用 grep 命令来帮助查找。grep 命令的格式如下:
grep [options] pattern [file]
$ grep three file1
(2)如果要进行反向搜索(输出不匹配指定模式的行),可以使用-v 选项
$ grep -v t file1
(3)如果要显示匹配指定模式的那些行的行号,可以使用-n 选项:
$ grep -n t file1
(4)如果只想知道有多少行含有匹配的模式,可以使用-c 选项:
$ grep -c t file1
(5)如果要指定多个匹配模式,可以使用-e 选项来逐个指定:
$ grep -e t -e f file1
(6)输出了包含字符串 t 或字符串 f 的所有行
$ grep [tf] file1
9.数据压缩
gzip 软件包是 GNU 项目的产物,旨在编写一个能够替代原先 Unix 中 compress 工具的免费版本。
这个软件包包括以下文件。
(1)gzip:用于压缩文件。
(2)gzcat:用于查看压缩过的文本文件的内容。
(3)gunzip:用于解压文件
$ gzip myprog
数据归档
tar 命令最开始是用于将文件写入磁带设备以作归档,但它也可以将输出写入文件,这种用法成了在 Linux 中归档数据的普遍做法。
tar 命令的格式如下。
tar function [options] object1 object2 ..
-A --concatenate 将一个 tar 归档文件追加到另一个 tar 归档文件末尾
-c --create 创建新的 tar 归档文件
-d --diff 检查归档文件和文件系统的不同之处
--delete 从 tar 归档文件中删除文件
-r --append 将文件追加到 tar 归档文件末尾
-t --list 列出 tar 归档文件的内容
-u --update 将比 tar 归档文件中已有的同名文件更新的文件追加到该归档文件
-x --extract 从 tar 归档文件中提取文件
-C dir 切换到指定目录
-f file 将结果输出到文件(或设备)
-j 将输出传给 bzip2 命令进行压缩
-J 将输出传给 xz 命令进行压缩
-p 保留文件的所有权限
-v 在处理文件时显示文件名
-z 将输出传给 gzip 命令进行压缩
-Z 将输出传给 compress 命令进行压缩
zxvf
该命令创建了一个名为 test.tar 的归档文件,包含目录 test 和 test2 的内容
tar -cvf test.tar test/ test2/
该命令列出了(但不提取)tar 文件 test.tar 的内容。
tar -tf test.tar
该命令从 tar 文件 test.tar 中提取内容。如果创建的时候 tar 文件含有目录结构,则在当前目录中重建该目录的整个结构。
tar -xvf test.tar
查找命令
$ which bash
10.进程列表
可以在单行中指定要依次运行的一系列命令。这可以通过命令列表来实现,只需将命令之间以分号(;)分隔即可:
$ pwd ; ls test* ; cd /etc ; pwd ; cd ; pwd ; ls my*
在上面的例子中,所有命令依次执行,没有任何问题。不过这并不是进程列表。要想成为进程列表,命令列表必须将命令放入圆括号内:
$ (pwd ; ls test* ; cd /etc ; pwd ; cd ; pwd ; ls my*)
下面这个例子先后使用了命令列表和 echo $BASH_SUBSHELL:
$ pwd ; ls test* ; cd /etc ; pwd ; cd ; pwd ; ls my* ; echo $BASH_SUBSHELL
在输出结果的最后是数字 0。这表明并未创建子 shell 来执行这些命令。如果改用进程列表,则结果就不一样了。在列表最后加入 echo $BASH_SUBSHELL:
$ (pwd ; ls test* ; cd /etc ; pwd ; cd ; pwd ; ls my* ; echo $BASH_SUBSHELL)
可以在进程列表中嵌套圆括号来创建子 shell 的子 shell:
$ (pwd ; echo $BASH_SUBSHELL)
注意: 进程列表是命令分组(command grouping)的一种。另一种命令分组是将命令放入花括号内,并在命令列表尾部以分号(;)作结。
语法为:{ command; }
使用花括号进行命令分组并不会像进程列表那样创建子 shell。
11.探究后台模式
在后台模式中运行命令可以在处理命令的同时让出 CLI,以供他用。演示后台模式的一个典型命令是 sleep。
sleep 命令会接受一个参数作为希望进程等待(睡眠)的秒数。该命令在 shell 脚本中常用于引入一段暂停时间。
命令 sleep 10 会将会话暂停 10 秒,然后返回 shell CLI 提示符:
$ sleep 10
sleep 3000&
ps -f
除了 ps 命令,也可以使用 jobs 命令来显示后台作业信息。jobs 命令能够显示当前运行在后台模式中属于你的所有进程(作业)
利用 jobs 命令的-l(小写字母 l)选项,还可以看到更多的相关信息。除了默认信息,-l选项还会显示命令的 PID。
$ jobs -l
在上面的例子中,出现了 2 秒的暂停,显示的数字 1 表明只有一个子 shell,在返回提示符之前又经历了另一个 2 秒的暂停。没什么大事。
$ (sleep 2 ; echo $BASH_SUBSHELL ; sleep 2)
进程列表置入后台会产生一个作业号和进程 ID,然后会返回提示符。不过,奇怪的是表明一级子 shell(single-level subshell)的数字 1 竟然出现在了提示符的右边。
别慌,按一下 Enter键,就会得到另一个提示符
$ (sleep 2 ; echo $BASH_SUBSHELL ; sleep 2)&
协程
协程同时做两件事:一是在后台生成一个子 shell,二是在该子 shell 中执行命令。
要进行协程处理,可以结合使用 coproc 命令以及要在子 shell 中执行的命令:
$ coproc sleep 10
[1] 2689
$
除了会创建子 shell,协程基本上就是将命令置入后台。当输入 coproc 命令及其参数之后,你会发现后台启用了一个作业。
屏幕上会显示该后台作业号(1)以及进程 ID(2689)。
jobs 命令可以显示协程的状态
使用命令的扩展语法来自己设置名字:
$ coproc My_Job { sleep 10; }
你可以发挥才智,将协程与进程列表结合起来创建嵌套子 shell。只需将命令 coproc 放在进程列表之前即可:
$ coproc ( sleep 10; sleep 2 )
$ jobs
$ ps --forest
12.理解外部命令和内建命令
外部命令(有时也称为文件系统命令)是存在于 bash shell 之外的程序。也就是说,它并不属于 shell 程序的一部分。
外部命令程序通常位于/bin、/usr/bin、/sbin 或/usr/sbin 目录中
内建命令
与外部命令不同,内建命令无须使用子进程来执行。内建命令已经和 shell 编译成一体,作为 shell 的组成部分存在,无须借助外部程序文件来执行。
使用 history 命令
要查看最近用过的命令列表,可以使用不带任何选项的 history 命令
13.使用命令别名
alias 命令是另一个实用的 shell 内建命令
使用 alias 命令以及选项-p 可以查看当前可用的别名:
$ alias -p
可以使用 alias 命令创建自己的别名:
$ alias li='ls -i'