Linux的前世今生2

六、常用基本命令

7.1帮助命令

7.1.1 man获得帮助信息

1.基本语法

man [命令或配置文件] (功能描述:获得帮助信息)

2.显示说明

表1-6

信息功能

NAME命令的名称和单行描述

SYNOPSIS怎样使用命令

DESCRIPTION命令功能的深入讨论

EXAMPLES  怎样使用命令的例子

SEE ALSO相关主题(通常是手册页)

3.案例实操

(1)查看ls命令的帮助信息

[root@wwy ~]# man ls

7.1.2 help获得shell内置命令的帮助信息

1.基本语法

help命令 (功能描述:获得shell内置命令的帮助信息)

2.案例实操

(1)查看cd命令的帮助信息

[root@wwy ~]# help cd

7.1.3常用快捷键

表1-7常用快捷键

常用快捷键功能

ctrl + c停止进程

ctrl+l清屏;彻底清屏是:reset

ctrl + q退出

善于用tab键提示(更重要的是可以防止敲错)

上下键查找执行过的命令

ctrl +altlinux和Windows之间切换

7.2文件目录类

7.2.1 pwd显示当前工作目录的绝对路径

pwd: print working directory打印工作目录

1.基本语法

pwd (功能描述:显示当前工作目录的绝对路径)

2.案例实操

(1)显示当前工作目录的绝对路径

[root@wwy ~]# pwd

/root

7.2.2 ls列出目录的内容

ls:list列出目录内容

[if !supportLists]1. [endif]基本语法

ls [选项] [目录或是文件]

2.选项说明

表1-8选项说明

选项功能

-a全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)

-l长数据串列出,包含文件的属性与权限等等数据;(常用)

-h人性化显示

3.显示说明

每行列出的信息依次是:文件类型与权限 链接数 文件属主 文件属组 文件大小用byte来表示 建立或最近修改的时间 名字 

4.案例实操

(1)查看当前目录的所有内容信息

[root@wwy Desktop]# ls -al

total 8

drwxr-xr-x.  2 root root 4096 Nov 24 13:02 .

dr-xr-x---. 23 root root 4096 Nov 24 08:37 ..

-rw-r--r--.  1 root root    0 Nov 24 13:02 01.py

7.2.3 cd切换目录

cd:Change Directory切换路径

1.基本语法

cd  [参数]

2.参数说明

表1-9参数说明

参数功能

cd绝对路径切换路径

cd相对路径切换路径

cd ~或者cd回到自己的家目录

cd -回到上一次所在目录

cd ..回到当前目录的上一级目录

cd -P跳转到实际物理路径,而非快捷方式路径

3.案例实操

(1)使用绝对路径切换到root目录

[root@wwy Desktop]# cd /root/

(2)使用相对路径切换到“公共的”目录

[root@wwy ~]# cd Public/

(3)表示回到自己的家目录,亦即是 /root 这个目录

[root@wwy Public]# cd ~

(4)cd- 回到上一次所在目录

[root@wwy ~]# cd -

(5)表示回到当前目录的上一级目录,亦即是 “/root/公共的”的上一级目录的意思;

[root@wwy Public]# cd ..

7.2.4 mkdir创建一个新的目录

mkdir:Make directory建立目录

1.基本语法

mkdir [选项]要创建的目录

2.选项说明

表1-10选项说明

选项功能

-p创建多层目录

3.案例实操

(1)创建一个目录

[root@wwy ~]# mkdir xiyou

[root@wwy ~]# mkdir xiyou/mingjie

(2)创建一个多级目录

[root@wwy ~]# mkdir -p xiyou/dssz/meihouwang

7.2.5 rmdir删除一个空的目录

rmdir:Remove directory移动目录

1.基本语法:

rmdir要删除的空目录

2.案例实操

(1)删除一个空的文件夹

[root@wwy ~]# rmdir xiyou/dssz/meihouwang/

7.2.6 touch创建空文件

1.基本语法

touch文件名称

2.案例实操

[root@wwy ~]# touch xiyou/dssz/sunwukong.txt

7.2.7cp复制文件或目录

1.基本语法

cp [选项] source dest (功能描述:复制source文件到dest)

2.选项说明

表1-11选项说明

选项功能

-r递归复制整个文件夹

3.参数说明

表1-12参数说明

参数功能

source源文件

dest目标文件

4.经验技巧

强制覆盖不提示的方法:\cp

5.案例实操

(1)复制文件

[root@wwy ~]# cp xiyou/dssz/sunwukong.txt xiyou/mingjie/

(2)递归复制整个文件夹

[root@wwy ~]# cp -r xiyou/dssz/ ./

7.2.8rm移除文件或目录

1.基本语法

rm [选项] deleteFile (功能描述:递归删除目录中所有内容)

2.选项说明

表1-13选项说明

选项功能

-r递归删除目录中所有内容

-f强制执行删除操作,而不提示用于进行确认。

-v显示指令的详细执行过程

3.案例实操

(1)删除目录中的内容

[root@wwy ~]# rm -f xiyou/mingjie/sunwukong.txt

(2)递归删除目录中所有内容

[root@wwy ~]# rm -rf dssz/

7.2.9 mv移动文件与目录或重命名

1.基本语法

(1)mv oldNameFile newNameFile (功能描述:重命名)

(2)mv /temp/movefile /targetFolder (功能描述:移动文件)

2.案例实操

(1)重命名

[root@wwy ~]# mv xiyou/dssz/sunwukong.txt xiyou/dssz/houge.txt

(2)移动文件

[root@wwy ~]# mv xiyou/dssz/houge.txt ./

7.2.10 cat查看文件内容

查看文件内容,从第一行开始显示。

1.基本语法

cat  [选项] 要查看的文件

2.选项说明

表1-14

选项功能描述

-n显示所有行的行号,包括空行。

3.经验技巧

一般查看比较小的文件,一屏幕能显示全的

4.案例实操

(1)查看文件内容并显示行号

[root@wwy ~]# cat -n houge.txt

7.2.11 more文件内容分屏查看器

more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干快捷键,详见操作说明。

1.基本语法

more要查看的文件

2.操作说明

表1-15操作说明

操作功能说明

空白键(space)代表向下翻一页;

Enter代表向下翻『一行』;

q代表立刻离开more ,不再显示该文件内容。

Ctrl+F向下滚动一屏

Ctrl+B返回上一屏

=输出当前行的行号

:f输出文件名和当前行的行号

3.案例实操

(1)采用more查看文件

[root@wwy ~]# more smartd.conf

7.2.12 less分屏显示文件内容

less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率

1.基本语法

less要查看的文件

2.操作说明

表1-16操作说明

操作功能说明

空白键向下翻动一页;

[pagedown]向下翻动一页

[pageup]向上翻动一页;

/字串向下搜寻『字串』的功能;n:向下查找;N:向上查找;

?字串向上搜寻『字串』的功能;n:向上查找;N:向下查找;

q  离开less 这个程序;

4.案例实操

(1)采用less查看文件

[root@wwy~]# less smartd.conf

7.2.13 echo

echo输出内容到控制台

[if !supportLists]1. [endif]基本语法

echo [选项] [输出内容]

选项:

-e:  支持反斜线控制的字符转换

控制字符  作用

\\  输出\本身

\n  换行符

\t  制表符,也就是Tab键

[if !supportLists]2. [endif]案例实操

[root@wwy ~]# echo "hello\tworld"

hello\tworld

[root@wwy ~]# echo -e "hello\tworld"

hello   world

7.2.14head显示文件头部内容

head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容。

[if !supportLists]1. [endif]基本语法

head 文件       (功能描述:查看文件头10行内容)

head -n 5文件(功能描述:查看文件头5行内容,5可以是任意行数)

2.选项说明

表1-18

选项功能

-n <行数>指定显示头部内容的行数

3.案例实操

(1)查看文件的头2行

[root@wwy ~]# head -n 2 smartd.conf

7.2.15tail输出文件尾部内容

tail用于输出文件中尾部的内容,默认情况下tail指令显示文件的后10行内容。

1. 基本语法

(1)tail  文件 (功能描述:查看文件后10行内容)

(2)tail  -n5文件 (功能描述:查看文件后5行内容,5可以是任意行数)

(3)tail  -f文件 (功能描述:实时追踪该文档的所有更新)

2. 选项说明

表1-19

选项功能

-n<行数>输出文件尾部n行内容

-f显示文件最新追加的内容,监视文件变化

3.案例实操

(1)查看文件头1行内容

[root@wwy ~]# tail -n 1 smartd.conf

(2)实时追踪该档的所有更新

[root@wwy ~]# tail -f houge.txt

7.2.16 > 覆盖和>>追加(重定向)

1.基本语法

(1)ll>文件(功能描述:列表的内容写入文件a.txt中(覆盖写))

(2)ll >>文件(功能描述:列表的内容追加到文件aa.txt的末尾)

(3)cat文件1 > 文件2 (功能描述:将文件1的内容覆盖到文件2)

(4)echo “内容”>>文件

2.案例实操

(1)将ls查看信息写入到文件中

[root@wwy ~]# ls -l>houge.txt

(2)将ls查看信息追加到文件中

[root@wwy ~]# ls -l>>houge.txt

(3)采用echo将hello单词追加到文件中

[root@wwy ~]# echo hello>>houge.txt

7.2.17 ln软链接

软链接也成为符号链接,类似于windows里的快捷方式,有自己的数据块,主要存放了链接其他文件的路径。

1.基本语法

ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)

2.经验技巧

删除软链接:rm -rf软链接名,而不是rm -rf软链接名/

查询:通过ll就可以查看,列表属性第1位是l,尾部会有位置指向。

3.案例实操

(1)创建软连接

[root@wwy ~]# mv houge.txt xiyou/dssz/

[root@wwy ~]# ln -s xiyou/dssz/houge.txt ./houzi

[root@wwy ~]# ll

lrwxrwxrwx. 1 root    root      20 6月  17 12:56 houzi -> xiyou/dssz/houge.txt

(2)删除软连接

[root@wwy ~]# rm -rf houzi

(3)进入软连接实际物理路径

[root@wwy ~]# ln -s xiyou/dssz/ ./dssz

[root@wwy ~]# cd -P dssz/

7.2.18 history查看已经执行过历史命令

1.基本语法

history (功能描述:查看已经执行过历史命令)

2.案例实操

(1)查看已经执行过的历史命令

[root@wwy ~]# history

7.3时间日期类

1.基本语法

date [OPTION]... [+FORMAT]

2.选项说明

表1-20

选项功能

-d<时间字符串>显示指定的“时间字符串”表示的时间,而非当前时间

-s<日期时间>设置系统日期时间

3.参数说明

表1-21

参数功能

<+日期时间格式>指定显示时使用的日期时间格式

7.3.1 date显示当前时间

1.基本语法

(1)date (功能描述:显示当前时间)

(2)date +%Y (功能描述:显示当前年份)

(3)date +%m (功能描述:显示当前月份)

(4)date +%d (功能描述:显示当前是哪一天)

(5)date "+%Y-%m-%d %H:%M:%S" (功能描述:显示年月日时分秒)

2.案例实操

(1)显示当前时间信息

[root@wwy ~]# date

Sun Nov 24 14:06:21 PST 2019

(2)显示当前时间年月日

[root@wwy ~]# date +%Y%m%d

20191124

(3)显示当前时间年月日时分秒

[root@wwy ~]# date "+%Y-%m-%d %H:%M:%S"

2019-11-24 14:07:13

7.3.2 date显示非当前时间

1.基本语法

(1)date -d '1 days ago' (功能描述:显示前一天时间)

(2)date -d '-1 days ago' (功能描述:显示明天时间)

2.案例实操

(1)显示前一天

[root@wwy ~]# date -d '1 days ago'

Sat Nov 23 14:08:21 PST 2019

(2)显示明天时间

[root@wwy ~]# date -d '-1 days ago'

Mon Nov 25 14:08:45 PST 2019

7.3.3 date设置系统时间

1.基本语法

date -s字符串时间

2.案例实操

(1)设置系统当前时间

[root@wwy ~]# date -s "2017-06-19 20:52:18"

Mon Jun 19 20:52:18 PDT 2017

7.3.4 cal查看日历

1.基本语法

cal [选项] (功能描述:不加选项,显示本月日历)

2.选项说明

表1-22

选项功能

具体某一年显示这一年的日历

3.案例实操

(1)查看当前月的日历

[root@wwy ~]# cal

      June 2017     

Su Mo Tu We Th Fr Sa

             1  2  3

 4  5  6  7  8  9 10

11 12 13 14 15 16 17

18 19 20 21 22 23 24

25 26 27 28 29 30

(2)查看2017年的日历

[root@wwy ~]# cal 2017

7.4用户管理命令

7.4.1 useradd添加新用户

1.基本语法

useradd用户名 (功能描述:添加新用户)

useradd -g组名 用户名 (功能描述:添加新用户到某个组)

2.案例实操

(1)添加一个用户

[root@wwy ~]# useradd tangseng

[root@wwy ~]# ll /home/

total 8

drwx------.  4 tangseng tangseng 4096 Jun 19 20:56 tangseng

drwx------. 24 wwy      wwy      4096 Nov 22  2019 wwy

7.4.2 passwd设置用户密码

1.基本语法

passwd用户名 (功能描述:设置用户密码)

2.案例实操

(1)设置用户的密码

[root@wwy ~]# passwd tangseng

7.4.3 id 查看用户是否存在

1.基本语法

id用户名

2.案例实操

(1)查看用户是否存在

[root@wwy ~]# id tangseng

uid=501(tangseng) gid=501(tangseng) groups=501(tangseng)

7.4.4cat  /etc/passwd查看创建了哪些用户

1)基本语法

[root@wwy ~]# cat /etc/passwd

7.4.5su切换用户

su: swith user切换用户

1.基本语法

su用户名称   (功能描述:切换用户,只能获得用户的执行权限,不能获得环境变量)

su -用户名称 (功能描述:切换到用户并获得该用户的环境变量及执行权限)

2.案例实操

(1)切换用户

[root@wwy ~]#su tangseng

[root@wwy ~]#echo $PATH

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@wwy ~]#exit

[root@wwy ~]#su - tangseng

[root@wwy ~]#echo $PATH

/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/tangseng/bin

7.4.6 userdel删除用户

1.基本语法

(1)userdel  用户名 (功能描述:删除用户但保存用户主目录)

(2)userdel -r 用户名 (功能描述:用户和用户主目录,都删除)

2.选项说明

表1-23

选项功能

-r删除用户的同时,删除与用户相关的所有文件。

3.案例实操

(1)删除用户但保存用户主目录

[root@wwy ~]#userdel tangseng

[root@wwy ~]#ll /home/

(2)删除用户和用户主目录,都删除

[root@wwy ~]#useradd zhubajie

[root@wwy ~]#ll /home/

[root@wwy ~]#userdel -r zhubajie

[root@wwy ~]#ll /home/

7.4.7 who查看登录用户信息

1.基本语法

(1)whoami (功能描述:显示自身用户名称)

(2)who am i(功能描述:显示登录用户的用户名)

2.案例实操

(1)显示自身用户名称

[root@wwy opt]# whoami

(2)显示登录用户的用户名

[root@wwy opt]# who am i

7.4.8 sudo 设置普通用户具有root权限

1.添加wengwenyu用户,并对其设置密码。

[root@wwy ~]#useradd wengwenyu

[root@wwy ~]#passwd wengwenyu

2.修改配置文件

[root@wwy ~]#vi /etc/sudoers

修改/etc/sudoers文件,找到下面一行(91行),在root下面添加一行,如下所示:

## Allow root to run any commands anywhere

root    ALL=(ALL)     ALL

wengwenyu   ALL=(ALL)     ALL

或者配置成采用sudo命令时,不需要输入密码

## Allow root to run any commands anywhere

root      ALL=(ALL)     ALL

wengwenyu   ALL=(ALL)     NOPASSWD:ALL

修改完毕,现在可以用wengwenyu帐号登录,然后用命令 sudo,即可获得root权限进行操作。

3.案例实操

(1)用普通用户在/opt目录下创建一个文件夹

[wengwenyu@wwy opt]$ sudo mkdir module

[root@wwy opt]# chown wengwenyu:wengwenyu module/

7.4.9 usermod修改用户

1.基本语法

usermod -g用户组 用户名

2.选项说明

表1-24

选项功能

-g修改用户的初始登录组,给定的组必须存在

3.案例实操

(1)将用户加入到用户组

[root@wwy opt]#usermod -g root zhubajie

7.5用户组管理命令

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux系统对用户组的规定有所不同,

如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。

7.5.1 groupadd新增组

1.基本语法

groupadd组名

2.案例实操

(1)添加一个xitianqujing组

[root@wwy opt]#groupadd xitianqujing

7.5.2 groupdel删除组

1.基本语法

groupdel组名

2.案例实操

(1)删除xitianqujing组

[root@wwy opt]# groupdel xitianqujing

7.5.3 groupmod修改组

1.基本语法

groupmod -n新组名 老组名

2.选项说明

表1-25

选项功能描述

-n<新组名>指定工作组的新组名

3.案例实操

(1)修改wengwenyu组名称为wengwenyu1

[root@wwy ~]#groupadd xitianqujing

[root@wwy ~]# groupmod -n xitian xitianqujing

7.5.4 cat  /etc/group查看创建了哪些组

1.基本操作

[root@wwy wengwenyu]# cat  /etc/group

7.6文件权限类

7.6.1文件属性

Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。在Linux中我们可以使用ll或者ls -l命令来显示一个文件的属性以及文件所属的用户和组。

1.从左到右的10个字符表示,如图1-154所示:

图1-154 文件属性

如果没有权限,就会出现减号[ - ]而已。从左至右用0-9这些数字来表示:

(1)0首位表示类型

在Linux中第一个字符代表这个文件是目录、文件或链接文件等等

-代表文件

d代表目录

l链接文档(link file);

(2)第1-3位确定属主(该文件的所有者)拥有该文件的权限。---User

(3)第4-6位确定属组(所有者的同组用户)拥有该文件的权限,---Group

(4)第7-9位确定其他用户拥有该文件的权限 ---Other

2.rxw作用文件和目录的不同解释

(1)作用到文件:

[ r ]代表可读(read): 可以读取,查看

[ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.

[ x ]代表可执行(execute):可以被系统执行

(2)作用到目录:

[ r ]代表可读(read): 可以读取,ls查看目录内容

[ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录

[ x ]代表可执行(execute):可以进入该目录

3.案例实操

[root@wwy ~]# ll

总用量104

-rw-------. 1 root root  1248 1月   8 17:36 anaconda-ks.cfg

drwxr-xr-x. 2 root root  4096 1月  12 14:02 dssz

lrwxrwxrwx. 1 root root    20 1月  12 14:32 houzi -> xiyou/dssz/houge.tx

文件基本属性介绍,如图1-155所示:

图1-155 文件基本属性介绍

(1)如果查看到是文件:链接数指的是硬链接个数。创建硬链接方法

ln [原文件] [目标文件]  

[root@wwy ~]# ln xiyou/dssz/houge.txt ./hg.txt

(2)如果查看的是文件夹:链接数指的是子文件夹个数。

[root@wwy ~]# ls -al xiyou/

总用量16

drwxr-xr-x.  4 root root 4096 1月  12 14:00 .

dr-xr-x---. 29 root root 4096 1月  12 14:32 ..

drwxr-xr-x.  2 root root 4096 1月  12 14:30 dssz

drwxr-xr-x.  2 root root 4096 1月  12 14:04 mingjie

7.6.2 chmod改变权限

1.基本语法

如图1-156所示

图1-156 基本语法

第一种方式变更权限

chmod  [{ugoa}{+-=}{rwx}]文件或目录

第二种方式变更权限

chmod  [mode=421 ]  [文件或目录]

2.经验技巧

u:所有者  g:所有组  o:其他人  a:所有人(u、g、o的总和)

r=4 w=2 x=1        rwx=4+2+1=7

3.案例实操

(1)修改文件使其所属主用户具有执行权限

[root@wwy ~]# cp xiyou/dssz/houge.txt ./

[root@wwy ~]# chmod u+x houge.txt

(2)修改文件使其所属组用户具有执行权限

[root@wwy ~]# chmod g+x houge.txt

(3)修改文件所属主用户执行权限,并使其他用户具有执行权限

[root@wwy ~]# chmod u-x,o+x houge.txt

(4)采用数字的方式,设置文件所有者、所属组、其他用户都具有可读可写可执行权限。

[root@wwy ~]# chmod 777 houge.txt

(5)修改整个文件夹里面的所有文件的所有者、所属组、其他用户都具有可读可写可执行权限。

[root@wwy ~]# chmod -R 777 xiyou/

7.6.3 chown改变所有者

1.基本语法

chown [选项] [最终用户] [文件或目录] (功能描述:改变文件或者目录的所有者)

2.选项说明

表1-26

选项功能

-R递归操作

3.案例实操

(1)修改文件所有者

[root@wwy ~]# chown wengwenyu houge.txt

[root@wwy ~]# ls -al

-rwxrwxrwx. 1 wengwenyu root 551 5月  23 13:02 houge.txt

(2)递归改变文件所有者和所有组

[root@wwy xiyou]# ll

drwxrwxrwx. 2 root root 4096 9月   3 21:20 xiyou

[root@wwy xiyou]# chown -R wengwenyu:wengwenyu xiyou/

[root@wwy xiyou]# ll

drwxrwxrwx. 2 wengwenyu wengwenyu 4096 9月   3 21:20 xiyou

7.6.4 chgrp改变所属组

1.基本语法

chgrp [最终用户组] [文件或目录] (功能描述:改变文件或者目录的所属组)

2.案例实操

(1)修改文件的所属组

[root@wwy ~]# chgrp root houge.txt

[root@wwy ~]# ls -al

-rwxrwxrwx. 1 wengwenyu root 551 5月  23 13:02 houge.txt

7.7搜索查找类

7.7.1 find查找文件或者目录

find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端。

1.基本语法

find [搜索范围] [选项]

2.选项说明

表1-27

选项功能

-name<查询方式>按照指定的文件名查找模式查找文件

-user<用户名>查找属于指定用户名所有文件

-size<文件大小>按照指定的文件大小查找文件。

3.案例实操

(1)按文件名:根据名称查找/目录下的filename.txt文件。

[root@wwy ~]# find xiyou/ -name “*.txt”

(2)按拥有者:查找/opt目录下,用户名称为-user的文件

[root@wwy ~]# find xiyou/ -user wengwenyu

(3)按文件大小:在/home目录下查找大于200m的文件(+n 大于  -n小于   n等于)

[root@wwy ~]find /home -size +204800

7.7.2 grep过滤查找及“|”管道符

管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理

1.基本语法

grep选项 查找内容 源文件

2.选项说明

表1-28

选项功能

-n显示匹配行及行号。

3.案例实操

(1)查找某文件在第几行

[root@wwy ~]# ls | grep -n test

7.7.3 which 查找命令

查找命令在那个目录下

1.基本语法

which 命令

2.案例实操

which ll

7.8压缩和解压类

7.8.1 gzip/gunzip压缩

1.基本语法

gzip文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件)

gunzip文件.gz (功能描述:解压缩文件命令)

2.经验技巧

(1)只能压缩文件不能压缩目录

(2)不保留原来的文件

3.案例实操

(1)gzip压缩

[root@wwy ~]# ls

test.java

[root@wwy ~]# gzip houge.txt

[root@wwy ~]# ls

houge.txt.gz

(2)gunzip解压缩文件

[root@wwy ~]# gunzip houge.txt.gz

[root@wwy ~]# ls

houge.txt

7.8.2 zip/unzip压缩

1.基本语法

zip  [选项] XXX.zip  将要压缩的内容 (功能描述:压缩文件和目录的命令)

unzip [选项] XXX.zip (功能描述:解压缩文件)

2.选项说明

表1-29

zip选项功能

-r压缩目录

表1-30

unzip选项功能

-d<目录>指定解压后文件的存放目录

3.经验技巧

zip压缩命令在window/linux都通用,可以压缩目录且保留源文件

4.案例实操

(1)压缩 1.txt 和2.txt,压缩后的名称为mypackage.zip

[root@wwy opt]# touch bailongma.txt

[root@wwy ~]# zip houma.zip houge.txt bailongma.txt

  adding: houge.txt (stored 0%)

  adding: bailongma.txt (stored 0%)

[root@wwy opt]# ls

houge.txt bailongma.txt houma.zip

(2)解压 mypackage.zip

[root@wwy ~]# unzip houma.zip

Archive:  houma.zip

 extracting: houge.txt               

 extracting: bailongma.txt       

[root@wwy ~]# ls

houge.txt bailongma.txt houma.zip

(3)解压mypackage.zip到指定目录-d

[root@wwy ~]# unzip houma.zip -d /opt

[root@wwy ~]# ls /opt/

7.8.3 tar打包

1.基本语法

tar  [选项]  XXX.tar.gz  将要打包进去的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)

2.选项说明

表1-31

选项功能

-z打包同时压缩

-c产生.tar打包文件

-v显示详细信息

-f指定压缩后的文件名

-x解包.tar文件

3.案例实操

(1)压缩多个文件

[root@wwy opt]# tar -zcvf houma.tar.gz houge.txt bailongma.txt

houge.txt

bailongma.txt

[root@wwy opt]# ls

houma.tar.gz houge.txt bailongma.txt

(2)压缩目录

[root@wwy ~]# tar -zcvf xiyou.tar.gz xiyou/

xiyou/

xiyou/mingjie/

xiyou/dssz/

xiyou/dssz/houge.txt

(3)解压到当前目录

[root@wwy ~]# tar -zxvfhouma.tar.gz

(4)解压到指定目录

[root@wwy ~]# tar -zxvf xiyou.tar.gz -C/opt

[root@wwy ~]# ll /opt/

7.9磁盘分区类

7.9.1 df查看磁盘空间使用情况

df: disk free空余硬盘

1.基本语法

df选项 (功能描述:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况)

2.选项说明

表1-32

选项功能

-h以人们较易阅读的GBytes, MBytes, KBytes 等格式自行显示;

3.案例实操

(1)查看磁盘使用情况

[root@wwy ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda2        15G  3.5G   11G  26% /

tmpfs           939M  224K  939M   1% /dev/shm

/dev/sda1       190M   39M  142M  22% /boot

7.9.2 fdisk查看分区

1.基本语法

fdisk -l (功能描述:查看磁盘分区详情)

2.选项说明

表1-33

选项功能

-l显示所有硬盘的分区列表

3.经验技巧

该命令必须在root用户下才能使用

4.功能说明

(1)Linux分区

Device:分区序列

Boot:引导

Start:从X磁柱开始

End:到Y磁柱结束

Blocks:容量

Id:分区类型ID

System:分区类型

(2)Win7分区,如图1-157所示

图1-157  Win7分区

5.案例实操

(1)查看系统分区情况

[root@wwy /]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x0005e654

   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          26      204800   83  Linux

Partition 1 does not end on cylinder boundary.

/dev/sda2              26        1332    10485760   83  Linux

/dev/sda3            1332        1593     2097152   82  Linux swap / Solaris

7.10进程线程类

进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。

定义与区别

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位(可以理解为进程是可以独立运行的)

线程是进程的一个实体,是cpu调度和分派的基本单位,他是比进程更小的能够独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源。一个线程可以创建撤销另外一个线程。(在1个进程中可以有多个线程,多个线程之间可以互相操作)

区别: 一个线程只能属于一个进程,而一个进程可以拥有多个线程。线程是进程工作中的最小单位。一个进程会分配一个地址空间,进程与进程之间不共享地址空间。即不共享内存。同一个进程下的不同的多个线程,共享父进程的地址空间。线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步(中间件、消息队列)。线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。

进程与线程的优缺点

进程优点

[if !supportLists]1. [endif]每个进程互相独立、不影响主程序的稳定性,子进程崩溃不影响其他进程。

[if !supportLists]2. [endif]通过增加CPU,就可以扩充性能。

[if !supportLists]3. [endif]可以尽量减少线程加锁与解锁的影响,极大的提高了性能。

进程缺点

[if !supportLists]a) [endif]逻辑控制复杂,需要和主程序交互。

[if !supportLists]b) [endif]多进程调度开销大。

线程优点

[if !supportLists]a) [endif]程序逻辑和控制方式简单

[if !supportLists]b) [endif]所有线程可以直接共享内存和变量等

[if !supportLists]c) [endif]线程方式消耗的总资源比进程方式少

线程缺点

[if !supportLists]1. [endif]每个线程与主程序共用地址空间,最大内存地址受限。

[if !supportLists]2. [endif]线程之间的同步和加锁不易控制。

[if !supportLists]3. [endif]一个线程的崩溃可能影响到整个程序的稳定性。

 

7.10.1 ps 查看当前系统进程状态

ps:process status进程状态

1.基本语法

ps aux | grep xxx (功能描述:查看系统中所有进程)

ps -ef | grep xxx(功能描述:可以查看子父进程之间的关系)

2.选项说明

表1-35

选项功能

-a选择所有进程

-u显示所有用户的所有进程

-x显示没有终端的进程

3.功能说明

(1)ps aux显示信息说明

USER:该进程是由哪个用户产生的

PID:进程的ID号

%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源;

%MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源;

VSZ:该进程占用虚拟内存的大小,单位KB;

RSS:该进程占用实际物理内存的大小,单位KB;

TTY:该进程是在哪个终端中运行的。其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端。pts/0-255代表虚拟终端。

STAT:进程状态。常见的状态有:R:运行、S:睡眠、T:停止状态、s:包含子进程、+:位于后台

START:该进程的启动时间

TIME:该进程占用CPU的运算时间,注意不是系统时间

COMMAND:产生此进程的命令名

(2)ps -ef显示信息说明

UID:用户ID

PID:进程ID

PPID:父进程ID

C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高

STIME:进程启动的时间

TTY:完整的终端名称

TIME:CPU时间

CMD:启动进程所用的命令和参数

4.经验技巧

如果想查看进程的CPU占用率和内存占用率,可以使用aux;

如果想查看进程的父进程ID可以使用ef;

5.案例实操

[root@wwy datas]# ps aux

如图1-161所示

图1-161 查看进程的CPU占用率和内存占用率

[root@wwy datas]# ps -ef

如图1-162所示

图1-162  查看进程的父进程ID

7.10.2 kill终止进程

1.基本语法

kill  [选项]进程号 (功能描述:通过进程号杀死进程)

killall进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)

2.选项说明

表1-36

选项功能

-9表示强迫进程立即停止

3.案例实操

(1)杀死浏览器进程

[root@wwy桌面]# kill -9 5102

(2)通过进程名称杀死进程

[root@wwy桌面]# killall firefox

7.10.3 pstree查看进程树

1.基本语法

pstree [选项]

2.选项说明

表1-37

选项功能

-p显示进程的PID

-u显示进程的所属用户

3.案例实操

(1)显示进程pid

[root@wwy datas]# pstree -p

(2)显示进程所属用户

[root@wwy datas]# pstree -u

7.10.4 top查看系统健康状态

能够实时监控系统的运行状态,并且可以按照cup及内存进行排序

1.基本命令

top [选项]

2.选项说明

表1-38

选项功能

-d秒数指定top命令每隔几秒更新。默认是3秒在top命令的交互模式当中可以执行的命令:

-i使top不显示任何闲置或者僵死进程。

-p监控指定的进程。当监控多个进程时,进程ID以逗号分隔。这个选项只能在命令行下使用

-h帮助

3.top任务区命令(操作说明)

表1-39

操作功能

P以CPU使用率排序,默认就是此项

M以内存的使用率排序

N以PID排序

q退出top

z彩色/黑白显示

4.查询结果字段解释

第一行信息为任务队列信息

表1-40

内容说明

12:26:46系统当前时间

up 1 day, 13:32系统的运行时间,本机已经运行1天

13小时32分钟

2 users当前登录了两个用户

load  average:  0.00, 0.00, 0.00系统在之前1分钟,5分钟,15分钟的平均负载值。一般认为小于1时,负载较小。如果大于1,系统已经超出负荷。【特别说明:在单核CUP中load  average的值为1时表示满负荷状态。同理在多核CPU中满负载的load  average的值为1*CPU核数】假设我们有一个8核cup,load average的值超过8时,说明是满负荷了

第二行为进程信息

表1-41

Tasks:  95 total系统中的进程总数

1 running正在运行的进程数

94 sleeping睡眠的进程

0 stopped正在停止的进程

0 zombie僵尸进程。如果不是0,需要手工检查僵尸进程

第三行为CPU信息

表1-42

Cpu(s):  0.1%us用户模式占用的CPU百分比

0.1%sy系统模式占用的CPU百分比

0.0%ni改变过优先级的用户进程占用的CPU百分比

99.7%id空闲CPU的CPU百分比

0.1%wa等待输入/输出的进程的占用CPU百分比

0.0%hi硬中断请求服务占用的CPU百分比

0.1%si软中断请求服务占用的CPU百分比

0.0%stst(Steal  time)虚拟时间百分比。就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分比。

第四行为物理内存信息

表1-43

Mem:    625344k total物理内存的总量,单位KB

571504k used已经使用的物理内存数量

53840k free空闲的物理内存数量,我们使用的是虚拟机,总共只分配了628MB内存,所以只有53MB的空闲内存了

65800k buffers作为缓冲的内存数量

第五行为交换分区(swap)信息

表1-44

Swap:   524280k total交换分区(虚拟内存)的总大小

0k used已经使用的交互分区的大小

524280k free空闲交换分区的大小

409280k cached作为缓存的交互分区的大小

5.案例实操

top -d 1

top -i

top -p 2575

执行上述命令后,可以按P、M、N对查询出的进程结果进行排序。

7.10.5 vmstat

可以监控操作系统的进程状态、内存、虚拟内存、磁盘IO、CPU的信息

 

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。vmstat 工具提供了一种低开销的系统性能观察方式。因为 vmstat 本身就是低开销工具,在非常高负荷的服务器上,需要查看并监控系统的健康情况,在控制窗口还是能够使用vmstat 输出结果。

1. [endif]命令格式

vmstat [-a] [-n] [-S unit] [delay [ count]]

vmstat [-s] [-n] [-S unit]

vmstat [-m] [-n] [delay [ count]]

vmstat [-d] [-n] [delay [ count]]

vmstat [-p disk partition] [-n] [delay [ count]]

vmstat [-f] vmstat [-V] 

2. [endif]命令参数说明

命令参数说明

-a显示活跃和非活跃内存

-f显示从系统启动至今的fork数量

-m显示slabinfo

-n只在开始时显示一次各字段名称

-s显示内存相关统计信息以及多种系统活动数量

delay刷新时间间隔。如果不指定,只显示一条结果

count刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。

-d显示磁盘相关统计信息。

-p显示指定磁盘分区统计信息

-S使用指定单位显示。参数有k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)

-V显示vmstat版本信息。

3. 使用实例1:显示虚拟内存使用情况

字段说明

Procs(进程)r运行队列中进程数量

b等待IO的进程数量

Memory(内存)swpd使用虚拟内存大小

free可用内存大小

buff用作缓冲的内存大小

cache用作缓存的内存大小

Swapsi每秒从交换区写到内存的大小

so每秒写入交换区的内存大小

IO(现在的Linux版本块的大小为1024bytes)

bi每秒读取的块数

bo每秒写入的块数

systemin每秒中断数,包括时钟中断。

cs每秒上下文切换数

CPU以百分比表示

us用户进程执行时间(user time)

sy系统进程执行时间(system time)

id空闲时间(包括IO等待时间),中央处理器的空闲时间。以百分比表示

wa等待IO时间

4. 使用实例2(常用):实现内存、cpu的动态监控 第一个参数是时间间隔 第二个参数是显示多少次

物理内存和虚拟内存区别:【科普】

我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在Linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。作为物理内存的扩展,Linux会在物理内存不足时,使用交换分区的虚拟内存,更详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样以来,物理内存得到了释放,这块内存就可以用于其它目的,当需要用到原始的内容时,这些信息会被重新从交换空间读入物理内存。linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。

要深入了解linux内存运行机制,需要知道下面提到的几个方面:首先,Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面。这可以避免等待交换所需的时间。其次,linux进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,linux内核根据”最近最经常使用“算法,仅仅将一些不经常使用的页面文件交换到虚拟内存,有时我们会看到这么一个现象:linux物理内存还有很多,但是交换空间也使用了很多。其实,这并不奇怪,例如,一个占用很大内存的进程运行时,需要耗费很多内存资源,此时就会有一些不常用页面文件被交换到虚拟内存中,但后来这个占用很多内存资源的进程结束并释放了很多内存时,刚才被交换出去的页面文件并不会自动的交换进物理内存,除非有这个必要,那么此刻系统物理内存就会空闲很多,同时交换空间也在被使用,就出现了刚才所说的现象了。关于这点,不用担心什么,只要知道是怎么一回事就可以了。

最后,交换空间的页面在使用时会首先被交换到物理内存,如果此时没有足够的物理内存来容纳这些页面,它们又会被马上交换出去,如此以来,虚拟内存中可能没有足够空间来存储这些交换页面,最终会导致linux出现假死机、服务异常等问题,linux虽然可以在一段时间内自行恢复,但是恢复后的系统已经基本不可用了。因此,合理规划和设计linux内存的使用,是非常重要的。

虚拟内存原理:【科普】

在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。

在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。

分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发生了分页错误(Page Fault)。

当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。经管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系统效能会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作thrashing。

7.10.5 free

能够监控系统的内存使用状态。其中total:总计物理内存的大小;Used:已使用多大;Free:可用有多少;shard:多个进程共享的内存总额;buffers/cached:磁盘缓存大小。

1. 命令格式

free [参数]

[if !supportLists]1. [endif]命令功能

free命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略

2. 常用

7.10.5 netstat显示网络统计信息端口占用情况

netstat命令用于显示本机网络链接、运行端口、路由表等信息

1.基本语法

netstat -anp | grep 进程号 (功能描述:查看该进程网络信息)

netstat -nlp | grep 端口号 (功能描述:查看网络端口号占用情况)

2.选项说明

表1-45

选项功能

-n拒绝显示别名,能显示数字的全部转成数字

-l仅列出有在listen(监听)的服务状态

-p表示显示哪个进程在调用

-t(tcp)显示tcp相关选项

-u(udp)仅显示udp相关选项

-i显示自动匹配接口的信息

-c每隔一个固定时间,执行该netstat命令

3.案例实操

(1)通过进程号查看该进程的网络信息

[root@wwy hadoop-2.7.2]# netstat -anp | grep火狐浏览器进程号

unix  2      [ ACC ]     STREAM     LISTENING206703115/firefox        /tmp/orbit-root/linc-c2b-0-5734667cbe29

unix  3      [ ]         STREAM     CONNECTED     20673  3115/firefox        /tmp/orbit-root/linc-c2b-0-5734667cbe29

unix  3      [ ]         STREAM     CONNECTED     20668  3115/firefox        

unix  3      [ ]         STREAM     CONNECTED     20666  3115/firefox     

(2)查看某端口号是否被占用

[root@wwy桌面]# netstat -nlp | grep 20670

unix  2      [ ACC ]     STREAM     LISTENING     20670  3115/firefox        /tmp/orbit-root/linc-c2b-0-5734667cbe29

7.11 crond系统定时任务

7.11.1 crond服务管理

1.重新启动crond服务

[root@wwy ~]# service crond restart

7.11.2 crontab定时任务设置

1.基本语法

crontab [选项]

2.选项说明

表1-46

选项功能

-e编辑crontab定时任务

-l查询crontab任务

-r删除当前用户所有的crontab任务

3.参数说明

[root@wwy ~]# crontab -e

(1)进入crontab编辑界面。会打开vim编辑你的工作。

* * * * *执行的任务

表1-47

项目  含义  范围

第一个“*”一小时当中的第几分钟0-59

第二个“*”一天当中的第几小时0-23

第三个“*”一个月当中的第几天1-31

第四个“*”一年当中的第几月1-12

第五个“*”一周当中的星期几0-7(0和7都代表星期日)

(2)特殊符号

表1-48

特殊符号含义

*代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。

,代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令

-代表连续的时间范围。比如“0 5  *  *  1-6命令”,代表在周一到周六的凌晨5点0分执行命令

*/n代表每隔多久执行一次。比如“*/10  *  *  *  *  命令”,代表每隔10分钟就执行一遍命令

(3)特定时间执行命令

表1-49

时间  含义

45 22 * * *命令在22点45分执行命令

0 17 * * 1命令每周1 的17点0分执行命令

0 5 1,15 * *命令每月1号和15号的凌晨5点0分执行命令

40 4 * * 1-5命令每周一到周五的凌晨4点40分执行命令

*/10 4 * * *命令每天的凌晨4点,每隔10分钟执行一次命令

0 0 1,15 * 1命令每月1号和15号,每周1的0点0分都会执行命令。注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。

4.案例实操

(1)每隔1分钟,向/root/bailongma.txt文件中添加一个11的数字

*/1 * * * * /bin/echo ”11” >> /root/bailongma.txt

八、软件包管理

8.1 RPM

8.1.1 RPM概述

RPM(RedHat Package Manager),RedHat软件包管理工具,类似windows里面的setup.exe

是Linux这系列操作系统里面的打包安装工具,它虽然是RedHat的标志,但理念是通用的。

RPM包的名称格式

Apache-1.3.23-11.i386.rpm

[if !supportLists]- [endif]“apache”软件名称

[if !supportLists]- [endif]“1.3.23-11”软件的版本号,主版本和此版本

[if !supportLists]- [endif]“i386”是软件所运行的硬件平台,Intel 32位微处理器的统称

[if !supportLists]- [endif]“rpm”文件扩展名,代表RPM包

8.1.2 RPM查询命令(rpm -qa)

1.基本语法

rpm -qa (功能描述:查询所安装的所有rpm软件包)

2.经验技巧

由于软件包比较多,一般都会采取过滤。rpm -qa | grep rpm软件包

3.案例实操

(1)查询firefox软件安装情况

[root@wwy Packages]# rpm -qa |grep firefox

firefox-45.0.1-1.el6.centos.x86_64

8.1.3 RPM卸载命令(rpm -e)

1.基本语法

(1)rpm -e RPM软件包   

(2) rpm -e --nodeps软件包 

2.选项说明

表1-50

选项功能

-e卸载软件包

--nodeps卸载软件时,不检查依赖。这样的话,那些使用该软件包的软件在此之后可能就不能正常工作了。

3.案例实操

(1)卸载firefox软件

[root@wwy Packages]# rpm -e firefox

8.1.4 RPM安装命令(rpm -ivh)

1.基本语法

rpm -ivh RPM包全名

2.选项说明

表1-51

选项功能

-i-i=install,安装

-v-v=verbose,显示详细信息

-h-h=hash,进度条

--nodeps--nodeps,不检测依赖进度

3.案例实操

(1)安装firefox软件

[root@wwy Packages]# pwd

/media/CentOS_6.8_Final/Packages

[root@wwy Packages]# rpm -ivh firefox-45.0.1-1.el6.centos.x86_64.rpm

warning: firefox-45.0.1-1.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY

Preparing...                ########################################### [100%]

   1:firefox                ########################################### [100%]

8.2 YUM仓库配置

8.2.1 YUM概述

YUM(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装,如图1-163所示

图1-163  YUM概述

8.2.2 YUM的常用命令

1.基本语法

yum [选项] [参数]

2.选项说明

表1-52

选项功能

-y对所有提问都回答“yes”

3.参数说明

表1-53

参数功能

install安装rpm软件包

update更新rpm软件包

check-update检查是否有可用的更新rpm软件包

remove删除指定的rpm软件包

list显示软件包信息

clean清理yum过期的缓存

deplist显示yum软件包的所有依赖关系

4.案例实操实操

(1)采用yum方式安装firefox

[root@wwy ~]#yum -y install firefox.x86_64

8.2.3 修改网络YUM源

默认的系统YUM源,需要连接国外apache网站,网速比较慢,可以修改关联的网络YUM源为国内镜像的网站,比如网易163。

1.前期文件准备

(1)前提条件linux系统必须可以联网

(2)在Linux环境中访问该网络地址:http://mirrors.163.com/.help/centos.html,在使用说明中点击CentOS6->再点击保存,如图1-164所示

图1-164 下载CentOS6

(3)查看文件保存的位置,如图1-165,1-166所示

图1-165图1-166

在打开的终端中输入如下命令,就可以找到文件的保存位置。

[wengwenyu@wwy下载]$ pwd

/home/wengwenyu/下载

2.替换本地yum文件

(1)把下载的文件移动到/etc/yum.repos.d/目录

[root@wwy下载]# mv CentOS6-Base-163.repo /etc/yum.repos.d/

(2)进入到/etc/yum.repos.d/目录

[root@wwy yum.repos.d]# pwd

/etc/yum.repos.d

(3)用CentOS6-Base-163.repo替换CentOS-Base.repo

[root@wwy yum.repos.d]# mv CentOS6-Base-163.repo  CentOS-Base.repo

3.安装命令

(1)[root@wwy yum.repos.d]#yum clean all

(2)[root@wwy yum.repos.d]#yum makecache

yum makecache就是把服务器的包信息下载到本地电脑缓存起来

4.测试

[root@wwy yum.repos.d]#yum list | grep firefox

[root@wwy ~]#yum -y install firefox.x86_64

九、常见错误及解决方案

1. 虚拟化支持异常情况如下几种情况

图1-168

图1-169

图1-170

图1-171

问题原因:宿主机BIOS设置中的硬件虚拟化被禁用了

解决办法:需要打开笔记本BIOS中的IVT对虚拟化的支持

图1-172

Linux服务器监控性能测试

重要性:学会了整个Linux服务器监控,可以说你的性能测试就搞定了一半了,他可以充当你的眼睛,去发现那些更多的性能问题,包含你的应用程序层面的问题,因为很多应用程序的问题能到直观的体现在服务器上的一些资源

性能测试目的

发现服务器的性能瓶颈。配置的不同能够承受的最大任务数不同,能够承载的压力也不同。

测试范围以及性能指标

[if !supportLists]1. [endif]CPU

[if !supportLists]2. [endif]内存

[if !supportLists]3. [endif]磁盘

[if !supportLists]4. [endif]网络

[if !supportLists]5. [endif]版本

测试环境和生产环境配置不同?

[if !supportLists]l [endif]解决:通过多次压测来计算性能损耗(比如集群,假设1台机器的性能是1,10台计算器集群的性能未必如设想的一样是10)

性能损耗的计算方式

 

横线是服务器数目

竖线是服务器指标(cpu、内存、磁盘、网络等的性能指数)

多次压测后的性能预估(最少要做3~5次的性能测试观察性能损耗到底有多少,比如说你的性能测试环境是8核CPU、16G内存这样的环境、假设说你一开始是3台服务器,他的性能表现是怎么样的,5台服务器,他的性能表现又是怎么样的,8台又是怎么样的?我们期望的结果是像蓝线那样正常曲线,但是实际结果一定会像红线那样有性能损耗,当你的服务器越多,性能损耗可能就越多、如果说加服务器这种野蛮的方法就一定能无休止的增长我们的性能,一些土豪公司完全不用做性能测试,那还要做性能测试干什么?)也就说当我们真正把项目上到我们的生产环境的时候,你的测试报告里面要有一个性能预估的体现,体现的依据有一个非常重要的一点,就是预估性能损耗指标(计算方式:相同脚本+相同场景+相同的并发用户数 然后增加你的服务器大概计算一下性能损耗,不一定说特别准确,所以只能叫预估)

服务器实时内存监控

top、vmstatfree 当然top vmstat 也可以进行一些磁盘IO、CPU的一些监控,任何监控工具实际上底层都有可能是集成这些命令,当这些命令你会使用就,当用其他的工具的时候就对他们的基本运行原理基本也就是了然了。

服务器实时CPU监控

mpstat (Multiprocessor Statistics)

mpstat最大的特点是:可以查看多核心cup中每个计算核心的统计数据,而类似工具vmstat只能查看系统整体cpu情况。

语法

mpstat [-P {|ALL}] [internal | [count]]

安装

yum install -y sysstat

参数

-P {|ALL}表示监控哪个CPU,cpu在[0,cpu个数-1]中取值

internal相邻的两次采样的间隔时间

count采样的次数,count只能和delay一起使用

注意:当没有参数时候,mpstat则显示系统启动以后所有信息的平均值。当有interval时,第一行的信息自系统启动以来的平均信息。从第2行开始,输出为前一个interval时间段的平均信息。(也就是说我们看第2行信息就行)

字段含义

%user在internal时间段里,用户态的CPU时间(%),不包含nice值为负进程  (usr/total)*100

%nice在internal时间段里,nice值为负进程的CPU时间(%)   (nice/total)*100

%sys在internal时间段里,内核时间(%)       (system/total)*100

%iowait在internal时间段里,硬盘IO等待时间(%) (iowait/total)*100

%irq在internal时间段里,硬中断时间(%)     (irq/total)*100

%soft在internal时间段里,软中断时间(%)     (softirq/total)*100

%idle在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%) (idle/total)*100

CPU总的工作时间

total_cur = user + system + nice + idle + iowait + irq + softirq

total_pre = pre_user + pre_system + pre_nice + pre_idle + pre_iowait + pre_irq + pre_softirq

user = user_cur – user_pre

total = total_cur - total_pre

其中_cur表示当前值,_pre 表示 interval 时间前的值。上表中的所有值可取到两位小数点。

注意点:

vmstat和 mpstat 命令的差别:mpstat 可以显示每个处理器的统计,而 vmstat 显示所有处理器的统计。因此,编写糟糕的应用程序(不使用多线程体系结构)可能会运行在一个多处理器机器上,而不使用所有处理器。从而导致一个 CPU 过载,而其他 CPU 却很空闲。通过 mpstat 可以轻松诊断这些类型的问题。

vmstat中所有关于 CPU 的总结都适合 mpstat。当您看到较低的% idle数字时,您知道出现了 CPU 不足的问题。当您看到较高的% iowait数字时,您知道在当前负载下 I/O 子系统出现了某些问题。

服务器实时网络监控

netstat

服务器实时磁盘监控

iostat是对系统磁盘IO操作进行监控,它的输出主要显示磁盘的读写操作的统计信息。同时给出cpu的使用情况

[if !supportLists]1. [endif]命令格式

iostat[参数][时间][次数]

[if !supportLists]2. [endif]命令功能

通过iostat方便查看CPU、网卡、tty设备、磁盘、CD-ROM 等等设备的活动情况, 负载信息。

[if !supportLists]3. [endif]命令参数

-C显示CPU使用情况

-d显示磁盘使用情况

-k以 KB 为单位显示

-m以 M 为单位显示

-N显示磁盘阵列(LVM) 信息

-n显示NFS 使用情况

-p[磁盘] 显示磁盘和分区的情况

-t显示终端和CPU的信息

-x [device]显示详细信息 输出指定要统计的磁盘设备名称,默认为所有磁盘设备

-V显示版本信息

[if !supportLists]4. [endif]工具实例

实例1:显示所有设备负载情况

cpu属性值说明:

%user:CPU处在用户模式下的时间百分比。

%nice:CPU处在带NICE值的用户模式下的时间百分比。

%system:CPU处在系统模式下的时间百分比。

%iowait:CPU等待输入输出完成时间的百分比。

%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。

%idle:CPU空闲时间百分比。

注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

disk属性值说明:

rrqm/s:每秒进行 merge 的读操作数目。即 rmerge/s

wrqm/s:每秒进行 merge 的写操作数目。即 wmerge/s

r/s:每秒完成的读 I/O 设备次数。即 rio/s

w/s:每秒完成的写 I/O 设备次数。即 wio/s

rsec/s:每秒读扇区数。即 rsect/s

wsec/s:每秒写扇区数。即 wsect/s

rkB/s:每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。

wkB/s:每秒写K字节数。是 wsect/s 的一半。

avgrq-sz:平均每次设备I/O操作的数据大小 (扇区)。

avgqu-sz:平均I/O队列长度。

await:平均每次设备I/O操作的等待时间 (毫秒)。

svctm:平均每次设备I/O操作的服务时间 (毫秒)。

%util:一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比(繁忙程度)

备注:如果%util接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果svctm比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当量io在等待。

实例2:定时显示所有信息

说明:每隔2秒刷新显示,且显示3次

[root@XXX ~]# iostat 2 3

万能的sar命令

 

简介: sar(System Activity Reporter, 系统活动情况报告): 是用于监控Linux系统各个性能的最优秀、最全面的工具之一,可以从多方面对系统的活动进行报告。

监控范围: 文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。

常用格式

sar [ options ] [ [ ] ]

interval:采样周期,单位是秒;

count:采样次数,默认值是连续采样;

options:命令行选项。

sar命令的选项很多,下面只列出常用选项

-A:所有报告的总和

-u:输出整体CPU使用情况的统计信息

-v:输出inode、文件和其他内核表的统计信息

-d:输出每一个块设备的活动信息

-r:输出内存和交换空间的统计信息

-b:显示I/O和传送速率的统计信息

-a:文件读写情况

-c:输出进程统计信息,每秒创建的进程数

-R:输出内存页面的统计信息

-y:终端设备活动情况

-w:输出系统交换活动信息

如何使用sar获取以下性能分析数据:

[if !supportLists]l [endif]整体CPU使用统计

[if !supportLists]l [endif]各个CPU使用统计

[if !supportLists]l [endif]内存使用情况统计

[if !supportLists]l [endif]整体I/O情况

[if !supportLists]l [endif]各个I/O设备情况

[if !supportLists]l [endif]网络统计

整体CPU使用统计(-u)

使用-u选项,sar输出整体CPU的使用情况,不加选项时,默认使用的就是-u选项。以下命令显示采样时间为3s,采样次数为2次,整体CPU的使用情况:

[root@wwy ~]# sar 3 2     (或者 sar -u 3 2)

Linux 2.6.32-754.el6.x86_64 (wwy)       11/24/2019      _x86_64_        (2 CPU)

06:52:34 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle

06:52:37 AM     all      0.34      0.00      2.18      0.00      0.00     97.49

06:52:40 AM     all      0.33      0.00      1.34      0.00      0.00     98.33

Average:        all      0.33      0.00      1.76      0.00      0.00     97.91

输出项说明:

CPU:all表示统计信息为所有CPU的平均值。

%usr:CPU在用户态执行进程的时间百分比。

%nice:CPU在用户态模式下,用于nice操作,所占用CPU总时间的百分比。

%system:CPU处在内核态执行进程的时间百分比。

%iowait:CPU用于等待I/O操作占用CPU总时间的百分比。

%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比。

%idle:CPU空闲时间百分比。

1.若 %iowait 的值过高,表示硬盘存在I/O瓶颈

2.若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量

3.若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU

各个CPU使用统计(-P)

“-P ALL”选项指示对每个内核输出统计信息

[root@wwy ~]# sar -P ALL 1 1

Linux 2.6.32-754.el6.x86_64 (wwy)       11/24/2019      _x86_64_        (2 CPU)

06:59:15 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle

06:59:16 AM     all      0.00      0.00      2.00      0.00      0.00     98.00

06:59:16 AM       0      0.00      0.00      2.02      0.00      0.00     97.98

06:59:16 AM       1      0.00      0.00      1.00      0.00      0.00     99.00

Average:        CPU     %user     %nice   %system   %iowait    %steal     %idle

Average:        all      0.00      0.00      2.00      0.00      0.00     98.00

Average:          0      0.00      0.00      2.02      0.00      0.00     97.98

Average:          1      0.00      0.00      1.00      0.00      0.00     99.00

其中”CPU”列输出0,1,2,3,4,5指示对应的cpu核。也可针对单独一个内核显示,“-P 1”指示显示第二个内核的统计信息。

内存使用情况统计(-r)

使用-r选项可显示内存统计信息,以下命令显示以1秒为采样时间,显示2次内存信息:

[root@wwy ~]# sar -r 1 2

Linux 2.6.32-754.el6.x86_64 (wwy)       11/24/2019      _x86_64_        (2 CPU)

07:02:49 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit

07:02:50 AM   1011644    893520     46.90     78048    475228    654776     16.36

07:02:51 AM   1010984    894180     46.93     78056    475224    654776     16.36

Average:      1011314    893850     46.92     78052    475226    654776     16.36

[if !supportLists]l [endif]kbmemfree空闲的物理内存大小

[if !supportLists]l [endif]kbmemused使用中的物理内存大小

[if !supportLists]l [endif]%memused物理内存使用率

[if !supportLists]l [endif]kbbuffers内核中作为缓冲区使用的物理内存大小,kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.

[if !supportLists]l [endif]kbcached缓存的文件大小

[if !supportLists]l [endif]kbcommit保证当前系统正常运行所需要的最小内存,即为了确保内存不溢出而需要的最少内存(物理内存+Swap分区)

[if !supportLists]l [endif]commit这个值是kbcommit与内存总量(物理内存+swap分区)的一个百分比的值

整体I/O情况(-b)

使用-b选项,可以显示磁盘I/O的使用情况:Report I/O and transfer rate statistics.

[root@wwy ~]# sar -b 3 2

Linux 2.6.32-754.el6.x86_64 (wwy)       11/24/2019      _x86_64_        (2 CPU)

07:07:00 AM       tps      rtps      wtps   bread/s   bwrtn/s

07:07:03 AM      1.00      0.00      1.00      0.00     10.70

07:07:06 AM      1.33      0.00      1.33      0.00     21.33

Average:         1.17      0.00      1.17      0.00     16.03

输出项说明:

tps:每秒向磁盘设备请求数据的次数,包括读、写请求,为rtps与wtps的和。出于效率考虑,每一次IO下发后并不是立即处理请求,而是将请求合并(merge),这里tps指请求合并后的请求计数。

rtps:每秒向磁盘设备的读请求次数

wtps:每秒向磁盘设备的写请求次数

bread/s:每秒钟从物理设备读入的数据量,单位为 块/s

bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s

各个I/O设备情况(-d)

使用-d选项可以显示各个磁盘的统计信息,再增加-p选项可以以sdX的形式显示设备名称

[root@wwy ~]# sar -d -p 3 2

Linux 2.6.32-754.el6.x86_64 (wwy)       11/24/2019      _x86_64_        (2 CPU)

07:10:30 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util

07:10:33 AM       sda      2.34      0.00     32.11     13.71      0.00      0.43      0.29      0.07

07:10:33 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util

07:10:36 AM       sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util

Average:          sda      1.17      0.00     16.08     13.71      0.00      0.43      0.29      0.03

输出项说明:

rd_sec/s:每秒从设备读取的扇区数

wr_sec/s:每秒往设备写入的扇区数

avgrq-sz:发送给设备的请求的平均大小(以扇区为单位)

avgqu-sz:发送给设备的请求队列的平均长度

await:服务等待I/O请求的平均时间,包括请求队列等待时间 (单位毫秒)

svctm:设备处理I/O请求的平均时间,不包括请求队列等待时间 (单位毫秒)

%util:一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比。

备注:

-如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。

-如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。

-如果avgqu-sz比较大,也表示有当量io在等待。

网络统计

使用-n选项可以对网络使用情况进行显示,-n后接关键词”DEV”可显示eth0、eth1等网卡的信息:

[root@wwy ~]# sar -n DEV 1 1

Linux 2.6.32-754.el6.x86_64 (wwy)       11/24/2019      _x86_64_        (2 CPU)

07:14:20 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s

07:14:21 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

07:14:21 AM      eth0     28.00     38.00      2.21      5.33      0.00      0.00      0.00

07:14:21 AM      pan0      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s

Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:         eth0     28.00     38.00      2.21      5.33      0.00      0.00      0.00

Average:         pan0      0.00      0.00      0.00      0.00      0.00      0.00      0.00

输出 说明

IFACE 网络设备名

rxerr/s 每秒接收的坏包总数

txerr/s 传输包时每秒发生错误的总数

coll/s 传输包时每秒发生冲突(collision)的总数

rxdrop/s 接收包时,由于缺乏缓存,每秒丢弃(drop)包的数量

txdrop/s 传输包时,由于缺乏缓存,每秒丢弃(drop)包的数量

txcarr/s 传输包时,每秒发生的传输错误(carrier-error)的数量

rxfram/s 接收包时,每秒发生帧校验错误(frame alignment error)的数量

rxfifo/s 接收包时,每秒发生队列(FIFO)一出错误的数量

txfifo/s 传输包时,每秒发生队列(FIFO)一出错误的数量

总结:

要判断系统瓶颈问题,有时需几个sar命令选项结合起来

怀疑CPU存在瓶颈,可用 sar -u和 sar -q 等来查看

怀疑内存存在瓶颈,可用sar -B、sar -r和 sar -W 等来查看

怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d等来查看

 

Linux监控工具nmon

nmon是一种在Linux 操作系统上广泛使用的监控与分析工具,nmon所记录的信息是比较全面的,它能在系统运行过程中实时地捕捉系统资源的使用情况,并且能输出结果到文件中,然后通过nmon_analyzer工具产生数据文件与图形化结果(可以辅助出测试报告之类)。

nmon下载与安装

[root@wwy ~]# wget http://sourceforge.net/projects/nmon/files/nmon_linux_14i.tar.gz

[root@wwy ~]# tar xvf nmon_linux_14i.tar.gz

[root@wwy ~]# mv nmon_x86_64_centos6 nmon

[root@wwy ~]# cp nmon /usr/bin/

参数介绍

-f  这个nmon必选参数,并且必须放到第一个,就是输出文件的意思;用该参数的话,nmon输出的文件名就是默认名称:hostname_date_time.nmon;

-F   这个参数和-f相同,只不过用户可以自己定义文件名称;

-s  采集数据频率,也就是保存数据的频率

-c  采集数据次数

-t   输出最小号资源的进程数据

-h  查看帮助

基本使用

[root@wwy ~]# mkdir nmonData

[root@wwy ~]# cd nmonData/

[root@wwy nmonData]# nmon

[root@wwy nmonData]# nmon -f -F demo.nmon -s 1  -c 10 -t 

[root@wwy nmonData]# ll

total 28

-rw-r--r--. 1 root root 27655 Nov 24 08:39 demo.nmon

[root@wwy nmonData]# ll

total 36

-rw-r--r--. 1 root root 34739 Nov 24 08:39 demo.nmon

[root@wwy nmonData]# ll

total 36

-rw-r--r--. 1 root root 34739 Nov 24 08:39 demo.nmon

[root@wwy nmonData]# ll

total 36

-rw-r--r--. 1 root root 34739 Nov 24 08:39 demo.nmon

[root@wwy nmonData]# cat demo.nmon

nmon结果的分析

[if !supportLists]l [endif]nmon_analyzer的作用就是分析nmon数据采集后的结果,nmon_analyser需要借助Excel的宏,wps默认没有安装宏,需要下载插件

nmon analyser可以在IBM的官网下载

【https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Power+Systems/page/nmon_analyser】

[if !supportLists]l [endif]nmon_analyzer重点sheet页

SYS_SUMM系统汇总页,包含cpu占有率变化情况,磁盘IO的变化情况等信息

AAA关于操作系统以及nmon本身的一些信息

CPUnn显示执行时间内CPU占用情况

CPU_ALL所有CPU概述,显示所有CPU平均占用情况

CPU_SUMM每一个CPU在执行时间内的占用情况

DGBUSY磁盘组每个hdisk设备平均占用情况

DGREAD 每个磁盘组的平均读情况

DGSIZE每个磁盘组的平均读写情况

DGWRITE每个磁盘组的平均读写情况

DGXFER每个磁盘组的I/O每秒操作

MEM 内存相关主要信息,使用、空闲内存大小等

NET显示系统中每个网络适配器的数据传输速率(千字节/秒)

PAGE本sheet统计相关页信息的记录

除配合性能测试的短期监控,我们也可以实现对系统的定期监控,作为运营维护阶段的参考。定期监控实现如下:

1)执行命令:#crontab  –e

2)在最后一行添加如下命令:

0 8 * * 1,2,3,4,5  /nmon/nmon_x86_rhel5  -f -N -m /nmon/log  -s 30 -c 1200

表示:

周一到周五,从早上08点开始,监控10个小时(到18:00整为止),输出到/nmon/log

自动按天采集数据:

在crontab中增加一条记录:

0 0 * * * root nmon -s300 -c288 -f -m /home/ > /dev/null 2>&1

300*288=86400秒,正好是一天的数据。

你可能感兴趣的:(Linux的前世今生2)