shell提示符
- 启动终端仿真器包或登录Linux虚拟控制台之后会看到shell CLI提示符。提示符是进入shell世界的大门,可以在此输入shell命令;
- 默认的bash shell提示符是美元符号($),这个符号表明shell在等待用户输入命令;
- 当登录系统并获得shell命令提示符后,通常位于自己的主目录中;
Linux文件系统
简述
- Linux会将文件存储在名为虚拟目录(virtual directory)的单个目录结构中,Linux虚拟目录结构只包含一个称为根(root)目录的基础目录;
- 根目录下的目录和文件会按照其访问路径一一列出,路径本身并没有提供任何有关文件究竟存放在哪个物理磁盘中的信息;
- Linux使用正斜线(/)而不是反斜线(\)来分隔文件路径中的目录。反斜线在Linux中用作转义字符;
- Linux系统中安装的第一块硬盘为根驱动器,根驱动器包含了虚拟目录的核心,其他目录都是从那里开始构建的;
- Linux会使用根驱动器上一些特别的目录作为挂载点(mount point),挂载点是虚拟目录中分配给额外存储设备的目录,Linux会让文件和目录出现在这些挂载点目录中,即便它们位于其他物理驱动器中;
- 系统文件通常存储在根驱动器中,而用户文件则存储在其他驱动器中;
- 上图展示了计算机中的两块硬盘。一块硬盘(Disk 1)与虚拟目录的根目录关联,其他硬盘可以挂载到虚拟目录结构中的任何地方。在这个例子中,另一块硬盘(Disk 2)被挂载到了/home,这是用户主目录所在的位置;
目录含义
/
:虚拟目录的根目录,通常不会在这里放置文件;/bin
:二进制文件目录,存放很多用户级GNU实用工具;/boot
:引导目录,存放引导文件;/dev
:设备目录,Linux在其中创建设备节点;/etc
:系统配置文件目录;/home
:主目录,Linux在其中创建用户目录;/lib
:库目录,存放系统和应用程序的库文件;/media
:媒介目录,可移动存储设备的常用挂载点;/mnt
:挂载目录,用于临时挂载文件系统的常用挂载点;/opt
:存放第三方软件包;/proc
:进程目录,存放现有内核、系统以及进程的相关信息;/root
:root用户的主目录;/run
:运行目录,存放系统的运行时数据;/sbin
:系统二进制文件目录,存放了很多管理级的GNU实用工具;/srv
:服务目录,存放本地服务的相关文件;/sys
:系统目录,存放设备、驱动程序以及部门内核特性信息;/tmp
:临时目录,可在其中创建和删除临时工作文件;/usr
:用户目录,一个次目录层级结构;/var
:可变目录,存放经常变化的文件,比如日志文件;
遍历目录
cd、cd /、cd、cd ~、cd .、cd …
cd
:切换文件路径
cd /
:进入根目录
cd或cd ~
:进入用户目录
cd .
:进入当前目录
cd ..
:进入上级目录
ls
当前目录下的文件和目录。
1 -F
-F选项会在目录名之后添加正斜线(/),以方便用户在输出中分辨,还会在可执行文件(比如下面的my_script文件)之后添加星号(*),以帮助用户找出可在系统中运行的文件。
$ ls -F
Desktop/ Downloads/ my_script* Public/ test_file
Documents/ Music/ Pictures/ Templates/ Videos/
$
2 -l
-l选项会产生长列表格式的输出,提供目录中各个文件的详细信息。
$ ls -l
total 8
drwxr-xr-x. 2 christine christine 6 Feb 20 14:23 Desktop
drwxr-xr-x. 2 christine christine 6 Feb 20 14:23 Documents
drwxr-xr-x. 2 christine christine 6 Feb 20 14:23 Downloads
drwxr-xr-x. 2 christine christine 28 Feb 29 15:42 Music
-rwxrw-r--. 1 christine christine 74 Feb 29 15:49 my_script
drwxr-xr-x. 2 christine christine 6 Feb 20 14:23 Pictures
drwxr-xr-x. 2 christine christine 6 Feb 20 14:23 Public
drwxr-xr-x. 2 christine christine 6 Feb 20 14:23 Templates
-rw-rw-r--. 1 christine christine 74 Feb 29 15:50 test_file
drwxr-xr-x. 2 christine christine 6 Feb 20 14:23 Videos
$
目录(d)、文件(-)、链接文件(l)、字符设备(c)或块设备(b)
如果想查看单个文件的长列表,那么只需在ls -l命令之后跟上该文件名即可。但如果想查看目录的相关信息,而非目录所包含的内容,则除了-l选项之外,还得添加-d选项,即ls -ld Directory-Name。
3 -a
- 在Linux中,隐藏文件通常是文件名以点号(.)开始的文件,这些文件并不会在ls命令的默认输出中出现;
- 要想显示隐藏文件,可以使用-a选项;
$ ls -a
. .bash_profile Desktop .ICEauthority my_script Templates
.. .bashrc Documents .local Pictures test_file
.bash_history .cache Downloads .mozilla .pki Videos
.bash_logout .config .esd_auth Music Public
$
4 -R
-R是ls命令的递归选项,可以递归地列出当前目录所包含的子目录中的文件。
5 通配符匹配(不适用于目录)
?
代表任意单个字符;*
代表零个或多个字符;- 其他;
$ ls -l f[!a]ll
-rw-rw-r--. 1 christine christine 0 Feb 29 16:12 fell
-rw-rw-r--. 1 christine christine 0 Feb 29 16:12 fill
-rw-rw-r--. 1 christine christine 0 Feb 29 16:12 full
$
pwd
显示当前工作目录
处理文件
创建文件
touch:创建一个空文件。
$ touch test_one
$ ls -l test_one
-rw-rw-r--. 1 christine christine 0 Feb 29 17:24 test_one
$
touch命令还可用来改变文件的修改时间。该操作不会改变文件内容:
$ ls -l test_one
-rw-rw-r--. 1 christine christine 0 Feb 29 17:24 test_one
$ touch test_one
$ ls -l test_one
-rw-rw-r--. 1 christine christine 0 Feb 29 17:26 test_one
$
复制文件
cp
cp source destination
1 当参数source和destination都是文件时,cp命令会将源文件复制成一个新的目标文件,并以destination命名
$ cp test_one test_two
$ ls -l test_one test_two
-rw-rw-r--. 1 christine christine 0 Feb 29 17:26 test_one
-rw-rw-r--. 1 christine christine 0 Feb 29 17:46 test_two
$
2 如果目标文件已经存在,则cp命令可能并不会提醒你这一点。最好加上-i选项,强制shell询问是否需要覆盖已有文件
$ ls -l test_one test_two
-rw-rw-r--. 1 christine christine 0 Feb 29 17:26 test_one
-rw-rw-r--. 1 christine christine 0 Feb 29 17:46 test_two
$
$ cp -i test_one test_two
cp: overwrite 'test_two'? (y/n [n])n
not overwritten
$
3 destination是文件夹时,将source复制到destination中,并以destination命名
$ cp -i test_one /home/christine/Documents/
$
$ ls -l /home/christine/Documents/
total 0
-rw-rw-r--. 1 christine christine 0 Feb 29 17:48 test_one
$
目录名尾部要加上一个正斜线(/)
4 .的妙用
将源文件名很长的文件复制到当前工作目录中:
$ cp /etc/NetworkManager/NetworkManager.conf .
$ ls *.conf
NetworkManager.conf
$
5 -R选项可以在单个命令中递归地复制整个目录的内容
$ ls -l Documents/
total 0
-rw-rw-r--. 1 christine christine 0 Feb 29 17:48 test_one
-rw-rw-r--. 1 christine christine 0 Feb 29 17:51 test_two
$
$ cp -R Documents/ NewDocuments/
$ ls -l NewDocuments/
total 0
-rw-rw-r--. 1 christine christine 0 Feb 29 17:55 test_one
-rw-rw-r--. 1 christine christine 0 Feb 29 17:55 test_two
$
链接文件
- 如果需要在系统中维护同一文件的两个或多个副本,可以使用单个物理副本加多个虚拟副本(链接)的方法代替创建多个物理副本;
- 链接是目录中指向文件真实位置的占位符;
- 在Linux中有两种类型的文件链接:符号链接、硬链接;
- 符号链接(也称为软链接)是一个实实在在的文件,该文件指向存放在虚拟目录结构中某个地方的另一个文件。这两个以符号方式链接在一起的文件彼此的内容并不相同,可以使用
ln -s
来创建符号链接;
$ ls -l test_file
-rw-rw-r--. 1 christine christine 74 Feb 29 15:50 test_file
$
$ ln -s test_file slink_test_file
$
$ ls -l *test_file
lrwxrwxrwx. 1 christine christine 9 Mar 4 09:46 slink_test_file -> test_file
-rw-rw-r--. 1 christine christine 74 Feb 29 15:50 test_file
$
- 硬链接创建的是一个独立的虚拟文件,其中包含了原始文件的信息以及位置。但是两者就根本而言是同一个文件,以硬链接相连的文件共享同一个inode编号。要想创建硬链接,原始文件也必须事先存在,只不过这次使用ln命令时不需要再加入额外的选项了;
$ ls -l *test_one
-rw-rw-r--. 1 christine christine 0 Feb 29 17:26 test_one
$
$ ln test_one hlink_test_one
$
$ ls -li *test_one
1415016 -rw-rw-r--. 2 christine christine 0 Feb 29 17:26 hlink_test_one
1415016 -rw-rw-r--. 2 christine christine 0 Feb 29 17:26 test_one
$
只能对处于同一存储设备的文件创建硬链接。要想在位于不同存储设备的文件之间创建链接,只能使用符号链接。
文件重命名、移动文件
- 在Linux中,重命名文件称为移动(moving),mv命令可以将文件和目录移动到另一个位置或是重新命名;
$ ls -li f?ll
1414976 -rw-rw-r--. 1 christine christine 0 Feb 29 16:12 fall
1415004 -rw-rw-r--. 1 christine christine 0 Feb 29 16:12 fell
1415005 -rw-rw-r--. 1 christine christine 0 Feb 29 16:12 fill
1415011 -rw-rw-r--. 1 christine christine 0 Feb 29 16:12 full
$
$ mv fall fzll
$
$ ls -li f?ll
1415004 -rw-rw-r--. 1 christine christine 0 Feb 29 16:12 fell
1415005 -rw-rw-r--. 1 christine christine 0 Feb 29 16:12 fill
1415011 -rw-rw-r--. 1 christine christine 0 Feb 29 16:12 full
1414976 -rw-rw-r--. 1 christine christine 0 Feb 29 16:12 fzll
$
- 移动文件会将文件名从fall更改为fzll,但inode编号和时间戳保持不变。这是因为mv只影响文件名;
- 也可以使用mv来移动文件的位置;
$ ls -li /home/christine/fzll
1414976 -rw-rw-r--. 1 christine christine 0 Feb 29 16:12 /home/christine/fzll
$
$ ls -li /home/christine/NewDocuments/fzll
ls: cannot access '/home/christine/NewDocuments/fzll': No such file or directory
$
$ mv /home/christine/fzll /home/christine/NewDocuments/
$
$ ls -li /home/christine/NewDocuments/fzll
1414976 -rw-rw-r--. 1 christine christine 0 Feb 29 16:12
/home/christine/NewDocuments/fzll
$
$ ls -li /home/christine/fzll
ls: cannot access '/home/christine/fzll': No such file or directory
$
- 和cp命令类似,在mv命令中使用-i选项。这样在mv试图覆盖已有的文件时会发出询问;
- 可以使用mv命令在移动文件的同时进行重命名:
$ ls -li NewDocuments/fzll
1414976 -rw-rw-r--. 1 christine christine 0 Feb 29 16:12 NewDocuments/fzll
$
$ mv /home/christine/NewDocuments/fzll /home/christine/fall
$
$ ls -li /home/christine/fall
1414976 -rw-rw-r--. 1 christine christine 0 Feb 29 16:12 /home/christine/fall
$
$ ls -li /home/christine/NewDocuments/fzll
ls: cannot access '/home/christine/NewDocuments/fzll': No such file or directory
$
- 也可以使用mv命令移动整个目录及其内容;
删除文件
rm(removing)。
rm [选项] 文件或目录
- -f:强制删除
- -r:递归删除,用于删除目录
- -i:交互删除,删除前询问用户
-r
也可删除文件,因此不管删除目录还是文件,一般情况下直接使用-r
或-rf
选项。
管理目录
创建目录
- mkdir;
$ mkdir New_Dir
$ ls -l New_Dir
drwxrwxr-x. 2 christine christine 6 Mar 6 14:40 New_Dir
$
- 使用
-p
命令可以根据需要“批量”地创建目录和子目录:
$ mkdir -p New_Dir/SubDir/UnderDir
$ ls -R New_Dir
New_Dir:
SubDir
New_Dir/SubDir:
UnderDir
New_Dir/SubDir/UnderDir:
$
删除目录
见删除文件。
查看文件内容
查看文件类型
- 在显示文件内容之前,应该先了解文件类型。如果尝试显示二进制文件,那么屏幕上会出现各种乱码,甚至会把终端仿真器挂起;
- 文本:
file .bashrc
.bashrc: ASCII text
上例中是一个ASCII text类型的文件。file命令不仅能够确定文件中包含的是文本信息,还能确定该文本文件的字符编码是ASCII;
- 目录:
$ file Documents
Documents/: directory
$
- 符号链接文件:
$ file slink_test_file
slink_test_file: symbolic link to test_file
$
- 脚本文件:
$ file my_script
my_script: Bourne-Again shell script, ASCII text executable
$
- 二进制可执行程序:
$ file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2,
for GNU/Linux 3.2.0,[...]
$
查看整个文件
cat
显示文件中所有内容。
cat [选项] 文件名
选项:
-n:显示行号
....
cat无论文件内容有多少,都会一次性显示。如果文件内容非常大,文件开头的内容就看不到了。因此不适合查看太大的文件。
more
分屏显示文件内容。
more 文件名
空格
:向下翻页;b
:向上翻页;回车
:向下滚动一行;/字符串
:搜索指定字符串;q
:退出;
more /etc/profile
less
- “less is more“,less为more命令的升级版本;
- less命令提供了多个非常实用的特性,能够实现在文本文件中前后翻动,还有一些高级搜索功能;
- less命令还可以在完成整个文件的读取之前显示文件的内容。cat命令和more命令则无法做到这一点;
- less命令的操作和more命令基本一样,一次显示一屏的文件文本。除了支持和more命令相同的命令集,它还包括更多的选项;
- less命令能够识别上下箭头键以及上下翻页键(假设你的终端配置正确)。在查看文件内容时,这赋予了你全面的控制权;
- man less可以查看less命令的所有可用选项;
less 文件名
-m:显示类似more命令的百分比
-N:显示每行的行号
-f:强制打开特殊文件,比如外围设备代号、目录和二进制文件
-i 忽略搜索时的大小写
空格
:向下翻页;b
:向上翻页;下箭头
:向下滚动一行;上箭头
:向上滚动一行;/字符串
:搜索"字符串"n
:查看下一个搜索结果N
:查看上一个搜索结果q
:退出;
查看部分文件
要查看的数据经常位于文本文件的开头或末尾。如果数据是在一个大型文件的开头,那就只能干等着cat或more载入整个文件。如果数据是在文件末尾(比如日志文件),则需翻过成千上万行的文本才能看到最后那部分。好在Linux有专门的命令可以解决这两个问题。
tail
1
tail会显示文件最后几行内容。默认情况下,它会显示文件的末尾10行。
tail 文件名
2
可以向tail命令中加入-n
选项来修改所显示的行数。
tail -n 行数 文件名
3
-f
选项,该选项允许你在其他进程使用此文件时查看文件的内容,tail命令会保持活动状态并持续地显示添加到文件中的内容,这是实时监测系统日志的绝佳方式。
head
1
head会显示文件开头几行内容。默认情况下,它会显示文件的开头10行。
head 文件名
2
可以向head命令中加入-n
选项来修改所显示的行数。
head -n 行数 文件名
监测程序
探查进程
ps命令。
1 在默认情况下,ps命令并没有提供太多的信息
$ ps
PID TTY TIME CMD
3081 pts/0 00:00:00 bash
3209 pts/0 00:00:00 ps
$
ps命令默认只显示运行在当前终端中属于当前用户的那些进程。在这个例子中,只有bash shell在运行(记住,shell只是运行在系统中的另一个程序而已),当然ps命令本身也在运行。
2 如果需要查看系统中运行的所有进程,可以使用-ef选项组合
-e选项指定显示系统中运行的所有进程;-f选项则扩充输出内容以显示一些有用的信息列。
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 12:14 ? 00:00:02 /sbin/init splash
root 2 0 0 12:14 ? 00:00:00 [kthreadd]
root 3 2 0 12:14 ? 00:00:00 [rcu_gp]
root 4 2 0 12:14 ? 00:00:00 [rcu_par_gp]
root 5 2 0 12:14 ? 00:00:00
[kworker/0:0-events]
root 6 2 0 12:14 ? 00:00:00
[kworker/0:0H-kblockd]
root 7 2 0 12:14 ? 00:00:00
[kworker/0:1-events]
...
rich 2209 1438 0 12:17 ? 00:00:01 /usr/libexec/
gnome-terminal-
rich 2221 2209 0 12:17 pts/0 00:00:00 bash
rich 2325 2221 0 12:20 pts/0 00:00:00 ps -ef
$
- UID:启动该进程的用户;
- PID:进程ID;
- PPID:父进程的PID(如果该进程是由另一个进程启动的);
- C:进程生命期中的CPU利用率;
- STIME:进程启动时的系统时间;
- TTY:进程是从哪个终端设备启动的;
- TIME:运行进程的累计CPU时间;
- CMD:启动的程序名称;
3 如果还想获得更多的信息,可以使用-l选项,产生长格式输出
[work@bpit-op-test03 ~]$ ps -efl
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 47740 ep_pol 2020 ? 01:42:59 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
1 S root 2 0 0 80 0 - 0 kthrea 2020 ? 00:00:05 [kthreadd]
1 S root 4 2 0 60 -20 - 0 worker 2020 ? 00:00:00 [kworker/0:0H]
1 S root 6 2 0 80 0 - 0 smpboo 2020 ? 00:01:12 [ksoftirqd/0]
1 S root 7 2 0 -40 - - 0 smpboo 2020 ? 00:00:24 [migration/0]
1 S root 8 2 0 80 0 - 0 rcu_gp 2020 ? 00:00:00 [rcu_bh]
1 S root 9 2 0 80 0 - 0 rcu_gp 2020 ? 07:54:35 [rcu_sched]
1 S root 10 2 0 60 -20 - 0 rescue 2020 ? 00:00:00 [lru-add-drain]
5 S root 11 2 0 -40 - - 0 smpboo 2020 ? 00:04:00 [watchdog/0]
5 S root 12 2 0 -40 - - 0 smpboo 2020 ? 00:02:59 [watchdog/1]
1 S root 13 2 0 -40 - - 0 smpboo 2020 ? 00:01:33 [migration/1]
1 S root 14 2 0 80 0 - 0 smpboo 2020 ? 00:01:32 [ksoftirqd/1]
注意使用了-l选项之后多出的那几列。
- F:内核分配给进程的系统标志;
- S:进程的状态(O代表正在运行;S代表在休眠;R代表可运行,正等待运行;Z代表僵化,已终止但找不到其父进程;T代表停止);
- PRI:进程的优先级(数字越大,优先级越低);
- NI:谦让度(nice),用于决定优先级;
- ADDR:进程的内存地址;
- SZ:进程被换出时所需交换空间的大致大小;
- WCHAN:进程休眠的内核函数地址;
实时监测进程
- ps命令虽然在收集系统中运行进程的信息时非常有用,但也存在不足之处:只能显示某个特定时间点的信息。如果想观察那些被频繁换入和换出内存的进程,ps命令就不太方便了;
- 这正是top命令的用武之地。与ps命令相似,top命令也可以显示进程信息,但采用的是实时方式;
[work@bpit-op-test03 ~]$ top
top - 13:26:29 up 12:16, 14 users, load average: 0.00, 0.01, 0.05
Tasks: 232 total, 1 running, 230 sleeping, 1 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 16430468 total, 14119392 free, 942844 used, 1368232 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 15062236 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17966 sunshic+ 20 0 1312248 100020 6792 S 3.7 0.6 0:04.67 auditer
1925 root 20 0 485188 71612 13936 S 0.7 0.4 6:04.92 titanagent
1683 root 39 19 890144 29228 8040 S 0.3 0.2 1:14.62 noah-client
2563 root 20 0 621136 21800 4060 S 0.3 0.1 0:12.20 glusterfs
5013 sunxion+ 20 0 1519360 99128 6752 S 0.3 0.6 0:09.13 auditer
18081 work 20 0 168228 2476 1648 R 0.3 0.0 0:02.48 top
1 root 20 0 190920 3896 2500 S 0.0 0.0 0:05.47 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.06 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:06.49 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
11 root rt 0 0 0 0 S 0.0 0.0 0:00.17 watchdog/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.12 watchdog/1
13 root rt 0 0 0 0 S 0.0 0.0 0:00.05 migration/1
14 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/1
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H
17 root rt 0 0 0 0 S 0.0 0.0 0:00.12 watchdog/2
18 root rt 0 0 0 0 S 0.0 0.0 0:00.01 migration/2
19 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/2
20 root 20 0 0 0 0 S 0.0 0.0 0:00.58 kworker/2:0
21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/2:0H
22 root rt 0 0 0 0 S 0.0 0.0 0:00.11 watchdog/3
23 root rt 0 0 0 0 S 0.0 0.0 0:00.13 migration/3
24 root 20 0 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/3
26 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/3:0H
27 root rt 0 0 0 0 S 0.0 0.0 0:00.12 watchdog/4
28 root rt 0 0 0 0 S 0.0 0.0 0:00.01 migration/4
29 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/4
31 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/4:0H
32 root rt 0 0 0 0 S 0.0 0.0 0:00.13 watchdog/5
33 root rt 0 0 0 0 S 0.0 0.0 0:00.10 migration/5
34 root 20 0 0 0 0 S 0.0 0.0 0:00.16 ksoftirqd/5
35 root 20 0 0 0 0 S 0.0 0.0 0:06.56 kworker/5:0
36 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/5:0H
- 第一行显示系统概况:当前时间、系统的运行时长、登录的用户数以及系统的平均负载。平均负载有3个值,分别是最近1分钟、最近5分钟和最近15分钟的平均负载。值越大说明系统的负载越高;
- 第二行显示进程概况:多少进程处于运行、休眠、停止以及僵化状态(僵化状态指进程已结束,但其父进程没有响应);
- 第三行显示了CPU概况:top会根据进程的属主(用户或是系统)和进程的状态(运行、空闲或等待)将CPU利用率分成几类输出;
- 第四行显示了系统的物理内存状态:总共有多少内存、当前用了多少,以及还有多少空闲;
- 第五行显示了系统交换空间(如果分配了的话)的状态;
- 最后一部分显示了当前处于运行状态的进程的详细列表,有些列跟ps命令的输出类似:
- PID:进程ID;
- USER:进程属主的用户名;
- PR:进程的优先级;
- NI:进程的谦让度;
- VIRT:进程占用的虚拟内存总量;
- RES:进程占用的物理内存总量;
- SHR:进程和其他进程共享的内存总量;
- S:进程的状态(D代表可中断的休眠,R代表运行,S代表休眠,T代表被跟踪或停止,Z代表僵化);
- %CPU:进程使用的CPU时间比例;
- %MEM:进程使用的可用物理内存比例;
- TIME+:自进程启动到目前为止所占用的CPU时间总量;
- COMMAND:进程所对应的命令行名称,也就是启动的程序名;
结束进程
kill
kill命令可以通过PID向进程发送信号。在默认情况下,kill命令会向命令行中列出的所有PID发送TERM信号。但是,你只能使用进程的PID而不能使用其对应的程序名。而且,要发送进程信号,必须是进程的属主或root用户:
$ kill 3940
-bash: kill: (3940) - Operation not permitted
$
pkill
pkill命令可以使用程序名代替PID来终止进程,除此之外,pkill命令也允许使用通配符:
# pkill http*
该命令将“杀死”所有名称以http起始的进程,比如Apahce Web Server的httpd服务。
grep:在文件/文件夹中搜寻指定的字符串
在单个文件中查询指定字符串
grep "string" FILE
在多个文件中查找指定字符串,FILE_PATTERN 表示文件通配符表示。比如当前目录下的所有文件 ./*
grep "string" FILE_PATTERN
查找的过程中忽略大小写
grep -i "string" FILE
使用正则表达式来查找字符串
grep "REGEX" filename
- ? 0到1次
- 0到多次
- 1到多次
- {n} 之匹配n次
- {n,} 最少n次
- {,m} 最多m次
- {n,m} 匹配最少n次,最多m次
匹配字符串前面/后面/前后两边的字符串。(After/Before/Around)。
grep -A 3 -i "example" demo_text # After 连着打印“example” 单词后的2行,共3行
grep -B 3 -i "example" demo_text # Before 连着打印“example” 单词前的2行,共3行
grep -C 3 -i "example" demo_text # Both 连着打印“example” 单词前后的2行,共5行
使用 -r 参数来实现递归的搜索目录
grep -r "string" directory
只匹配整个单词,而不是字符串的一部分
grep -w pattern filename
同时匹配多个关键字或任意关键字
与操作
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
或操作
grep -E 'str1|str2|str3' filename //找出文件(filename)中包含str1或者包含str2或者包含str3的行
grep -E 是使用扩展正则表达式(Extended Regular Expression,ERE)语法进行匹配的选项,它与基本正则表达式(Basic Regular Expression,BRE)相比具有更多的元字符和操作符。
删除文件/目录
rm [选项] 文件或目录
- -f:强制删除
- -r:递归删除,用于删除目录
- -i:交互删除,删除前询问用户
-r
也可删除文件,因此不管删除目录还是文件,一般情况下直接使用-r
或-rf
选项。
vim文本编辑
- vim编辑器有3种操作模式:命令模式、插入模式、Ex模式;
- 刚打开要编辑的文件时,vim编辑器会进入命令模式;
- 按下i键进入插入模式;
- 按下Esc键退出插入模式并返回命令模式;
- Ex模式提供了一个交互式命令行,可以输入额外的命令来控制vim的操作。要进入Ex模式,在命令模式中按下冒号键(:)即可。光标会移动到屏幕底部的消息行处,然后出现冒号,等待输入命令;
1 命令模式
1.1 快速移动光标
- 移动光标至最后一行:
G
- 移动光标至第一行:
gg
- 移动光标至行尾:
$
- 移动光标至行首:
^
- 屏幕向下移动一页:
ctrl+f
- 屏幕向上移动一页:
ctrl+b
1.2 查找
- 所在光标处向下查找字符串“word":
/word
- 所在光标处向上查找字符串“word":
?word
- 查找下一个:
n
- 查找上一个:
N
1.3 删除
- 向后删除一个字符:
x
- 向前删除一个字符:
X
- 删除光标所在一整行:
dd
- 删除光标所在向下n行:
ndd
1.4 复制粘贴
- 复制光标所在的一行:
yy
- 复制光标所在的向下n行:
nyy
- 将复制的数据在光标下一行粘贴:
p
- 将复制的数据在光标上一行粘贴:
P
1.5 撤销/重复
- 撤销上一个操作:
u
- 重复上一个操作:
.
插入模式
- 从光标所在处插入:
i
- 从光标所在行最后一个字符处插入:
A
- 从光标所在行的下一行处插入新的一行并开始插入:
o
- 从光标所在行的上一行处插入新的一行并开始插入:
O
Ex模式
q
:如果未修改缓冲区数据,则退出。q!
:放弃对缓冲区数据的所有修改并退出。w filename
:将文件另存为其他名称。wq
:将缓冲区数据保存到文件中并退出。wq!
:将缓冲区数据强制保存到文件中并退出。
退出当前操作
control+C
清屏
clear