【目标】 对于刚刚接触Linux的人来说,Linux上百种的命令和几千种的命令参数的组合都想一下掌握,是一件不可思议的事情,也是一件非常浪费时间的事情。其实,对于初学者来说,只要记住一些常用的命令和参数,掌握一定的命令执行规则,并会使用帮助手册来查看Linux的基本命令的具体的使用方法,就可以足够应付在Linux 系统下的各种应用了。 本章的目的就是给大家介绍 Linux 基本命令执行的一般规则、目录操作命令、文件操作命令、系统相关命令和其他一些常用命令的使用方法。通过本章学习,可以使大家初步掌握 Linux 系统中一些常用的基本命令。通过这些命令的熟悉与掌握,使大家能够独立应付在
Linux 操作系统中简单的基本应用。 【重点内容】
控制台相关命令
目录操作命令
文件操作命令
属性与权限命令
系统相关命令
shell的高级使用
环境变量 3.1 控制台相关命令
控制台命令就是指通过字符界面输入的可以操作系统的命令。我们现在要了解的是基于Linux操作系统的基本控制台命令。不同于图形模式的一种类似文本编辑器的运行命令的环境。在远程登陆控制或是操作没有图形环境的Linux系统时,控制台命令就有很大的用途了,建议大家一定要熟练掌握控制台模式下的命令操作,这样不管是否是在Linux系统的图形环境中操作,我们都可以完成指定的任务。有一点请注意, Linux的命令(也包括文件名等等)对大小写是敏感的,如“Abc”和“abc”会被认为是不一样的。如果输入的命令大小写不对的话,系统是不会做出你期望的响应的。 下面先给大家介绍几个与控制台命令相关的命令,如下所示:
|
$ man ls $ man –P ls |
大家可能还知道在很早的Dos系统下,有一些对目录操作的命令,例如cd、md (mkdir)、rd (rmdir)等等。而Linux 系统下的一些命令,和dos命令其实很相似,甚至拼写和功能都一样。下面就介绍一些在Linux 系统下对目录操作要使用的命令:
cd 改变当前工作目录 pwd 显示工作的路径
mkdir 建立目录 rmdir 删除目录 |
cd 命令, 用于改变当前工作目录,和Dos命令下的cd名命令用途一样,用于工作目录之间的切换,格式如下:
(1)语法: cd 目录名
(2)对象: 上面语法的对象为目录名,即改变到选定的目录名。如果没有指定目录,就返回用户主目录。
(3)举例:
# cd /var/log
# cd /usr/local/apache
# cd /root/sysadm/conf
(4)说明: 第一行命令所代表的功能是使用cd命令,切换到对象为
/var/log的目录下,第二、三行命令功能是分别切换到
对象为 /usr/local/apache和 /root/sysadm/conf 的
目录中去。
提示:
直接在命令行中输入cd命令而不加任何参数,可以马上回到用户的主目录(home),这与DOS中cd命令显示当前路径不同,请一定注意。在Linux中,很多与用户自身相关的配置文件、属于自己的文档、程序、脚本和安装包等东东都存放在用户自己的home目录中,这个目录就相当于Microsoft Windows中的“我的文档”。所以能用cd命令直接“回家”,真的是很方便。
pwd 命令,用于显示当前工作的目录路径,当用户操作时,不知道目前处于什么目录下,可以使用这个命令来查看当前的目录路径。格式如下:
(1)语法: pwd
(2)举例:
# pwd
/home/oracle
(3)说明: 第一行为运行的命令,第二行的内容为运行 pwd 命令
后显示的信息,即指用户当前所在的工作目录或目录的路径为:/home/oracle
提示:
应该经常使用pwd命令。Linux的目录结构非常复杂,一个小小的分支就可能会有十几层目录,就好象是个森林,所以Linux不会像Windows那样把全路径写在提示符里,那样太长了。在目录用cd钻来钻去,很容易记不清自己到底身在何处。这时候执行命令可是有点危险的,例如在一个下目录想删除一个文件,不搞清楚当前目录,可能会误删除同名的有用文件的,而且没那么容易恢复。尤其是在做“rm –rf”这种对目录直接删除的操作,更需要用pwd确定一下。还有很多其他的情况需要使用pwd,可能每执行十几个命令就会敲一回。我们都来感谢Jim Meyering先生吧,他是pwd的创作者。
mkdir 命令的功能是用来在 Linux 系统中建立目录,格式如下:
(1)语法: mkdir 目录名
mkdir [-选项] [参数] 目录名
(2)参数:
-m : 在建立目录时把按模式指定设置目录权限。
-p : 建立所有不存在父目录的目录。
(3) 对象: 对象为目录名,目录名即指要建立的目录名称。
(4) 举例:
#
mkdir oracle
# mkdir -m 755 log
# mkdir -p /tmp/var/logs
(5)说明:
第一行命令建立一个名为oralce的目录;第二行命令
建立一个log目录,并授予755权限(关于权限的概念
会在下面的内容介绍);第三行命令会在/tmp分区下
建立var目录,并在var目录下在建立一个 logs目录。
应用实例:快速建立多级目录
请注意上面介绍的mkdir命令的–p 参数,在某些时候可能会大大减化我们的操作。例如用户想在当前目录中创建node/xyd/logs/www目录的时候,如果现在连node目录都没有,我们本来是需要输入4次mkdir来逐级向下创建的,不过现在用-p参数就方便多了:
# mkdir –p node/xyd/logs/www
不管三七二十一,就去建吧!现在一条命令就搞定了。p 是 parent,上一级目录的意思。
rmdir 命令的功能是删除系统中的目录,具体格式如下:
(1)语法:rmdir 目录
rmdir [-选项] [参数] 目录
(2)参数:
-p: 在删除指定的目录后,若父目录为空,则rmdir也删除
父目录。
(3) 对象: 对象为目录,目录即指要删除的目录名称或目录列表。
(4)例如:
#
rmdir /zhang/log
# rmdir –p /zhang/log
#
rmdir /zhang/log
/zhang/log2
(5) 说明: 第一行命令功能删除/zhang目录下的log目录,要注
意log目录为空目录(下面介绍的rm命令可以删
除非空目录);第二行命令功能删除/zhang目录下的
log目录,并删除/zhang目录;第三行命令功能删除
/zhang目录下的log目录,并删除/zhang目录下的
log2目录。
提示:
rmdir可以删除的是非空目录,被删的目录下不能有文件或子目录。如果只是有子目录存在,还可以用-p来删除;如果含有文件,那-p参数也无能为力了。只有使用“rm –rf”大法,连根拔起。后面会有介绍。
上面一节中主要讲的是在Linux系统中对目录的操作命令,下面这一节中主要介绍一些常用的文件操作命令。掌握这些基本命令的操作,就可以对Linux系统中的各种文件进行查看、编辑、修改、复制、移动、删除、建立等操作,这些命令如下所示:
ls 显示目录和文件
rm 删除文件 touch 建立文本文件
cp 拷贝文件
cat 显示文本内容
mv 移动文件 more 按页显示文件内容 ln 链接文件 less 按页显示文件内容 find 查找文件 head 从前显示文件内容 file 查看文件类型 tail 从后显示文件内容 |
ls 命令用于显示文件(包括目录)的列表,及每个文件的详细信息,包括文件的大小、属组、属主、读写执行权限、创建日期等信息。具体格式如下:
(1) 语法:ls [-选项] [参数] 文件
(2) 参数:
-a:显示所有文件,包括当前目录和父目录。
-c:按列输出,纵向排序。
-x:按列输出,横向排序。
-d:将每一条都当作一个目录。
-l:给出长表。长表显示文件的详细内容,如:文件类型权
限,连接或目录计数,所有者,组,按字节文件大小,
文件的最近修改时间和文件名。
-t:按最后修改的时间排序,用-l标志一起使用。
-u:按最后访问的时间排序,用-l标志一起使用。
-c:按i节点信息最后修改的时间排序,用-l标志一起使用。
-r:反向排序。
-i:在第一列显示文件的i节点数。
-F:将/放在目录输入后,*放在可执行程序后,@放在符号
连接后,!放在FIFO后,=放在套接文件后,正规文件后
什么也不放。文件列表:用ls要处理的文件列表,可以
使用通配符。
注意:
文件类型有:
-:常规文件
d:目录
b:块设备特殊(磁盘)
c:字符特殊设备(终端)
p:有名管道
s:信号灯
m:共享存储器
(3)对象:上面语法中的文件是ls命令执行的对象,这里指的文件
可以是单个文件、文件列表(多个文件)或者是目录。
(4)举例:
# cd
/home
# ls –al
drwxr-xr-x
4 root root 4096 Jan 30
drwxr-xr-x
20 root root 4096 May 16
drwx------
5 install install 4096 Mar 18
drwxr-xr-x 2 oracle oracle 4096 Dec 19
(5)说明:上面举的例子中第一行命令代表切换到/home目录下;第
二行命令代表显示/home目录下所有文件和目录的详息;
第三至六行是第二行命令运行后显示的信息。下面以这
段信息的最后一行说明每一段内容的含义:
最后一行显示的信息:
drwxr-xr-x 2 oracle oracle 4096
Dec 19
这行信息分为8个区域,每个区域的含义如下:
drwxr-xr-x:第一个符号指示文件类型,减号为普通文件,d则表示
为目录类型。接著的九个字符分成三组,分别表示属
主、组员和其它用户的存取权;每组有三种存取权:r
代表读(Read)权限、w代表写(Write)权限和x代表执行(Execute)权限。而没有存取权的相应位置则会出现减号(-)代替。
2 :
代表oracle目录下还有两个目录,包括隐含目录,注意不包括目录下的文件个数。
oracle(左):代表oracle目录的属主为oracle用户。
oracle(中):代表oracle目录的属组为oracle用户组。
oracle(后):即在/home目录下有一个oracle目录。
4096 : 代表当前目录或文件的大小,即4096 byte=4 k。
Dec 19 : 代表目录创建于
18:36 : 代表目录创建于18时36分。
应用实例:“ls –a”查出黑客程序
当系统被侵入并植入后门时,黑客一般为了隐藏,会把文件名前加上一个“.”,这些文件在系统中默认是不显示的。但是 ls 的 –a 参数可以让它们无处藏身。我们运行下命令:
# cd /home/xyd
# ls
hosts tmplogs vnc-
上面一行显示的这三个文件都是比较正常的文件,再执行ls –a:
# ls –a
. .bash_history .bash_profile .emacs hosts
vnc-
注意最后一个文件.start.sh,通常系统中是不会有这种脚本存在的。我们再使用cat或者more,就可以从内容判断此文件是否是黑客的脚本文件。
技巧:
我们进入一个陌生的房间后,总是会扫视一下房间内的家具摆设。在Linux中ls就是用户的眼睛,我们使用cd进入了某个目录后,一般都会下意识地“ls”一下,“定睛一看”。关于ls的技巧就太多了,现在我们为大家整理出常用的几种。
注意管道符“|”的运用,会使ls的功能大大增强。实际上“|”在与其他很多命令的配合上都很有效,我们可以自由地发挥创造力。“|”体现了Linux(也是Unix)的魅力。将目录下的文件按照大小排序。利用了sort命令,命令行如下:
#
ls -l | sort -n -k5
有时我们在有很多文件的目录下工作,如/dev,通常会有7、8千个设备文件存在,这时如果ls一下,屏幕会向上翻个不停,只剩下最后一屏文件显示出来,而ls又没有分屏显示的参数,像DOS中的“dir /p”那样的。这时我们又可以借助“|”了,把结果交给more或less显示,命令行下
#
ls /dev | more
#
ls /dev | less
两个命令都会一屏一屏地显示结果,而且less还可以往回翻页。在/dev这样的目录,我们还会有这样的问题,这个目录中到底有多少个文件呢?可以用wc,统计命令来帮助我们。
#
ls /dev | wc -w
7519
屏幕中的7519就是文件的数目。
ls还可以与grep配合,组合出其他很有用的命令,请参看grep部分。
touch 命令是用于改变文件的时间戳,也可以用于创建新文件。而建立文件后,其内容的添加一般使用vi编辑器(vi编辑器的详细使用方法会在下一章给大家详细介绍),touch 命令具体格式如下:
(1)语法:touch
文件
-a :修改文件的存取时间.
-c :不创建文件
-m :修改文件
-r ref_file:将参照文件 ref_file 相应的时间戳记的数值作为指
定文件 file 时间戳记的新值.
-t time:使用指定的时间值 time 作为指定文件相应时间戳记
的新值。此处的 time 规定为如下形式的十进制数∶
[[CC]YY]MMDDhhmm[.SS]
(2)对象:对象为文件,即指要改变或建立的文件名称或文件列表。
(3) 举例:
#touch text
#touch text1 text2 test3
(4)说明:第一行命令的功能是改变text的时间戳到当前的时间或当无此文件时创建之,第二行命令的功能是同时对text1、text2、text3 三个文件进行同样的操作。
cat 命令一般用来显示文本文件中的内容,具体格式如下所示:
(1)语法:cat [-选项] [参数] 文件
(2)参数:
-b:计算所有非空输出行,开始为1。
-e:相当于-vE。
-n:计算所有输出行,开始为1。
-s:将相连的多个空行用单一空行代替。
-t:相当于-vT。
-u:忽略;为UNIX兼容产品而使用。
-V:显示除LFD和TAB以外的所有控制符,使用^作标志并在高位置的字符前放M-。
-A:相当于-vET。
-:E在每行末尾显示#符号。
-T:用^I显示TAB符号。
(3)对象:上面的语法中的对象为文件,如果没有指定文件或连字号(-),就从标准输入读取。
技巧:
cat还可以用来做一些常用的文件操作。cat的结果会显示到标准输出,也就是屏幕上来。如果我们用重定向符“>”、“>>”把结果输出到文件中去,会有什么效果呢?我们来看看下面的一些命令行:
# cat hosts > hosts.old
用hosts的内容代替hosts.old文件的内容。如果hosts.old不存在,则一个新文件会被创建。
# cat hosts >> hosts.old
把hosts文件的内容加到hosts.old的末尾,使两个文件合为一个。
# cat hosts1 hosts2 hosts3 > hosts.new
hosts.new是一个新文件,cat命令把hosts1、hosts2、hosts3的内容依次连接起来,并生成一个新的hosts.new文件。
more 命令是 Linux 系统中经常用到的命令,它的主要功能是可以按页显示文件及内容,如果一个文本文件的内容很多,可以用 more 命令来分页查看文件中的内容,具体语法格式如下:
(1)语法:more [-选项] [参数] 文件名
(2)参数:
-n: n是整数,用于建立大小为n行长的窗口。窗口大小是
在屏幕上显示多少行。
-c: 用more给文本翻页时通过从头清除一行,然后再在最
后写下一行的办法写入。通常,more清除屏幕,再写每一行。
-d: 显示 “Press space to cpntinue, ‘q’ quit”代替more的缺省提示符。
-f: 计算逻辑行代替屏幕行。长行在屏幕上换行显示,通常被more计算为新的一行;-f标志对长行的换行显示不计数。
-s: 多个空行压缩处理为一个。
-p: 不滚屏,代替它的是清屏并显示文本。
-u: 禁止加下划线。
(3)对象:对象为文件名,即希望用more显示文件内容的文件。
(4)举例:
#
more /etc/httpd/conf/httpd.conf
# more –20
/etc/httpd/conf/httpd.conf
# more –s /etc/httpd/conf/httpd.conf
less 命令类似 more 命令,它的主要功能也是可以按页显示文件及内容,并允许在文件中向前和向后移动,其具体语法格式如下:
(1)语法:less [-选项] [参数] 文件名
(2)参数:
-?:本选项显示less接收的命令小结。若给出本选项则忽略其他选项,less保留并在帮助屏后显示。
-a:在当前屏幕显示的最后一行之后开始查询。
-c:从顶行向下全屏重写。
-C:象-c,但在写之前清屏。
-e:第二次到文件尾后自动退出less。若缺省,唯一退出less的方式是通过q命令。
-E:第一次到文件尾后自动退出less。
-i:区分大小写查询。
-n:去掉行号。
-q:产生相对安静的操作。当试图向文件尾之后或文件头之前滚动时,终端铃不响;在产生其他错误时,如键入非法字符,终端铃响。
-Q:产生完全安静的操作。
-s:将多个空行压缩成一个空行。
-x n:每次按制表符走n格,n的缺省值是8。
(3)对象:对象为文件名,即希望用less显示文件内容的文件。
(4)举例:
#
less /etc/httpd/conf/httpd.conf
# less –s /etc/httpd/conf/httpd.conf
技巧:
前面的内容已经提示了,我们不但可以用more和less显示文本文件的内容,而且可以把那些输出到标准输出(屏幕)上的信息都通过管道符放到more和less中来显示,这样所有的命令就都有分屏显示功能了!如下下面的命令:
# find / -name *sh | more
# ps aux | more
head 命令的主要功能是从前显示文件内容,具体格式如下:
语法:
head 文件名
head –n 文件名
(2)参数:
-n: 从文件开始数第n行之间的文件内容。
对象:
对象为文件,即希望查看文件内容的文件名。若对象为空,则使用标准输入。
(4) 举例:
#
head /var/log/message
# head –50
/var/log/message
应用实例:head
我们在某些时候,会需要知道系统在启动时的排在前几个的进程还有哪些在活动,就可以使用head:
# ps aux | head
这时系统就会把排位前10的进程列出,正是我们需要的。
tail 命令的主要功能是从后显示文件及内容,具体格式如下:
(1)语法: tail –f 文件名
tail –n
文件名
(2)参数:
-f: 若用此选项而输入不是标准输入,tail监控文件增长。这是无限循环输出,必须用中断键中止。
-n: 从文件末尾倒数第n行开始观察文件。以行为单位的偏移量文件中开始观察的位置。如果以-开头,则从文件尾开始算;以+开关,从文件开始算。
对象: 对象为文件,即希望查看文件内容的文件名。若对象为空,则使用标准输入。
(4) 举例:
# tail –f /www/log/access.log
# tail –50
/var/log/messages
应用实例:tail
我们在调试某些服务的时候,需要在过程中不断地查看系统日志给出的信息,来帮助修改。如调试named服务的时候,错误信息都会加到/var/log/messages的末尾去。实际上系统中大部分日志都储存在这个文件里。这时我们可以用cat、more、less等工具来显示,但messages文件有几千行内容是很平常的事情,用这些工具可能需要翻屏一二百屏,才能到最后我们想看的内容,这样的效率非常低下。而使用tail是恰到好处的。如下面的命令行:
# tail /var/log/messages
我们做一次named.conf文件的修改,启动named进程,马上就可以tail一下messages文件,看一看刚刚在named启动时发生了什么事情。反复查看反复修改,直至最后找出问题。
rm 命令的功能是删除文件,是 Linux 系统不可缺少的常用的基本命令,其具体格式如下所示:
(1)语法:rm
[-选项] [参数] 文件
(2)参数:
-r: 删除文件列表中指定的目录,若不用此标志则不删除目录。
-i: 指定交互模式。在执行删除前提示确认。任何以Y开始的响应都表示肯定;其他则表示否定。
-f: 指定强行删除模式。通常,在删除文件权限可满足时rm提示。本标志强迫删除,不用提示。
-V: 详细模式。在删除前回显文件名。
--: 指明所有选项结束。用于删除一个文件名与某一选项相同的文件。例如:假定偶然建立了名为-f的文件,又打算删除它,命令rm –f不起任何作用,因为f被解释成标志而不是文件名;而命令rm -- -f能成功地删除文件。
(3)对象:上面语法中的文件是rm命令执行的对象,这里指的文件可以是单个文件、文件列表(多个文件)或者是目录。
举例:
#
rm –rf /tmp/*
#
rm /tmp/abc.log
提示:
在Linux中我们可以利用alias别名把rm转为了rm –i,比如:
# alias rm = ‘rm –i‘
这样我们在删除文件和目录时系统就会提示一下,确认之后再删,提高了删除操作的安全性。但注意如果加了“-f”选项的话,rm还是会问也不问,直接删除的。
cp 命令类似Dos命令中的copy命令,用于文件及目录之间的复制,其具体格式如下:
(1)语法 :cp [选项] 源文件 目标文件
cp [选项] 源文件组 目标目录
(2)参数:
-a: 在备份中保持尽可能多的源文件结构和属性。
-b: 作将要覆盖或删除文件的备份。
-d: 将符号连接作为符号连接拷贝,而不拷贝它们所指的文件。并在备份中保持源文件间固有的连接关系。
-f: 删除已存在的目标文件。
-i: 提示是否覆盖已存在的目标文件。
-l: 形成固有连接以代替非目录的拷贝。
-P: 通过加入目标目录分支和指定的源文件名形成每个目标文件名。给cp的最后一个变量必须是已存在的目录的名字。
-p: 保持原先文件的所有者,组,权限和时间标志。
-r: 递归拷贝目录,把所有非目录文件当普通文件拷贝。
-s: 建立符号连接,代替非目录文件的拷贝。如果目标文件不在当前目录,所有的源文件名必须是绝对路径(从‘/’开始)。对不支持符号连接的系统,本选项将产生一个错误信息。
-u: 更新选项。目标是非目录自己经存在并具有相同的或更新的修改时间,则不拷贝。
-v: 在拷贝前打印每个文件名。
-x: 从开始拷贝的文件开始,跳过在不同文件系统上的子目录。
-R: 递归拷贝目录。
-S: 用于产生备份文件的后缀。可以SIMPLE_BACKUP_SUFFIX环境变量建立,它能被此选项绕过。若以上都未给出,缺省值是~。
(3)对象:
源文件 : 要拷贝的文件。
目标文件:文件名。也可以是目录名,这种情况下,源
文件名作为目标文件名,而文件放在该目录下。
源文件组:要拷贝文件的由空格分隔的列表。
目标目录:目标目录。
(4)举例:
# cp /home/oracle /root
# cp –R
/home/oracle /root
# cp –r
/home/* /tmp
应用实例:cp 清空文件内容
在上面tail的实例中,我们提到了/var/log/messages文件。此文件也会存入系统启动时的信息。现在我们想通过“重新启动 + more /var/log/messages”的操作,详细地查看一下启动的过程,但是新的内容将与以前的内容连在一起,实在难以分辨,还是先备份此文件然后清空它为好。问题是备份之后,如何快速地清空它呢?
一般使用者都会用vi编辑器打开messages,全部删除内容,然后保存退出。或者删除messages,再touch一个新的出来(注意,这种习惯并不值得提倡)。其实这些做法都不太方便。
在Linux系统中有一个/dev/null设备,“空设备”,俗称黑洞,任何放到其中的东西都会从系统中消失。我们可以把它复制到需要被清除内容的文件中去。运行下面的命令行,
# cp /dev/null /var/log/messages
我们就可以把文件的内容就清空了。补充一下,另外两个的命令也可以方便地达到这个效果,如下所示:
# cat /dev/null >
/var/log/messages
# echo > /var/log/messages
意思是显示一个空的字符,利用“>”重定向符输入到messages文件中去,从而代替其中的内容。效果也就是把文件清空了。
mv 命令的功能为移动文件(包括目录),如果在同一目录进行此操作,则是对相应对象进行改名。具体格式如下:
(1)语法: mv [-f] [-i] 文件1 文件2 ……
mv [-f]
[-i] 目录1 目录2 ……
mv [-f]
[-i] 文件列表 目录
(2)参数:
-f: 通常目标文件存在且没有写权,mv会提示信息。本选
项使mv执行移动而不作提示。
-i: 交互模式,在改写文件前提示。
-R: 递归移动目录。注意需要移动子目录时一定要加上
(3)对象:
文件1:源文件名。
文件2:目标文件名(新文件名)。
目录1:源目录名。
目录2:目标目录名(新目录名)。
目录 :目标目录。
文件列表:用空格分隔的文件名列表。用于文件保持它们的名字但移到一个新目录。
(4)举例:
# mv /tmp/abc.log /home/oracle
# mv -R /home/test /home
# mv /home/yani/*.* /tmp
ln 命令的功能主要是链接文件,其具体格式如下:
(1)语法: ln [-选项] [参数] 文件1 文件2
(2)参数:
-f : 链结时先将与 dist 同档名的档案删除
-d : 允许系统管理者硬链结自己的目录
-i : 在删除与 dist 同档名的档案时先进行询问
-n : 在进行软连结时,将 dist 视为一般的档案
-s : 进行软链结(symbolic link)
-v : 在连结之前显示其档名
-b : 将在链结时会被覆写或删除的档案进行备份
-S SUFFIX: 将备份的档案都加上 SUFFIX 的字尾
-V METHOD: 指定备份的方式
--help : 显示辅助说明
--version: 显示版本
(3)对象:
文件1 : 指源文件或目录
文件2 : 指生成的连接文件或目录
(4)举例:
# ln -s yy zz
说明: 上面一行命令的结果是ln命令将文件 yy 链接,并产
生一个链接文件 zz。
应用实例:利用ln保持使用习惯
有些用户从其他的平台如Solaris上转为Linux使用者,其中一个需要克服之处就是一些命令与配置文件的位置变了,好象借用了别人的工具箱,找什么东西都很费劲。这时候ln可以帮助我们保持原来的使用习惯。如用户的named.conf配置文件原来存放在Solaris的/etc/目录下,但新使用的Linux机器是放在/var/named/目录下,用户就可以建立一个/var/named/named.conf文件的软链接,放在/etc/目录下。
# ln –s /var/named/named.conf /etc/named.conf
完成之后,Solaris用户还是可以对/etc/named.conf文件进行操作,进行的修改会存入/var/named/named.conf文件。
find 命令是Linux系统中非常重要的一个命令,它的主要功能是用来查找文件或目录。其具体格式如下:
(1)语法:find
[-选项] [参数] 文件 匹配标准
(2)参数:
-name文件: 告诉find要找什么文件;要找的文件包括在引号中,可以使用通配符(*和?)
-perm模式: 匹配所有模式为指定数字型模式值的文件。不仅仅是读,写和执行,所有模式都必须匹配。如果在模式前是负号(-),表示采用除这个模式的所有模式。
-type x: 匹配所有类型为x的文件。x是c(字符特殊),b(块特殊),d(目录),p(有名管道),l(符号连接),s(套接文件)或f(一般文件)。
-links n: 匹配所有连接数为n的文件。
-size n:
匹配所有大小为n 块的文件(512字节块,若k在n后,则为1K字节块)。
-user用户号:匹配所有用户序列号是前面所指定的用户序列号的文件,可以是数字型的值或用户登录名。
-atime n: 匹配所有在前n天内访问过的文件。
-ctime n: 匹配所有在前n天内文件状态被修改过的文件。
-mtime n: 匹配所有在前n天内文件数据被修改过的文件。
-exec命令:对每个匹配文件执行指定命令,标志{}用于指定命令执行时文件名出现的地方。命令必须终止于转义分号( ;)。 这里,命令ls用-d变元执行,每个文件在发现{}的地方传给ls。
-newer文件:匹配所有修改时间比file文件更新的文件。
(3)对象:
文件: 上面语法中的文件是find命令执行的对象,这里指的文件希望查询的单个文件、文件列表(多个文件)或者是目录。
匹配标准: 希望查询的文件的匹配标准或说明。
(4)举例:
# find
/home -name admin
# find /
-ctime 3
(5)说明: 第一行命令实现在/home目录下查找admin的文件或目录;第二行命令实现在/ 目录下查找前三天修改过的文件或目录。
应用实例:find
做为管理员,在一个用户从系统中永久删除的时候,可以把他的相关文件与目录也删除,既可以节省空间,又保护了安全。
我们可以用find命令找出这些文件,结合rm删除之。
# find / -user xyd
上面的命令可以找出用户xyd在系统中的全部文件和目录。如果想知道文件的详细信息,可以用-exec调用ls来查看。
# find / -user xyd –exec ls –l {}\;
上面的命令可以把所有找出的文件以长格式列出,供管理员判断是否需要删除。经过检查,确认该用户的所有文件都不再有用处了,就可以用rm删除,使用下面的命令:
# rm –rf
`find / -user xyd`
这样就可以达到目的了。
使用find,还可以列出一个目录下的所有文件,这能弥补某些命令的先天不足之处,如touch命令。我们可以用“touch *”改变当前目录下的所有文件的时间戳,但无法对子目录中的文件进行操作,而先使find把它们列出来就可以了:
# touch `find /usr/local –print`
上面的命令就可以把/usr/local目录下及其子目录中的所有文件touch一遍,很好用吧。
file 命令是查看文件类型的命令,具体格式如下:
(1)语法:file
[-选项] [参数] 文件
(2)参数:
-c: 打印输出幻数文件的分析形式。这通常用于与-m联合使用。在安装一个新的幻数文件之前调试它。
-z: 深入观察一个压缩文件,并试图查出它的类型。
-L: 本选项允许符号连接。
-m文件: 指定用于说明文件类型的幻数的一个替换文件。
(3)对象: 上面语法中的文件是file命令执行的对象,这里指的文件是希望查询文件类型的单个文件、文件列表(多个文件)或者是目录,甚至目录列表。
(4)举例:
# file /var/log/message
# file /var/log /var/log1 /var/log2
# file –z
/home/yani/apache
在 Linux 系统中,每个文件和目录都有自己的属性和存取权限,这样一来,通过属性的设置,就可以决定不同用户或组之间的文件授权的访问。而文件权限可以决定哪些用户可以读、写或者执行一个文件。下面这节中的内容属要是介绍在 Linux 系统中改变目录文件属性与权限的命令。
属性与权限命令如下所示:
chown 改变属主 chgrp 改变属组 chmod 改变权限 |
chown 命令是用来更改文件和目录属主,即所属用户的命令,具体格式如下所示:
语法:chown
[-选项] [参数] 用户 文件
参数:
-c: 只有在文件的所有权确实改变时才进行详细说明。
-f: 不打印所有权不能改变的文件的错误信息。
-v: 详细说明所有权的变化。
-R: 递归改变目录及其内容的所有权。
--help:
在标准输出打印使用信息并顺利退出。
--version: 在标准输出打印版本的信息并顺利退出。
对象:用户指指用户号或文件/etc/passwd中的用户名称;文件指用于重新指定所有权的文件。这里指的文件可以是单个文件、文件列表(多个文件)或者是目录。
(4)举例:
#
chown zhang /home/wang
#
chown zhang /home/wang/ /home/zhao
# chown –R
oracle /home/zhang
(5)说明: 第一行命令将/home/wang目录的属主改为用户zhang,用命令“ls –l”可以看到前后的变化。第二行的命令将/home/wang和/home/zhao目录的属主都改为用户zhang。第三行的命令将/home/zhang 目录及其目录下的文件的属主改为用户oracle。其中,“R”参数表示递归改变目录及其目录中所有内容的所有权。
chgrp 命令是用来更改文件和目录属组,即所属用户组的命令,具体格式如下所示:
(1)语法:chgrp [-选项] [参数]
组 文件
(2)参数:
-c: 只有在文件的所有权确实改变时才进行详细说明。
-f: 不打印所有权不能改变的文件的错误信息。
-v: 详细说明所有权的变化。
-R: 递归改变目录及其内容的所有权。
--help: 在标准输出打印使用信息并顺利退出。
(3)对象:用户指要改变到的组或文件/etc/growp中的组名称;文件指用于重新指定所有权的文件。这里指的文件可以是单个文件、文件列表(多个文件)或者是目录。
(4)举例:
#
chgrp zhang /home/wang
#
chgrp zhang /home/wang/ /home/zhao
# chgrp –R
oracle /home/zhang
(5)说明:第一行命令将/home/wang 目录的属组改为zhang的用户组。第二行命令将/home/wang和/home/zhao目录的属组改为zhang的用户组。第三行命令将/home/zhang 目录及其目录下的文件的属组改为oracle的用户组。
提示:
chown与chgrp命令的用法基本是一致的,用法也比较简单。可以用-R参数把一个目录下的所有内容都改变用户和组。
chmod 命令用来更改文件即目录的读、写及可执行权限,具体格式如下所示:
(1)语法:chmod [-选项] [参数]
模式 文件
chmod [-选项] [参数]
级别 作用 权限 文件
注意:
chmod 命令有两种格式。前一种比较简单,但需要建立各种权限的正确值,这是“绝对”方式。它建立所有级别的权限。第二种方式较复杂,但可以用符号指定权限,并可进行增量指定,这是“相对”方式,因为动工可以增加也可以去掉权限。
(2)参数:
-c: 只有在文件的权限确实改变时才进行详细说明。
-f: 不打印权限不能改变的文件的错误信息。
-v: 详细说明权限的变化。
-R: 递归改变目录及其内容的权限。
--help: 在标准输出打印使用信息并顺利退出。
--version: 在标准输出打印版本的信息并顺利退出。
模式: 关于文件的所有级别的权限的八进制数字模式。每个八进制数代表存储于文件系统的i节点表的模式域中的一位。把数加在一起设置置限组合。权限在用户或所有者、组、和其他或世界级中都允许相同的模式。附加级控制一些特殊处理。模式为如下形:SUGO,S=特殊处理。U=用户或所有者,G=组,O=其他或世界。每个数都是从下表得到(查阅系统提供的用户手册,可得到区别于U、G、O等方法的特定方法的数字)。可能的权限是:没有权限、执行权、读权和写权;这些权限的值分别是0,1,2和4。
级: 等级作用于命令的其他部分。不同的级有:文件的用户或所有者级、组级、用户级和所有的级别,后者是缺少值,这些级的代码分别是u,g,o和a。作用: 指定文件模式产生的作用。可以增加和去掉权限,或仅置指定的权限。用+代表增加,-代表删除,=代表仅为指定权限。
权限:
文件应用的权限。可获得读、写和执行权;权限的代码分别是r,w和x。
对象: 对象为文件,指需要重新指定权限的文件。这里指的
文件可以是单个文件、文件列表(多个文件)或者是目录。
举例:
#
chmod 777 /home/oracle
#
chmod -R 777 /oracle
#
chmod -R a+r /oracle
说明:第一行命令将/home/oralce目录权限设成全部可读、
写、执行;第二行命令将/oralce目录和目录下文件权限设成全部可读、可写、可操作;第三行命令将/oralce目录和目录下文件的所有用户级或组级授予可读(read)权限。
应用实例:防止文件被别人修改和误删除
在一些大家都可以添加删除文件的目录,如/tmp,你放进去一个文件,担心被修改和误删,有没有办法保护?
首先当然是加上他人不可修改的权限了,同时我们可以用chmod给文件加上粘着位(sticky bit),这样其他用户就不可以非法操作了,方法在chmod的数字权限最前面加上“1”,例如:
# chmod 1700 /tmp/xyd.info
就可以了。如果其他用户想删除,会出现下面的错误信息,虽然他在此目录中有删除文件的权力:
rm: cannot remove `xyd.info': Operation not permitted
注意粘着位对root无法限制!谁让root是老大呢。J
useradd 添加帐户 userdel 删除帐户 groupadd 添加组 groupdel 删除组 |
useradd
利用useradd命令的基本的语法如下:useradd + [用户名],例如:
# useradd
nysale
上面的命令就会建立名为nysale的用户
userdel
可以用来删除一个已经存在的用户,基本语法同useradd一样。
userdel 用户名
# userdel
nysale
可以将nysale删除
groupadd
groupadd,后面跟着组名即可添加组,语法:groupadd groupname, 其中groupname为要添加的组名,例如命令:
# groupadd market
可以建立
market组。
groupdel
删除用户组的方法和上面讲的删除用户方法类似,其语法为:groupdel groupname, 其中groupname为要删除的组名,例如命令:
# groupdel market
可以将market组删除。
有关用户与组管理命令的详细用法将在第9章《用户管理》中讲解,我们也会同时介绍一些其他的用户与组操作相关命令。
在Linux系统中有很多功能强大的与系统相关的命令,通过这些命令可以查看系统信息、状态、资源情况以及进行系统的性能优化。这些命令如下所示:
date
设置时间 nice 设置优先级
ps
查看进程 who 查看系统用户 vmstat 查看系统性能 top 查看系统性能 kill 杀掉进程 df 查看磁盘空间 du 查看目录空间 reboot 重启系统 shutdown
关闭系统 logout 退出登陆 |
date 命令可以用来显示或设定系统的日期与时间,具体格式如下所示:
语法:date [-选项] [参数]
(2)参数 :
-u : 显示目前的格林威治时间
--help : 显示辅助讯息
-s datestr : 将系统时间设为 datestr 中所设定的时间
-d datestr : 显示 datestr 中所设定的时间 (非系统时间)
date 命令在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下:
(a)时间方面
% : 印出 %
%n : 下一行
%t : 跳格
%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从
%S : 秒(00..61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区
(2) 日期方面 :
%a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期与时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以Sunday为一周第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以Monday为一周第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)
若是不以加号作为开头,则表示要设定时间,而时间的格式一般为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数
(3)举例 :
1.设置日期
使用date命令的“ date -d mm/dd/yyyy ”格式设置日期。比如,输入命令:
#date –d
2.设置时间
请使用date命令的“ date -s hh:mm:ss ”格式设置时间。比如,输入命令:
#date -s 14:
3.显示时间后跳行,再显示目前日期,命令如下所示:
#date '+%T%n%D'
4.显示月份与日数,命令如下所示 :
#date '+%B %d'
5.显示日期与设定时间(12:34:56) :
#date --date '12:34:56'
提示:
当你不希望出现无意义的 0 时(比如说
nice 命令可以将系统的程序按照设置的优先级来顺序的执行,具体格式如下:
(1)语法:
nice [-选项] [参数]
参数:
-n adjustment:为将该原有优先序的增加 adjustment
--help: 显示求助讯息
--version: 显示版本资讯
(3)举例:
#nice -n 1 ls
#nice -n 10 ls
(4)说明:上面例子中的第一行命令将 ls 的优先序加 1 并执行,
第二行命令将 ls 的优先序加 10 并执行。
注意:
优先序 (priority) 为操作系统用来决定 CPU 分配的参数,Linux 使用『回合制(round-robin)』的演算法来做 CPU 排程,优先序越高,所可能获得的 CPU时间就越多。
ps 命令是 Linux 系统经常要用到的命令,它可以显示瞬间行程的信息,可以帮助使用者来查看系统是否正在运行某些进程。具体命令格式如下:
(1)语法:ps [-选项] [参数]
(2)参数:
-l:给出长列表。
-u:打印用户格式,显示用户名和起始时间。
-j:按作业格式输出。
-s:按信号格式输出。
-v:按虚拟存储器格式显示输出。
-m:显示存储器信息。
-a:也显示其他用户的进程。
-x:显示不带控制终端的进程。
-S:增加子CPU时间和页面出错。
-c:从内核的task-_structure列出命令名。
-e:显示环境。
-w:用宽格式显示,不截取命令行,使它成为一行。
-h:不显示题头。
-r:只显示正在运行的进程。
-n:为USER和WCHAN提供数字输出。
-aux:显示所有包含其他使用者的行程。
(3) 举例:
# ps -aux
USER PID %CPU
%MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0
0.0 1392 84 ? S
root 2 0.0
0.0 0 0 ? SW
root 3 0.0
0.0 0 0 ? SW
root 5 0.0
0.0 0 0 ? SW
root 6 0.1
0.0 0 0 ? SW
root 7 0.0
0.0 0 0 ? SW
root 8 0.0
0.0 0 0 ? SW
注意:
在上面信息中的STAT列表示进程状态,一般用下面的代码表示进程状态。
R: 可执行的进程。
S: 睡眠状态的进程。
D: 不间断睡的进程
T: 停止或跟踪的进程。
Z: 僵尸进程。
W: 进程没有驻留页。
应用实例:快速找到某程序的进程号
在很多情况下,我们使用ps命令是为了确定某后台服务的进程号,其实除了ps,我们还可以使用/var/run下的*.pid文件。这个文件一般是在服务启动的时候创建的,并写入自己获得的进程号。如xinetd启动的时候就创建了/var/run/xinetd.pid文件。
我们可以利用这些文件来快速杀掉或者重启动它们。原来我们这么做需要先ps找进程号,然后再kill,现在就简单了,用一行命令就可以。例如:
# kill –HUP `cat /var/run/xinetd.pid`
# kill -9 `cat
/var/run/sshd.pid`
这种方式特别适合于脚本编写中。
who 命令用来显示登入系统的用户信息,执行这项指令后可得知目前有那些用户登入系统,单独执行who指令会列出登入账号,使用的终端机,登入时间以及从何处登入。此命令的具体使用方法如下:
(1)语法:who [-选项] [参数]
(2)参数:
-H: 显示各栏位的标题信息列。
-i: 显示闲置时间,若该用户在前一分钟之内有进行任何动
作,将标示成"."号,如果该用户已超过24小时没有任何
动作,则标示出"old"字符串。
-m: 此参数的效果和指定"am i"字符串相同。
-q: 只显示登入系统的账号名称和总人数。
-s: 此参数将忽略不予处理,仅负责解决who指令其他版本
的兼容性问题。
-w: 显示用户的信息状态栏。
--help: 在线帮助。
--version: 显示版本信息。
举例:
# who
# who am
i
# who –w
应用实例:who am i,我是谁?
有的用户在系统中使用su命令过多,在shell中钻来钻去,以致忘记了自己最初是用哪个用户登录的(请不要笑,这是很有可能的,电视剧很常见的失忆症在Linux中也并不少见)。这时候使用下面的命令行:
# who am i
就可以立刻被系统告知类似下面的信息:
xyd pts/0 Sep 23
意思是“您是用户xyd,
vmstat 命令可以察看系统的内存、CPU使用率等信息,具体语使用方法如下:
语法: vmstat
举例:
#vmstat
procs memory swap io system cpu
r b w swpd free buff cache si so bi bo in cs us sy
id
0 0 0 1460 7768 79864 65040 0 0
12 10 103 25 1 0 98
top 命令可以动态实时的察看系统性能,分析CPU、内存的使用资源以及相关进程的信息等。
语法:top [-选项] [-参数]
参数:
-d: 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
-q: 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
-S: 指定累计模式。
-s: 设置刷新率。
-i: 使top不显示任何闲置或者僵死进程。
-c: 显示整个命令行而不只是显示命令名
-u: 设置显示用户的进程
提示:
top命令显示的项目很多,默认值是每5秒更新一次,当然这是可以设置的。 显示的各项目为: uptime 该项显示的是系统启动时间、已经运行的时间和三个平均负载值(最近1秒,5秒,15秒的负载值)。 processes 自最近一次刷新以来的运行进程总数。这些进程被分为正在运行的,休眠的,停止的等很多种类。进程和状态显示可以通过交互命令t来实现。 CPU states 显示用户模式,系统模式,优先级进程(只有优先级为负的列入考虑)和闲置等各种情况所占用CPU时间的百分比。优先级进程所消耗的时间也被列入到用户和系统的时间中,所以总的百分比将大于100%。 Mem 内存使用情况统计,其中包括总的可用内存,空闲内存,已用内存,共享内存和缓存所占内存的情况。
举例:
# top
37 processes: 35
sleeping, 2 running, 0 zombie, 0 stopped
CPU states: 5.6% user, 1.6% system, 0.0% nice, 92.8% idle
Mem:190776K
av,183588K used,7188K free,0K shrd, 80180K buff
Swap: 385520K
av,1476K used, 384044K free 65096K
cached
PID USER
PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
6 root 10 0 0 0 0 SW 0.1 0.0 0:18 kscand
9 root 9 0 1036 1036 860 R 0.1 0.5 0:00 top
1 root 8 0 100 84 52 S 0.0 0.0 0:03 init
2 root 9 0 0 0 0 SW 0.0 0.0 0:00 kevent
3 root 9 0 0 0 0 SW 0.0 0.0 0:00 kapmd
5 root 9 0 0 0 0 SW 0.0 0.0 0:00 kswapd
7 root 9 0 0 0 0 SW 0.0 0.0 0:00 bdflus
8 root 9 0 0 0 0 SW 0.0 0.0 0:00 kdated
9 root -1 -20 0 0 0 SW< 0.0 0.0 0:00 telnet
说明:
第一行的项目依次为当前时间、系统启动时间、当前系统登录用户数目、平均负载。第二行为进程情况,依次为进程总数、休眠进程数、运行进程数、僵死进程数、终止进程数。第三行为CPU状态,依次为用户占用、系统占用、优先进程占用、闲置进程占用。第四行为内存状态,依次为平均可用内存、已用内存、空闲内存、共享内存、缓存使用内存。第五行为交换状态,依次为平均可用交换容量、已用容量、闲置容量、高速缓存容量。然后下面就是和ps相仿的各进程情况列表了。
(5)参考:
下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。
<空格>
立即刷新显示。
Ctrl+L 擦除并且重写屏幕。
h或者
显示帮助画面,给出一些简短的命令总结说明。
k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序。
r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S 切换到累计模式。
s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F
从当前显示中添加或者删除项目。
o或者O
改变显示项目的顺序。
l 切换显示平均负载和启动时间信息。
m 切换显示内存信息。
t 切换显示进程和CPU状态信息。
c 切换显示命令名称和完整命令行。
M 根据驻留内存大小进行排序。
P 根据CPU使用百分比大小进行排序。
T 根据时间/累计时间进行排序。
W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
注意:
top命令和ps命令的基本作用是相同的,显示系统当前的进程和其他状况;但是top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。 比较准确的说,top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用。内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。在后面的介绍中将把命令参数和交互命令分开讲述。
kill 命令可以送出一个特定的信号 (signal) 给系统正在运行的程,来终止进程。具体使用方法如下:
(1)语法:kill [-选项] [-参数]
(2)参数:
-s (signal) : 其中可用的讯号有 HUP (1), KILL (9), TERM
(15), 分别代表著重启, 杀掉, 结束。
-l (signal) : 列出所有可用的信号名称。
-p : 印出 pid , 并不送出信号。
(3)举例:
# kill -9
323
# kill
-HUP 456
(4)说明: 第一行命令的功能是将 pid 为 323 的行程杀掉。第
二行命令的功能是将 pid 为 456 的行程重新启动。
应用实例:kill命令使后台进程重新启动
我们在系统的维护与管理中经常会修改某个服务的配置文件,这时候就需要让相应的后台进程重新启动一下,使新的配置生效。如在管理xinetd时,管理员因工作需要而停止了本机的FTP服务,而且他编辑了
/etc/xinetd.d/vsftp文件,将其中的“disable = no”改为了“disable = yes”此时并没有结束,如果不重启xinetd服务的话,配置无法生效,新的FTP请求还是会被接受。这时候“kill –HUP”就会起作用了。本例中,我们需要先找到xinetd的进程号,然后再重启:
# ps ax | grep xinetd
会显示类似下面的结果,其中数字1659就是我们需要的进程号:
1659 ? S 0:00 xinetd -stayalive -reuse -pidfile
/var/run/xinetd.pid
这时我们运行下面的命令行:
# kill –HUP 1659
然后再试一下FTP服务,就会看到被拒绝的通知了。
df 命令用来察看硬盘空间的使用情况,具体使用方法:
语法:df
[-选项] [参数]
(2)参数:
-a: 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统。
-k: 以k字节为单位显示。
-i: 显示i节点信息,而不是磁盘块。
-t: 显示各指定类型的文件系统的磁盘空间使用情况。
-x: 列出不是某一指定类型文件系统的磁盘空间使用情况
(与t选项相反)。
-T: 显示文件系统类型。
(3)举例:
# df –T
# df –h
# df -k
du 命令是用来统计文件或目录占磁盘空间的大小,具体使用方法:
(1) 语法: du [-选项] [参数]
文件目录
(2) 参数:
-s: 对每个Names参数只给出占用的数据块总数。
-a: 递归地显示指定目录中各文件及子孙目录中各文件占用的数据块数。若既不指定-s,也不指定-a,则只显示Names中的每一个目录及其中的各子目录所占的磁盘块数。
-b: 以字节为单位列出磁盘空间使用情况(系统缺省以k字节为单位)。
-k: 以1024字节为单位列出磁盘空间使用情况。
-c: 最后再加上一个总计(系统缺省设置)。
-l: 计算所有的文件大小,对硬链接文件,则计算多次。
-x: 跳过在不同文件系统上的目录不予统计。
(3) 举例:
# du –s /mnt
# du –k
/home
应用实例:管理磁盘空间
某一天root登录的时候,收到了邮件:“空间使用已经达到了93%!”,这可不得了,万一是重要的分区系统可能会宕机的。赶快使用df查看,发现下面这一行的信息:
Filesystem 1K-blocks Used Available Use% Mountedon
/dev/sda1 4013089 3732173 280916 93% /usr/local
原来是/usr/local分区要满了,用户新添加的程序一般都在这里,最好删除一些过期的程序和文件。用du来看一下:
# du –k
/usr/local
结果显示出了一大堆文件与目录的列表,每个目录的大小夹杂在其中,难以查看,这时再用sort排序一下:
# du –k /usr/local | sort –n
上面的命令就可以把占用空间最多的目录列出来了,占空间多的在最下面。查看里面的内容,删除那些过期和测试的程序。最后再用df检查一下,确认已经有足够的剩余空间在/usr/local分区上。
输入重定向:< 和 <<
输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。所以说,输入重定向主要用于改变一个命令的输入源,特别是改变那些需要大量输入的输入源。
例如,命令wc统计指定文件包含的行数、单词数和字符数。如果仅在命令行上键入:
$ wc
wc将等待用户告诉它统计什么,这时shell就好象死了一样,从键盘键入的所有文本都出现在屏幕上,但并没有什么结果,直至按下<ctrl+d>,wc才将命令结果写在屏幕上。如果给出一个文件名作为wc命令的参数,如下例所示,wc将返回该文件所包含的行数、单词数和字符数。
$ wc /etc/passwd
20 23 726 /etc/passwd
如果不给出一个文件名作为wc命令的参数,此时需要把/etc/passwd文件内容传给wc命令,方法是重定向wc的输入。输入重定向的一般形式为:命令 < 文件名。
可以用下面的命令把wc命令的输入重定向为/etc/passwd文件:
$ wc < /etc/passwd
20 23 726
另一种输入重定向称为here文档,它告诉shell当前命令的标准输入来自命令行。here文档的重定向操作符使用<<。它将一对分隔符(本例中用delim表示)之间的正文重定向输入给命令。下例将一对分隔符delim之间的正文作为wc命令的输入,统计出正文的行数、单词数和字符数。
$ wc << delim
>this text forms the content
>of the here document,which
>continues until the end of
>text delimter
>delim
4 17 98
在<<操作符后面,任何字符都可以作为正文开始前的分隔符,本例中使用delim作为分隔符。here文档的正文一直延续到遇见另一个分隔符为止。第二个分隔符应出现在新行的开头。这时here文档的正文(不包括开始和结束的分隔符)将重新定向送给命令wc作为它的标准输入。
由于大多数命令都以参数的形式在命令行上指定输入文件的文件名,所以输入重定向并不经常使用。尽管如此,当要使用一个不接受文件名作为输入参数的命令,而需要的输入内容又存在一个文件里时,就能用输入重定向解决问题。
输出重定向:> 和 >>
输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中。
输出重定向比输入重定向更常用,很多情况下都可以使用这种功能。例如,如果某个命令的输出很多,在屏幕上不能完全显示,那么将输出重定向到一个文件中,然后再用文本编辑器打开这个文件,就可以查看输出信息;如果想保存一个命令的输出,也可以使用这种方法。还有,输出重定向可以用于把一个命令的输出当作另一个命令的输入(还有一种更简单的方法,就是使用管道,将在下面介绍)。
输出重定向的一般形式为:命令 > 文件名。例如:
$ ls > directory.out
$ cat directory.out
ch1.doc ch2.doc
ch3.doc ch4.txt ch5.txt
将ls命令的输出保存为一个名为directory.out的文件。
注意:
如果>符号后边的文件已存在,那么这个文件将被重写。
为避免输出重定向中指定文件只能存放当前命令的输出重定向的内容,shell提供了输出重定向的一种追加手段。输出追加重定向与输出重定向的功能非常相似,区别仅在于输出追加重定向的功能是把命令(或可执行程序)的输出结果追加到指定文件的最后,而该文件原有内容不被破坏。
如果要将一条命令的输出结果追加到指定文件的后面,可以使用追加重定向操作符>>。形式为:命令 >> 文件名。例如:
$ ls *.doc >> directory.out
$ cat directory.out
ch1.doc ch2.doc ch3.doc ch4.txt
ch5.txt
ch1.doc ch2.doc ch3.doc
和程序的标准输出重定向一样,程序的错误输出也可以重新定向。使用符号2>(或追加符号2>>)表示对错误输出设备重定向。例如下面的命令:
$ ls /usr/tmp 2> err.file
可在屏幕上看到程序的正常输出结果,但又将程序的任何错误信息送到文件err.file中,以备将来检查用。
还可以使用另一个输出重定向操作符(&>)将标准输出和错误输出同时送到同一文件中。例如:
$ ls /usr/tmp &> output.file
利用重定向将命令组合在一起,可实现系统单个命令不能提供的新功能。例如使用下面的命令序列:
$ ls /usr/bin > /tmp/dir
$ wc –w < /tmp/dir
459
这种形式的组合将会统计/usr/bin目录下的文件个数。
管道
将一个程序或命令的输出作为另一个程序或命令的输入,有两种方法,一种是通过一个临时文件将两个命令或程序结合在一起,例如上个例子中的/tmp/dir文件将ls和wc命令联在一起;另一种是Linux所提供的管道功能。这种方法比前一种方法更好。
管道可以把一系列命令连接起来,这意味着第一个命令的输出会作为第二个命令的输入通过管道传给第二个命令,第二个命令的输出又会作为第三个命令的输入,以此类推。显示在屏幕上的是管道行中最后一个命令的输出(如果命令行中未使用输出重定向)。
通过使用管道符“|”来建立一个管道行。用管道重写上面的例子:
$ ls /usr/bin|wc -w
1789
再例如:
$ cat sample.txt|grep
"High"|wc -l
管道将cat命令(列出一个文件的内容)的输出送给grep命令。grep命令在输入里查找单词High,grep命令的输出则是所有包含单词High的行,这个输出又被送给wc命令,wc命令统计出输入中的行数。假设sample.txt文件的内容如下:
Things to do today:
Low:Go grocery shopping
High:Return movie
High:Clear level
Medium:Pick up clothes from dry
cleaner
那么该管道行的结果是2。
命令替换和重定向有些相似,但区别在于命令替换是将一个命令的输出作为另外一个命令的参数。常用命令格式为:command1 `command2`。
其中,command2的输出将作为command1的参数。需要注意的是这里的`符号,被它括起来的内容将作为命令执行,执行后的结果作为command1的参数。例如:
$ cd `pwd`
该命令将pwd命令列出的目录作为cd命令的参数,结果仍然是停留在当前目录下。
Shell命令把每次执行的命令当做一个作业,并为它们分配了作业号,如果有管道,则将这些命令认为是一个作业。Shell命令可以用作业号来控制作业的运行、挂起、结束。需注意的是作业不等于进程。有关作业控制的符号和命令如下:
&
它用在命令行的最后,作用是将命令放到后台继续运行,立即返回Shell Bash的提示符。
$ls -lR / &> files &
[1]204
这行命令是将把/以下的所有目录中的文件送到files,因为权限问题所以会产生错误信息,故用&>。在最后添加了&,所以不等这条命令结束就返回提示符。其中[]中的内容是作业号,后面的数字是进程号。
如果没有在命令后面加&,要想在命令执行中使用提示符,可以用Ctrl+z先将命令挂起,等以后执行,如:
$cat > text
< Ctrl+z>
jobs
这个命令是用于显示系统中所有的作业,如:
$cat > text
< Ctrl+z>
$jobs
[1]+ stopped cat > text
这个例子中,第一条命令是从键盘上读取字符输入到text文件中。接着按Ctrl+z将它挂起,再用jobs命令察看作业。
fg、bg和kill
fg是将作业送到前台运行。如:
$cat > text
< Ctrl+z>
$jobs
[1]+ stopped cat > text
$fg
cat > text
User name is Caolei.
< Ctrl+d>
在这个例子中,先用Ctrl+z将cat > text命令挂起,接着用jobs命令察看作业,因为作业号右边有+号,所以它是缺省作业,可以直接用fg命令把它送到前台执行。然后,我们输入了User name is Caolei.做text的内容,用Ctrl+d结束cat > text命令。
bg命令的作用是将作业送到后台,用法同fg一样。
kill命令是将作业立即结束,用法是kill %作业号。例如:
$cat > text
< Ctrl+z>
$jobs
[1]+ stopped cat > text
$bg
$jobs
[1]+ stopped(tty input) cat >
text
$kill %1
上面的例子中,bg将作业1发送到后台执行(不是挂起),但因为cat > text需要从键盘上获得输入,放到后台无法运行,故被自动挂起。
到此为止,我们总共介绍了Bash的七大功能。很好的利用它们,可以使我们更好地操作各种命令来完成我们的工作。.
我们使用grep、fgrep和egrep命这组命令以指定匹配的模式搜索文件,并通知用户在什么文件中搜索到与指定的模式匹配的字符串,并打印出所有包含该字符串的文本行,在该文本行的最前面是该行所在的文件名。grep命令一次只能搜索一个指定的模式;egrep命令检索扩展的正则表达式(包括表达式组和可选项);fgrep命令检索固定字符串,它不识别正则表达式,是快速搜索命令。
这组命令在搜索与定位文件中特定的主题方面非常有用。要搜索的模式可以被认为是一些关键词,可以用它们来搜索文件中包含的这些关键词。编写程序时,可以用它来寻找某一个函数,或是相关的词组。grep命令的搜索功能比fgrep强大,因为grep命令的搜索模式可以是正则表达式,而fgrep却不能。有关正则表达式请参见shell一章。
该组命令中的每一个命令都有一组选项,利用这些选项可以改变其输出方式。例如,可以在搜索到的文本行上加入行号,或者只输出文本行的行号,或者输出所有与搜索模式不匹配的文本行,或只简单地输出已搜索到指定模式的文件名,并且可以指定在查找模式时忽略大小写。
这组命令在指定的输入文件中查找与模式匹配的行。如果没有指定文件,则从标准输入中读取。正常情况下,每个匹配的行被显示到标准输出。如果要查找的文件是多个,则在每一行输出之前加上文件名。
语法:
grep [选项] [匹配模式] [文件名1,文件名2,……]
egrep [选项] [匹配模式] [文件名1,文件名2,……]
fgrep [选项] [匹配模式] [文件名1,文件名2,……]
这组命令各选项的含义为:
-E: 每个模式作为一个扩展的正则表达式对待。
-F: 每个模式作为一组固定字符串对待(以新行分隔),而不作
为正则表达式。
-b: 在输出的每一行前显示包含匹配字符串的行在文件中的字节
偏移量。
-c: 只显示匹配行的数量。
-I: 比较时不区分大小写。
-h: 在查找多个文件时,指示grep不要将文件名加入到输出之前。
-l: 显示首次匹配串所在的文件名并用换行符将其隔开。当在某
文件中多次出现匹配串时,不重复显示此文件名。
-n: 在输出前加上匹配串所在行的行号(文件首行行号为1)。
-v: 只显示不包含匹配串的行。
-x: 只显示整行严格匹配的行。
-e: expression 指定检索使用的模式。用于防止以“-”开头的模式被解释为命令选项。
-f: expfile 从expfile文件中获取要搜索的模式,一个模式占一行。
举例说明,例如当我们执行如下命令:
$ cat mypats
editor
create
$ grep -f mypats exam
在上面的例子中,用户要在文件exam中搜索字符串“editor”和“create”,就把要搜索的模式放置在文件mypats中,然后,grep命令从文件mypats中读取要搜索的模式。在文件中,每个搜索模式占一行。如果经常要搜索一组常见字符串时,这个功能非常有用。
在上面的内容中,当grep命令后键入搜索的模式,需要再键入要搜索的文件。其中,文件名列表中也可以使用特殊字符,如“*”等,用来生成文件名列表。如果想在搜索的模式中包含有空格的字符串,可以用单引号把要搜索的模式括起来,用来表明搜索的模式是由包含空格的字符串组成。否则,Shell将把空格认为是命令行参数的定界符,而grep命令将把搜索模式中的单词解释为文件名列表中的一部分。在下面的例子中,grep命令在文件example中搜索模式“text file”。
$ grep ‘text file’ example
用户可以在命令行上用Shell特殊字符来生成将要搜索的文件名列表。在下面的例子中,特殊字符“*”用来生成一个文件名列表,该列表包含当前目录下所有的文件。该命令将搜索出当前目录下所有文件中与模式匹配的行。
$
grep data *
特殊字符在搜索一组指定的文件时非常有用。例如,如果想搜索所有的C程序源文件中特定的模式,您可以用“*.c”来指定文件名列表。假设用户的 C程序中包含一些不必要的转向语句(goto语句),想要找到这些语句,可以用如下的命令来搜索并显示所有包含goto语句的代码行:
$
grep goto *.c
3.6.5 文本操作相关命令
cut 抽取指定的列或者字段。并且显示在屏幕上。
tr 转换字符
tee 输出到一个文件同时输出到标准输出。
pr 打印并且格式化输出到标准输出
cut 命令
cut 命令被用来从标准输入或者一个文件中抽取特定的列或者字段。被抽取的列或字段会被送到标准输出。-c 选项剪切列,-f选项剪切字段。cut命令能从标准输入或者一个文件接收输入,由于它接收标准输入,所以它可以出现在一个管道的右边。 一个数字列表被用来告诉cut要抽取得哪些列或字段。列的定义同sort命令类似。定义列或者字段列表有以下的格式:
A-B 从A到B的列或者字段;
A. 从A到列或字段的最后一行;
-B 从列或字段的开头到B ;
A,B 字段A或者B ;
以上的格式也可以组合在一起使用,例如:
# cut -f1,3 5-7 /etc/passwd
会剪切出/etc/passw文件的第一和第三列,和第五行到第七行。 默认的字段分隔符为tab符号。
tr 命令
tr命令的作用是转换字符。它接收标准输入也接收文件名作为参数;因此它能被用在管道中。tr命令可以用来转换许多连续的空白字符为一个空白字符。因此,当你想要在字段之间使用一个单个的分割符号的时候,在一个管道中的tr能够方便地进行一次前期处理,如下面例1所示。 tr命令同样能够被用来替代文字的字符或者转换文本的大小写,如下面例2所示.
例1:
$ who | tr –s “ “
例2:
$ date | cut –c1-3 | tr “ [:lower:] “ “ [:upper:] “
tee命令
通常你在执行一个复杂的管道操作的时候,管道中间的命令的输出被提交到管道中的下一个命令处理,这时你不能够看到中间命令的输出。tee命令被用来分接一个管道。tee从标准输入读取数据,然后输出到标准输出,同时输出到一个指定的文件。如果使用-a 选项,tee会在文件末尾添加输出而不是覆盖文件。
tee命令适合在两种环境中使用:
当在一个管道中加入tee,你就可以捕捉中间处理,然后传送到管道的下一个命令,或者发送一个命令的最后的输出到屏幕同时到一个文件;当遇到一个有用的日志机制,你也许想要交互运行一个命令并且观察它的输出,同时要保存这个输出到一个文件。请记住,当你仅仅重定向一个命令的输出到文件的时候,在屏幕上是没有显示。所以,这个工具能被用在管道的最后,或者在任何产生输出的命令的最后。
例子:
# who | sort
# who | tee unsorted | sort
# who | tee unsorted | sort | tee sorted
# who | wc –l
# who | tee whoson | wc –l
pr 命令
pr 命令可以打印到标准输出:它被用来格式化标准输入数据流或者格式化指定文件的内容。然后输出到屏幕,而不是到打印机,pr命令典型的执行情况是,在文件被送到打印机打印前格式化文件的内容。 pr 命令在打印长文件的时候非常有用,因为它会在每一个新页的顶部插入一个标题,其中包括文件名(或者是使用-h选项定义的标题),和页号。 pr命令支持许多的选项。你可以使用man来查找每个选项的具体用途。
例子:
# pr –n3 funfile
# pr –n3 funfile | more
# ls | pr –3
# grep home /etc/passwd | pr –h “user Accounts”
小结: cut命令允许你从标准输入或者一个文件中抽取出文本的列或者是字段,然后将结果送到标准输出。 tee命令允许你将命令的输出送到一个文件和标准输出。 pr命令被用来格式化输出,通常被用来准备输出一个文件到打印机。 tr命令的作用是转换字符。它接收标准输入也接收文件名作为参数;因此它能被用在管道中。
像高级程序设计语言一样,shell也提供说明和使用变量的功能。对shell来讲,所有变量的取值都是一个字符串,shell程序采用$var的形式来引用名为var的变量的值。而且shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,这些变量用户还可以重新定义,常用的shell环境变量有:
HOME:用于保存注册目录的完全路径名。
PATH:用于保存用冒号分隔的目录路径名,shell将按PATH变量中
给出的顺序搜索这些目录,找到的第一个与命令名称一致的
可执行文件将被执行。
TERM:终端的类型。
UID: 当前用户的标识符,取值是由数字构成的字符串。
PWD: 当前工作目录的绝对路径名,该变量的取值随cd命令的使
用而变化。
PS1: 主提示符,在特权用户下,缺省的主提示符是“#”,在普
通用户下,缺省的主提示符是“$”。
PS2: 在shell接收用户输入命令的过程中,如果用户在输入行的末尾输入“\”然后回车,或者当用户按回车键时shell判断出用户输入的命令没有结束时,显示这个辅助提示符,提示用户继续输入命令的其余部分,缺省的辅助提示符是“>”。
有时我们想要在说明一个变量并对它设定为一个特定值后就不在改变它的值,这可以用下面的命令来保证一个变量的只读性(在编写shell程序时,为了使变量名和命令名相区别,建议所有的变量名都用大写字母来表示):
readly 变量名
在任何时候,建立的变量都只是当前shell的局部变量,所以不能被shell运行的其他命令或shell程序所利用,export命令可以将一局部变量提供给shell执行的其他命令使用,其格式为:
export 变量名
也可以在给变量赋值的同时使用export命令:
export 变量名=变量值
使用export说明的变量,在shell以后运行的所有命令或程序中都可以访问到。
通过本章共计8小节的学习,大家应该基本掌握了常用目录文件命令、系统命令、属性权限命令以及一些其他常用的使用方法以及命令参考手册man的使用方法。在日常的应用中,大家应该多加练习,并熟记命令参数的使用,虽然Linux的命令和参数的组和相当多,但只要记住了一些常用的操作命令和命令参数,就可得心应手的进行操作了。碰到一些不常用的命令,可以用man 参考手册来查找使用方法。
1. Linux下的目录与DOS/Windows的目录有什么不同
答:
Linux的文件系统与DOS类似,也是采用树形结构的。但目录的表示有一点是完全不同的,Linux用“/”表示根目录,而DOS用“<盘符>:\”表示根目录。
2. 如何读取取非Linux分区的内容?
答:
1) 创建一个目录:mkdir /mnt/other;
2) 执行“mount –t 文件系统类型 分区 /mnt/other”命令。
注意:
分区指该分区的设备名,如/dev/hda1。文件系统类型包括:FAT16、FAT32、NTFS、EXT等。
3.文件或目录的权限是什么意思?
答:
1) 文件或目录的权限位由10位构成,如-rwxr-xr-x。 第一位代表文件/目录类型:d代表目录、-代表文件、l代表链接;
2) 剩下的9位分成3组,每组3位;2-4位描述文件主人的权限,5-7位描述与文件主人同一用户组的权限,8-10位则是其它用户的权限。
3) rwx:每组的3位分别是:读权限、写权限、执行权限;如果是-就代表没有这个权限。也就是说-rwxr-xr-x表示,这是个普通文件,文件主人可以读、写、执行这个文件,与文件主人同组的用户以及其它用户都可以读、执行这个文件。
4.find 命令中的 -ctime 和 -mtime ,-atime 参数有何区别
答: 这几个参数区别如下:
-atime n : 指查找系统中最后n*24小时访问的文件;
-ctime n : 指查找系统中最后n*24小时被改变状态的文件;
-mtime n : 指查找系统中最后n*24小时被修改的文件。
5.RedHat Linux 中哪个命令查看负载最正确呢?
答:
使用vmstat , sar , iostat ,top这些命令都可以,其中top命令的功能最多,但是相对其它命令来说,运行此命令会占用更多的系统资源。
6.如何远程使用Linux?
答:
我们可以使用telnet、rlogin、rsh、rcp等命令来实现远程使用
Linux,但这这些方法在传输过程中是明文传输的,所以有可能带来许多不安全因素。因此,应尽量避免远程使用root帐户登录系统。
1、 请你概括一下Linux 命令执行的一般规则。
2、 试着说出文件和目录操作的命令都有那些?
3、 请举例说出几个可以显示文件内容的命令。
3、 试着说出一些常用的系统操作命令?
4、 当你不知道如何使用某个命令的参数时,该如何去做
5、 用什么命令去杀掉一个占用系统资源大的进程?参数是什么?
6、 如何查看系统磁盘空间的大小?
7、 怎样才能动态实时的察看系统性能?
8、 正常关闭系统的命令是什么?都有那些参数?
9、 如何使用cp 命令来清空文件内容?
10、系统管理员如何查出系统中用户tom的全部文件和目录,请写出相应的命令行。
|