有没有从事运维多年,却不知道ps -ef 和ps aux 这俩不同选项的区别呢?
今天来讲讲他们的不同
先看看他们显示的内容
$ ps -ef | head -n 2
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 8月03 ? 00:01:09 /sbin/init splash
$ ps aux | head -n 2
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 166868 10976 ? Ss 8月03 1:09 /sbin/init splash
抛去相同点PID,TTY,TIME,CMD
剩下的有什么不同呢?
ps -ef 是System V 风格,而ps aux 是BSD风格
SystemV和BSD风格区别
目前,Unix操作系统不管其内核如何,其操作风格上主要分为SystemV(目前一般采用其第4个版本SVR4)和BSD两种。其代表操作系统本别是Solaris和FreeBSD。当然,在SunOS4(Solaris1.x)之前,Solaris采用了BSD的风格,而2.x之后,Solaris投奔了SystemV阵营,不得不说是一个叛逆。
SystemV的鼻祖正是1969年AT&T开发的Unix,随着1993年Novell收购AT&T后开放了Unix的商标,SystemV的风格也逐渐成为Unix厂商的标准。BSD的鼻祖是加州大学伯克利分校在1975年开发的BSDUnix,后被开源组织发展为现在众多的*BSD操作系统。
它们之间的区别主要为:
Sytem V BSD Root脚本位置 /etc/init.d /etc/rc.d 默认Shell Bshell Cshell 文件系统数据 /etc/mnttab /etc/mtab 内核位置 /UNIX /vmUnix 打印机设备 lp rlp 字符串函数 memcopy bcopy 终端初始化设置文件 /etc/initab /etc/ttys 终端控制 termio termios 这里需要说明的是:Linux不能称为"标准的Unix“而只被称为"Unix Like"原因有一部分就是来自它的操作风格介乎两者之间,而且不同的厂商为了照顾不同的用户,各linux发行版本的操作风格之间也有不小的出入。
BSD(BerkeleySoftware Distribution,伯克利软件套件)是Unix的衍生系统,1970年代由伯克利加州大学(UniversityofCalifornia, Berkeley)开创。BSD用来代表由此派生出的各种套件集合。
BSD 常被当作工作站级别的Unix系统,这得归功于BSD 使用授权非常地宽松,许多1980年代成立的计算机公司,不少都从BSD 中获益,比较著名的例子如DEC的Ultrix,以及Sun公司的SunOS。1990年代,BSD 很大程度上被SystemV 4.x版以及OSF/1系统所取代,但其开源版本被采用,促进了因特网的开发。
System V, 曾经也被称为**AT&T SystemV**,是Unix操作系统众多版本中的一支。它最初由AT&T开发,在1983年第一次发布。一共发行了4个SystemV的主要版本:版本1、2、3和4。System V Release4,或者称为SVR4,是最成功的版本,成为一些UNIX共同特性的源头,例如”SysV 初始化脚本“(/etc/init.d),用来控制系统启动和关闭,SystemV Interface Definition (SVID)是一个SystemV如何工作的标准定义。
AT&T出售运行SystemV的专有硬件,但许多(或许是大多数)客户在其上运行一个转售的版本,这个版本基于AT&T的实现说明。流行的SysV派生版本包括DellSVR4和Bull SVR4。当今广泛使用的System V版本是SCO OpenServer,基于SystemV Release 3,以及SUN Solaris和SCO UnixWare,都基于SystemV Release 4。
SystemV是AT&T的第一个商业UNIX版本(UNIXSystem III)的加强。传统上,System V被看作是两种UNIX"风味"之一(另一个是BSD)。然而,随着一些并不基于这两者代码的UNIX实现的出现,例如Linux和QNX,这一归纳不再准确,但不论如何,像POSIX这样的标准化努力一直在试图减少各种实现之间的不同。
linux或unix有两种方式的启动模式:System V和BSD
最大的不同就是:System V能够为不同的运行级别定义启动哪些服务,比如:
#0 - 停机(千万不要把initdefault设置为0 )
#1 - 单用户模式
#2 - 多用户,但是没有NFS
#3 - 完全多用户模式(无界面的黑框框)
#4 - 没有用到
#5 - X11(图形界面)
#6 - 重新启动(千万不要把initdefault设置为6 )
采用System V的启动模式,可以灵活的定义在 3 的运行级别下开机启动 FTP 服务,而在 5 的运行级别下开机不启动 FTP 服务。
采用BSD没有运行级别的概念。启动脚本的不同:
BSD启动方式:在/etc/rc.d和/usr/local/etc/rc.d中存放启动服务的脚本,在/etc/rc.conf中设置xxx_enable="YES"或xxx_enable="NO"随系统启动启动或关闭服务,该文件是/etc/defaults/rc.conf的一个子集。BSD启动方式没有运行级别,简单,但缺乏多样性。
System V启动方式:也就是linux采用的启动方式,启动服务的脚本放在/etc/rc.d/init.d下面,你能够在/etc/rc.d目录下面看到很多类似 rc0.d或rc2.d这样的目录,这就是为每个不同的运行级别定义启动哪些服务的目录,数字0 1 2就代表运行级别,进入这些目录,能看到很多链接文件,以S或K开头的这样文件分别表示在当前运行级别下是否开启这个服务,这些文件分别链接到/etc/rc.d/init.d/下面的很多可执行文件。
需要注意的是:在一些System V启动模式的操作系统上(如 RedHat9),除了有/etc/rc.d/init.d/这个目录,还有/etc/init.d/这个目录,其实 ls -l 一下可以看到,/etc/init.d/这个目录 本来就是链接到/etc/rc.d/init.d/的一个链接目录。
再看下这两个命令的输出
$ ps -ef | head -n 2
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 8月03 ? 00:01:09 /sbin/init splash
UID:用户
PID:进程ID
PPID:父进程ID
C:处理器利用率(废弃率)(CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高 )
STMIE:进程启动时间(START TIME 缩写)
TTY:控制终端的完整名称
TIME:累计CPU时间
CMD:正在被执行的进程命令
$ ps aux | head -n 2
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 166868 10976 ? Ss 8月03 1:09 /sbin/init splash
USER:跟UID一样,代表使用命令用户
PID:进程ID
%CPU:CPU使用百分比
%MEM:物理内存使用百分比
VSZ:占用虚拟内存大小(单位KB)
RSS:占用物理内存大小(单位KB)
TTY:控制终端的完整名称
STAT:状态码(其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等 )
START:进程的启动时间
TIME:CPU时间,即进程使用CPU总时间
COMMAND:正在被执行的进程命令
如果想看某个进程的cpu和内存使用率,不想使用top等命令的话,可以使用ps aux
如果想看父进程id和完整的command命令,就使用ps -ef