本章节我们将介绍以下几个概念:进程、用户和用户组、重定向、管道。
一、进程
进程是Linux操作系统的核心概念,进程的创建和终止是Linux系统处理外部命令的唯一机制。
1、进程概述
Linux是多任务操作系统,每个运行着的程序实例就是一个进程。每当执行一个外部命令时,系统就为其创建一个进程。Linux进程都需要从某个进程创建出来,此创建者称为“父进程”,被创建的进程称为“子进程”。
1.1 进程启动
进程的启动有以下两种方式:
手工启动
- 前台启动,直接在终端中输入程序名,例如:vim;
- 后台启动,输入程序名时加“&”,例如:vim&;
调度启动,
- at、batch、cron调度,指定系统在特定时间运行程序;(参见1.2 作业控制)
1.2 作业控制
用户有时需要对系统进行一些比较费时而且占用系统资源的维护工作,这些工作适合在系统空闲时间运行,例如深夜。这时候用户就可以使用“作业”机制,事先进行调度安排,指定任务运行的时间,到时系统会自动完成一切工作。Linux中常用at、batch和crontab命令进行作业控制。
1.2.1 at
-
at,在指定的精确时间执行;
at [option] [time]
-d,删除指定的调度作业;
-f file,从指定文件中读取执行的命令;
time,表示方法有绝对表示法和相对表示法,at 11:15;at
now+30 minutexuqing@master: ~ $ at 14:00 warning: commands will be executed using /bin/sh at> touch test.txt ##等待用户进一步输入命令,创建空文档用touch; at> <EOT> ##按下Ctrl+D键,结束at命令 job 6 at wed Jan 23 14:00:00 2017 ##job 6是系统自动 xuqing@master: ~ $ atq ##显示队列中的作业信息 6 wed Jan 23 14:00:00 2017 a xuqing xuqing@master: ~ $ atrm 6 ##删除队列作业
1.2.2 batch
-
batch,在系统负载较低的时候执行;
batch,不需要任何参数;其运行方式仍然是按照在at命令下输入,与上述完全相同;
1.2.3 crontab
-
crontab,用于创建周期运行的任务作业,而at和batch命令设定的任务只能执行一次;
xuqing@master: ~ $ crontab -e ##创建作业 no crontab for xuqing - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/ed 2. /bin/nano 3. /usr/bin/vim.basic 4. /usr/bin/vim.tiny Choose 1-4 [2] :3
执行上述代码后,将打开编辑器。需要按照如下固定格式输入要执行的任务:
分钟 小时 日期 月份 星期 命令
20 10 * * * touch test.txt (* 表示任何时间,每天10:20创建空白文件test.txt)
crontab -l,查询作业
2、进程管理
Linux的进程管理是通过进程管理工具实现的,主要有以下工具命令:
- ps,查询列举进程
- pgrep,按名字查询进程
- pstree,显示进程树
2.1 ps命令
ps命令用于查询进程,显示与当前终端相关的进程,其语法格式如下:
ps [option] [name of process]
a,显示终端上的所有进程,包括其他用户的进程;
u,按用户名和启动时间的顺序来显示进程;
x,显示无控制终端的进程;
l,长格式显示;
-e,显示所有进程;
-f,全格式输出,即可以看到进程的命令行;
-
-u,有效使用者相关的进程;
xuqing@master: ~ $ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 3052 1800 ? Ss 09:54 0.01 /sbin/init
USER,运行进程的用户;
PID,进程的ID号;
%CPU,进程使用的CPU资源百分比;
%MEM ,进程使用的内存资源百分比;
VSZ ,进程使用的虚拟内存(KB);
RSS ,进程使用的物理内存的大小;
TTY ,进程关联的终端,如果没有终端,则显示“?”;
STAT ,进程目前的状态,R正在运行,S休眠,T停止,Z僵死
START ,开始的时间;
TIME ,到目前为止程序已经运行的时间,或休眠和停止之间运行的时间。
COMMAND,进程的程序名;
2.2 pgrep 命令
pgrep命令通过程序名字来查询进程,一般用来判断程序是否正在运行,其语法格式如下:
pgrep [option] [name of process]
- -l,列出程序名和进程ID;
- -o,程序名匹配最早生成的进程;
- -n,程序名匹配最新生成的进程;
2.3 pstree命令
使用pstree命令可以以树形结构显示进程间的关系。pstree有很多参数,一般情况下直接使用pstree命令获取进程间的关系情况。
2.4 kill命令
当某个进程由于某种原因需要用户干预以提前终止它,可以使用kill命令。一般结合ps或者pgrep命令找到ID号,然后用kill命令终止它。其语法格式如下:
kill [信号代码] [ID号]
信号代码是-9,可以省略,表示强制终止;
3、用户和用户组
Linux是多用户操作系统,多个用户可以同时使用系统,而且系统中每个文件(包括目录)和进程都归属于某一用户,因此用户和组的管理是保证Linux系统被安全使用的重要方面。管理用户和组主要是指用户和组的创建操作,另外,Ubuntu采用sudo工具管理用户的系统使用权限。
3.1 图形化操作
使用图形化操作进行用户和组的管理,其具体步骤比较简单,此处省略。
3.2 useradd命令
useradd命令用于创建用户,其语法格式如下:
useradd [option] [username]
其中,用户名是要新建的用户账号名。
-c <注释性描述>,指定一段注释性描述;
-d <用户主目录>,指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录;
-g <组名>,指定用户所属的组;
-s <Shell>,指定用户的登录Shell;
例如:创建新用户book,并指定其主目录是/home/book。
xuqing@master: ~ $ sudo useradd -d /home/book -m book
3.2 userdel 命令
如果一个用户账号不再使用,可以使用userdel命令删除用户,其语法格式如下:
userdel [option] <username>
-r,把用户的主目录一起删除。
xuqing@master: ~ $ sudo userdel -r book
3.3 usermod 命令
根据实际情况,当需要修改用户账号的属性(如用户目录、登录shell、所属组等)时,可以使用usermod命令,其语法格式如下:
usermod [option] [username]
-c <注释性描述>,指定一段注释性描述;
-d <用户主目录>,指定用户主目录;
-g <组名>,指定用户所属的组;
-s <Shell>,指定用户登录Shell;
例如:将book的主目录修改为abc。
xuqing@master: ~ $ usermod -d /home/abc book
3.4 passwd 命令
passwd命令用于指定或修改用户账号的口令,其语法格式如下:
passwd [option] [username]
-l,锁定口令,即禁用账号;
-u,口令解锁;
-d,使账号无口令;
-
-f,强迫用户下次登录时修改口令;
例如:当前用户修改口令。xuqing@master: ~ $ passwd
3.5 groupadd 命令
groupadd命令用来新建用户组,其常见的语法格式如下:
groupadd <groupname>
xuqing@master: ~ $ sudo groupadd ABC
3.6 groupdel 命令
groupdel用来删除已存在的用户组,其常见的语法格式如下:
groupdel <groupname>
xuqing@master: ~ $ sudo groupdel ABC
3.7 相关系统文件
对用户和组进行管理,例如创建用户、删除用户等,本质上是对相关的系统文件进行修改,它们都是文本文件。
- /etc/passwd,用户账号文件;
- /etc/shadow,用户口令文件;
- /etc/group,组账号文件
3.8 sudo工具
在Ubuntu Linux上,当需要以管理员的权限运行命令时需要用到sudo命令。其语法格式如下:
sudo <命令>
执行sudo命令需要通过/etc/sudoers文件进行授权。修改配置时,务必使用visudo工具进行编辑,该工具会自动对配置语法进行检查,若发现错误,则在保存退出时给出警告。
4、重定向
在Linux系统中,默认的输入设备是键盘,输出设备是显示器,重定向的主要含义是将“输入/输出”设备转移到另一个输入/输出设备。
4.1 输出重定向
输出重定向用大于号“>”表示,它用来断开命令的输出和显示器之间的联系,将输出文件与标准输出建立关联。其语法格式如下:
命令 > 文件
命令 >> 文件
上述第一条命令将命令的执行结果送至指定的文件中,若文件已存在,则覆盖;第二条命令将命令的执行结果追加到指定文件中。
xuqing@master: ~ $ ls -l /usr > list.txt
cat命令结合输出重定向,可以实现对文件进行键盘输入,例如:使用cat命令从键盘上键入内容至文件cat.txt中。
xuqing@master: ~ $ cat > cat.txt
hello
good
^C
xuqing@master: ~ $
4.2 输入重定向
输入重定向用小于号“<”表示,它用来断开键盘和“命令”的标准输入之间的关联,然后将输出文件关联到标准输入。其语法格式如下:
<命令> < <文件>
xuqing@master: ~ $ cat < list.txt
5、管道
在Linux中,管道是一种使用非常频繁的进程通信机制。从本质上说,管道也是一种文件。Linux系统中通过管道操作将一条命令的输出作为另一条命令的标准输入。管道的操作符是一个竖杠“|’”。
xuqing@master: ~ $ ls /usr/include | grep '^lib' > file.txt
6、显示
- date,查看日期
- cal ,查看日历
- uname,显示系统信息
- history ,显示历史的命令输入
7、环境变量
- setenv TEST 123 ,设置环境变量TEST为123
- unsetenv TEST, 取消环境变量TEST。
8、初始化文件
source file
9、切换用户
su - username