1.ps命令探查进程
ubuntu@VM-150-204-ubuntu:~$ ps
PID TTY TIME CMD
2836 pts/0 00:00:00 bash
11136 pts/0 00:00:00 ps
上例中的基本输出显示了程序的进程号(PID)、它们运行在哪个终端(TTY)以及进程已用的CPU时间。
如果要查看系统上运行的所有进程,可以用-ef参数:
ubuntu@VM-150-204-ubuntu:~$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Sep01 ? 00:00:01 /sbin/init
root 2 0 0 Sep01 ? 00:00:00 [kthreadd]
root 3 2 0 Sep01 ? 00:00:03 [ksoftirqd/0]
root 5 2 0 Sep01 ? 00:00:00 [kworker/0:0H]
root 7 2 0 Sep01 ? 00:00:04 [rcu_sched]
root 8 2 0 Sep01 ? 00:00:00 [rcu_bh]
root 9 2 0 Sep01 ? 00:00:00 [migration/0]
...
udev-bridge --daemon
root 262 1 0 Sep01 ? 00:00:00 /lib/systemd/systemd-udevd --dae
message+ 338 1 0 Sep01 ? 00:00:00 dbus-daemon --system --fork
root 359 1 0 Sep01 ? 00:00:00 /lib/systemd/systemd-logind
syslog 374 1 0 Sep01 ? 00:00:02 rsyslogd
...
/usr/sbin/sshd -D
root 2787 1580 0 19:44 ? 00:00:00 sshd: root@pts/0
root 2821 2787 0 19:44 pts/0 00:00:00 -bash
root 2835 2821 0 19:44 pts/0 00:00:00 su ubuntu
ubuntu 2836 2835 0 19:44 pts/0 00:00:00 bash
ubuntu 11307 2836 0 22:21 pts/0 00:00:00 ps -ef
这些扩展的列包含了如下信息:
- UID:启动这些进程的用户
- PID:进程的进程号
- PPID:父进程的进程号(如果该进程是由另一个进程启动的)
- C:进程周期中的CPU利用率
- STIME:进程启动时的系统时间
- TTY进程启动时的终端
- TIME:运行进程需要的累计CPU时间
- CMD:启动的程序名称
2.top命令实时监测进程
ubuntu@VM-150-204-ubuntu:~$ top
top - 22:30:05 up 3 days, 11:39, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 75 total, 1 running, 74 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.0 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 1025964 total, 606560 used, 419404 free, 186740 buffers
KiB Swap: 0 total, 0 used, 0 free. 315028 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1064 root 20 0 52844 8136 1792 S 0.3 0.8 5:20.55 barad_agent
1 root 20 0 4312 2240 1392 S 0.0 0.2 0:01.51 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:03.18 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root 20 0 0 0 0 S 0.0 0.0 0:04.84 rcu_sched
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
10 root rt 0 0 0 0 S 0.0 0.0 0:00.88 watchdog/0
11 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
17 root 0 -20 0 0 0 S 0.0 0.0 0:00.56 kworker/u3:0
18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd
输出的第一部分显示的是系统的概况:第一行显示了当前时间、系统的运行时间、登入的用户数以及系统的平均负载。
平均负载有3个值:最近1分钟的、最近5分钟的和最近15分钟的。通常如果系统的负载值超过了2,说明系统比较繁忙。
第二行显示了进程信息:多少进程处在运行、休眠、停止、或是僵化状态(僵化状态是指进程完成了,但父进程没有响应)。
列表信息介绍如下:
- PR:进程的优先级
- NI:进程的谦让度值。
- VIRT:进程占用的虚拟内存量
- RES:进程占用的物理内存总量
- SHR:进程和其他进程共享的内存总量
- S:进程的状态(D代表可中断的休眠状态,R代表运行状态,S代表休眠状态,T代表跟踪状态或停止状态,Z代表僵化状态)
- TIME+:自进程启动到目前为止的CPU时间总量
3.结束进程
(1)kill命令
kill命令可通过PID给进程发信号。默认情况下,kill命令会向命令行中列出的全部PID发送一个TERM信号。TERM信号告诉进程可能的话停止运行。
# kill -s KILL 3940
-s参数支持指定其他信号,其中kill信号的强制性最强
(2)killall命令
它支持通过进程名而不是进程号来结束进程,killall命令也支持通配符。
# killall http*
上例的命令结束了所有以http开头的进程,比如Apache Web服务器的httpd服务。
4.挂载存储媒体
(1)mount命令
默认情况下,mount命令会输出当前系统上挂载的设备列表:
ethan@ethan-ThinkPad:~$ mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=1863432k,nr_inodes=465858,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
...
/dev/sda1 on /boot type ext2 (rw,relatime,block_validity,barrier,user_xattr,acl,stripe=4)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=377620k,mode=700,uid=1000,gid=1000)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
/dev/sdb4 on /media/ethan/GSP1RMCULXF type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)
mount命令提供如下四部分的信息
- 媒体的设备文件名
- 媒体挂载到虚拟目录的挂载点
- 文件系统的类型
- 已挂载媒体的访问状态
手动将U盘挂载到/media/disk,可用下面的命令:
mount -t type device directory
# mount -t vfat /dev/sdb4 /media/disk
(2)umount命令
umount命令支持通过设备文件或者是挂载点来指定要卸载的设备。
ethan@ethan-ThinkPad:/media$ sudo umount /dev/sdb4
(3)df命令
df命令用来查看所有已挂载磁盘的使用情况:
ethan@ethan-ThinkPad:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 1863432 0 1863432 0% /dev
tmpfs 377620 6240 371380 2% /run
/dev/mapper/ubuntu--kylin--vg-root 476232744 6149300 445869124 2% /
...
/dev/sda1 482922 68238 389750 15% /boot
tmpfs 377620 44 377576 1% /run/user/1000
/dev/sdb4 7577472 12004 7565468 1% /media/ethan/GSP1RMCULXF
命令输出如下:
* 设备的设备文件位置
* 能容纳多少1K字节的大小块
* 已用了多少个1K字节的大小的块
* 还有多少个1K字节的大小块可用
* 已用空间所占比例
* 设备挂载到了哪个挂载点上
df -h会把输出中的磁盘空间按人类可读的形式显示
(4)du命令
du命令可以显示某个特定目录的磁盘使用情况,这是用来判断你系统上某个目录下是不是有超大文件的快速方法。
ubuntu@VM-150-204-ubuntu:~$ sudo du -h
[sudo] password for ubuntu:
4.0K ./.cache
4.0K ./.ssh
36K .
5.sort命令用来对数据进行排序
$ sort file1
6.grep命令搜索数据
grep [options] pattern [file]
grep命令会到输入中或你指定的文件中查找包含匹配指定模式的字符的行。grep的输出就是包含了匹配模式的行。
$ grep t file
two
three
如果要进行反向搜索,可加-v参数:
$ grep -v t file1
one
four
five
grep命令可用基本的Unix风格正则表达式来匹配模式。egrep命令是grep的一个衍生,支持POSIX扩展正则表达式。
7.压缩数据
Linux文件的压缩工具:
工具 | 文件扩展名 | 描述 |
---|---|---|
bzip2 | .bz2 | 采用Burrows-Wheeler块排序文本压缩算法和霍夫曼编码 |
compress | .Z | 原始的Unix文件压缩工具,逐渐消失中 |
gzip | .gz | GNU压缩工具,用Lempel-Ziv编码 |
zip | .zip | Windows上PKZIP工具的Unix实现 |
(1)bzip2工具
- bzip2:用来压缩文件
- bzcat:用来显示压缩文本文件的内容
- bunzip2:用来解压压缩后的.bz2文件
- bzip2recover:用来尝试恢复损毁的压缩文件
(2)gzip工具
Linux上最流行的文件压缩工具
- gzip:用来压缩文件
- gzcat:用来查看压缩过的文本文件的内容
- gunzip:用来解压文件
(3)zip工具
zip工具和Windows下的zip是兼容的。
- zip:创建一个压缩文件,包含指定的文件和目录
- zipcloak:创建一个加密的压缩文件
- zipnote:从zip中提取批注
- unzip:从压缩过的zip文件中提取文件和目录
zip工具的强大之处在于,它能将整个目录下的文件都压缩进单个文件。这让它成为整个目录结构的理想工具
ethan@ethan-ThinkPad:~$ zip -r testzip test1
adding: test1/ (stored 0%)
adding: test1/helloworld (deflated 69%)
adding: test1/helloworld.cpp (deflated 19%)
adding: test1/helloworld.cpp~ (deflated 18%)
这个例子创建了一个叫test.zip的zip文件,并递归目录test1把找到的每个文件和目录都加进该zip文件
8.归档数据
目前Unix和Linux上最广泛使用的归档工具是tar命令而不是zip命令。
tar命令的语法格式如下:
tar function [option] object1 object2...
例:
tar -cvf test.tar test/ test2/
上面的命令创建了一个含有test和test2目录内容的叫test.tar的归档文件。接着,用这个命令:
tar -tf test.tar
列出tar文件test.tar的内容,但并不解压文件。最后,用命令
tar -xvf test.tar
来从tar文件test.tar提取内容。
注:当看到文件名以.tgz结尾,这些是gzip压缩过的tar文件,可以用命令tar -zxvf filename.tgz来解压