之前包括以后所写的笔记中所记录的例子都摘录自鸟哥的简体总站:
一.目录
1.目录的相关操作
先来了解一些比较特殊的目录:
- . : 代表此层目录
- .. : 代表上一层目录
- - : 代表前一个工作目录
- ~ : 代表"目前用户身份"所在的主文件夹
- ~account : 代表account这个用户的主文件夹(account是个账号名称)
- cd : 切换目录
[root@www ~]# cd [相对路径或绝对路径]# 最重要的就是目录的绝对路径与相对路径,还有一些特殊目录的符号罗![root@www ~]# cd ~vbird# 代表去到 vbird 这个使用者的家目录,亦即 /home/vbird[root@www vbird]# cd ~# 表示回到自己的家目录,亦即是 /root 这个目录[root@www ~]# cd# 没有加上任何路径,也还是代表回到自己家目录的意思![root@www ~]# cd ..# 表示去到目前的上一级目录,亦即是 /root 的上一级目录的意思;[root@www /]# cd -# 表示回到刚刚的那个目录,也就是 /root ~[root@www ~]# cd /var/spool/mail# 这个就是绝对路径的写法!直接指定要去的完整路径名称![root@www mail]# cd ../mqueue# 这个是相对路径的写法,我们由/var/spool/mail 去到/var/spool/mqueue 就这样写!
- pwd : 显示当前目录
[root@www ~]# pwd [-P]选项与参数:-P :显示出确实的路径,而非使用连结 (link) 路径。范例:单纯显示出目前的工作目录:[root@www ~]# pwd/root <== 显示出目录啦~范例:显示出实际的工作目录,而非连结档本身的目录名而已[root@www ~]# cd /var/mail <==注意,/var/mail是一个连结档[root@www mail]# pwd/var/mail <==列出目前的工作目录[root@www mail]# pwd -P/var/spool/mail <==怎么回事?有没有加 -P 差很多~[root@www mail]# ls -ld /var/maillrwxrwxrwx 1 root root 10 Sep 4 17:54 /var/mail -> spool/mail# 看到这里应该知道为啥了吧?因为 /var/mail 是连接档,连结到 /var/spool/mail # 所以,加上 pwd -P 的选项后,会不以连接档的数据显示,而是显示正确的完整路径!
- mkdir : 新建一个新的目录
[root@www ~]# mkdir [-mp] 目录名称选项与参数:-m :配置文件的权限!直接配置,不需要看默认权限 (umask) 的脸色~-p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!范例:请到/tmp底下尝试创建数个新目录看看:[root@www ~]# cd /tmp[root@www tmp]# mkdir test <==创建一名为 test 的新目录[root@www tmp]# mkdir test1/test2/test3/test4mkdir: cannot create directory `test1/test2/test3/test4': No such file or directory <== 没办法直接创建此目录![root@www tmp]# mkdir -p test1/test2/test3/test4# 加了这个 -p 的选项,可以自行帮你创建多层目录!范例:创建权限为rwx--x--x的目录[root@www tmp]# mkdir -m 711 test2[root@www tmp]# ls -ldrwxr-xr-x 3 root root 4096 Jul 18 12:50 testdrwxr-xr-x 3 root root 4096 Jul 18 12:53 test1drwx--x--x 2 root root 4096 Jul 18 12:54 test2# 仔细看上面的权限部分,如果没有加上 -m 来强制配置属性,系统会使用默认属性。# 那么你的默认属性为何?这要通过底下介绍的 umask 才能了解!
- rmdir : 删除一个空的目录
[root@www ~]# rmdir [-p] 目录名称选项与参数:-p :连同上一级『空的』目录也一起删除范例:将于mkdir范例中创建的目录(/tmp底下)删除掉![root@www tmp]# ls -l <==看看有多少目录存在?drwxr-xr-x 3 root root 4096 Jul 18 12:50 testdrwxr-xr-x 3 root root 4096 Jul 18 12:53 test1drwx--x--x 2 root root 4096 Jul 18 12:54 test2[root@www tmp]# rmdir test <==可直接删除掉,没问题[root@www tmp]# rmdir test1 <==因为尚有内容,所以无法删除!rmdir: `test1': Directory not empty[root@www tmp]# rmdir -p test1/test2/test3/test4[root@www tmp]# ls -l <==您看看,底下的输出中test与test1不见了!drwx--x--x 2 root root 4096 Jul 18 12:54 test2# 瞧!利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次删除~# 不过要注意的是,这个 rmdir 仅能『删除空的目录』!
2.关于执行文件路径的变量:$PATH
我们可以在任何地方执行 /bin/ls 这个命令是因为环境变量PATH的帮助。我们可以执行 "echo $PATH" 来看看到底有哪些目录被定义出来了。
范例:先用root的身份列出搜寻的路径为何?[root@www ~]# echo $PATH/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin <==这是同一行!范例:用vbird的身份列出搜寻的路径为何?[root@www ~]# su - vbird[vbird@www ~]# echo $PATH/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/vbird/bin# 仔细看,一般用户vbird的PATH中,并不包含任何『sbin』的目录存在!
PATH(一定是大写)这个变量的内容是由一堆目录所组成的,每个目录中间都由冒号 (:) 来隔开,每个目录都有"顺序"之分。同时,关于PATH我们要知道几件事:
- 不同身份用户默认的PATH不同,默认能够随意执行的命令也不同 (如 root 与 vbird)
- PATH是可以修改的,所以一般用户还是可以通过修改PATH来执行某些位于 /sbin 或 /usr/sbin 下的命令来查询
- 使用绝对路径或相对路径直接指定某个命令的文件名来执行,会比查询PATH来的正确
- 命令应该要放置到正确的目录下,执行才会比较方便
- 本目录 (.) 最好不要放到PATH当中
二.文件与目录管理
1.查看文件和目录:ls
[root@www ~]# ls [-aAdfFhilnrRSt] 目录名称[root@www ~]# ls [--color={never,auto,always}] 目录名称[root@www ~]# ls [--full-time] 目录名称选项与参数:-a :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)-A :全部的文件,连同隐藏档,但不包括 . 与 .. 这两个目录-d :仅列出目录本身,而不是列出目录内的文件数据(常用)-f :直接列出结果,而不进行排序 (ls 默认会以档名排序!)-F :根据文件、目录等资讯,给予附加数据结构,例如: *:代表可运行档; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;-h :将文件容量以人类较易读的方式(例如 GB, KB 等等)列出来;-i :列出 inode 号码,inode 的意义下一章将会介绍;-l :长数据串列出,包含文件的属性与权限等等数据;(常用)-n :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在帐号管理提到!)-r :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小;-R :连同子目录内容一起列出来,等於该目录下的所有文件都会显示出来;-S :以文件容量大小排序,而不是用档名排序;-t :依时间排序,而不是用档名。--color=never :不要依据文件特性给予颜色显示;--color=always :显示颜色--color=auto :让系统自行依据配置来判断是否给予颜色--full-time :以完整时间模式 (包含年、月、日、时、分) 输出--time={atime,ctime} :输出 access 时间或改变权限属性时间 (ctime) 而非内容变更时间 (modification time)下面则是一些常用的范例:
范例一:将家目录下的所有文件列出来(含属性与隐藏档)[root@www ~]# ls -al ~total 156drwxr-x--- 4 root root 4096 Sep 24 00:07 .drwxr-xr-x 23 root root 4096 Sep 22 12:09 ..-rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg-rw------- 1 root root 955 Sep 24 00:08 .bash_history-rw-r--r-- 1 root root 24 Jan 6 2007 .bash_logout-rw-r--r-- 1 root root 191 Jan 6 2007 .bash_profile-rw-r--r-- 1 root root 176 Jan 6 2007 .bashrcdrwx------ 3 root root 4096 Sep 5 10:37 .gconf-rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log-rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog# 这个时候你会看到以 . 为开头的几个文件,以及目录档 (.) (..) .gconf 等等,# 不过,目录档档名都是以深蓝色显示,有点不容易看清楚就是了。范例二:承上题,不显示颜色,但在档名末显示出该档名代表的类型(type)[root@www ~]# ls -alF --color=never ~total 156drwxr-x--- 4 root root 4096 Sep 24 00:07 ./drwxr-xr-x 23 root root 4096 Sep 22 12:09 ../-rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg-rw------- 1 root root 955 Sep 24 00:08 .bash_history-rw-r--r-- 1 root root 24 Jan 6 2007 .bash_logout-rw-r--r-- 1 root root 191 Jan 6 2007 .bash_profile-rw-r--r-- 1 root root 176 Jan 6 2007 .bashrcdrwx------ 3 root root 4096 Sep 5 10:37 .gconf/-rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log-rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog# 注意看到显示结果的第一行~知道为何我们会下达类似 ./command # 之类的命令了吧?因为 ./ 代表的是『目前目录下』的意思啊!至於什么是 FIFO/Socket ?# 请参考前一章节的介绍啊!另外,那个.bashrc 时间仅写2007,能否知道详细时间?范例三:完整的呈现文件的修改时间 *(modification time)[root@www ~]# ls -al --full-time ~total 156drwxr-x--- 4 root root 4096 2008-09-24 00:07:00.000000 +0800 .drwxr-xr-x 23 root root 4096 2008-09-22 12:09:32.000000 +0800 ..-rw------- 1 root root 1474 2008-09-04 18:27:10.000000 +0800 anaconda-ks.cfg-rw------- 1 root root 955 2008-09-24 00:08:14.000000 +0800 .bash_history-rw-r--r-- 1 root root 24 2007-01-06 17:05:04.000000 +0800 .bash_logout-rw-r--r-- 1 root root 191 2007-01-06 17:05:04.000000 +0800 .bash_profile-rw-r--r-- 1 root root 176 2007-01-06 17:05:04.000000 +0800 .bashrcdrwx------ 3 root root 4096 2008-09-05 10:37:49.000000 +0800 .gconf-rw-r--r-- 1 root root 42304 2008-09-04 18:26:57.000000 +0800 install.log-rw-r--r-- 1 root root 5661 2008-09-04 18:25:55.000000 +0800 install.log.syslog# 请仔细看,上面的『时间』栏位变了喔!变成较为完整的格式。# 一般来说, ls -al 仅列出目前短格式的时间,有时不会列出年份,# 借由 --full-time 可以查阅到比较正确的完整时间格式啊!
2.复制、删除和移动:cp,rm,mv
- cp (复制文件或目录)
这个命令除了单纯的复制外,还可以创建连接文件(就是快捷方式),对比两文件的新旧而予以更新,以及复制整个目录的功能,还可以直接用来重命名(rename)的操作。
[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)[root@www ~]# cp [options] source1 source2 source3 .... directory选项与参数:-a :相当於 -pdr 的意思,至于 pdr 请参考下列说明;(常用)-d :若来源档为连接档的属性(link file),则复制连结档属性而非文件本身;-f :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;-i :若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)-l :进行硬式连接(hard link)的连接档创建,而非复制文件本身;-p :连同文件的属性一起复制过去,而非使用默认属性(备份常用);-r :递回持续复制,用于目录的复制行为;(常用)-s :复制成为符号连接档 (symbolic link),亦即『捷径』文件;-u :若 destination 比 source 旧才升级 destination !最后需要注意的,如果来源档有两个以上,则最后一个目的档一定要是『目录』才行!这个命令非常重要,不同的身份执行这个命令的结果都并不一样,尤其是 -a 和 -P的参数,区别非常大,请注意下面的范例:
范例一:用root身份,将家目录下的 .bashrc 复制到 /tmp 下,并更名为 bashrc[root@www ~]# cp ~/.bashrc /tmp/bashrc[root@www ~]# cp -i ~/.bashrc /tmp/bashrccp: overwrite `/tmp/bashrc'? n <==n不覆盖,y为覆盖# 重复作两次动作,由於 /tmp 底下已经存在 bashrc 了,加上 -i 选项后,# 则在覆盖前会询问使用者是否确定!可以按下 n 或者 y 来二次确认!范例二:变换目录到/tmp,并将/var/log/wtmp复制到/tmp且观察属性:[root@www ~]# cd /tmp[root@www tmp]# cp /var/log/wtmp . <==想要复制到目前的目录,最后的 . 不要忘[root@www tmp]# ls -l /var/log/wtmp wtmp-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp-rw-r--r-- 1 root root 96384 Sep 24 14:06 wtmp# 注意上面的特殊字体,在不加任何选项的情况下,文件的某些属性/权限会改变;# 这是个很重要的特性!要注意喔!还有,连文件创建的时间也不一样了!# 那如果你想要将文件的所有特性都一起复制过来该怎办?可以加上 -a !如下所示:[root@www tmp]# cp -a /var/log/wtmp wtmp_2[root@www tmp]# ls -l /var/log/wtmp wtmp_2-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 wtmp_2# 整个数据特性完全一模一样!这就是 -a 的特性!一般来说,我们如果去复制别人的数据(该文件你必须要有read的权限才行)时,总是希望复制的数据是自己的,所以,默认的条件中,cp的源文件与目的文件的权限是不同的,目的文件的所有者通常会是命令操作者本身。
范例三:复制 /etc/ 这个目录下的所有内容到 /tmp 底下[root@www tmp]# cp /etc/ /tmpcp: omitting directory `/etc' <== 如果是目录则不能直接复制,要加上 -r 的选项[root@www tmp]# cp -r /etc/ /tmp# 还是要再次的强调! -r 是可以复制目录,但是,文件与目录的权限可能会被改变# 所以,也可以利用『 cp -a /etc /tmp 』来下达命令!尤其是在备份的情况下!
范例四:若 ~/.bashrc 比 /tmp/bashrc 新才复制过来[root@www tmp]# cp -u ~/.bashrc /tmp/bashrc# 这个 -u 的特性,是在目标文件与来源文件有差异时,才会复制的。# 所以,比较常被用于『备份』的工作当中!范例五:将家目录的 .bashrc 及 .bash_history 复制到 /tmp 底下[root@www tmp]# cp ~/.bashrc ~/.bash_history /tmp# 可以将多个数据一次复制到同一个目录去!最后面一定是目录!总之由于cp有种种的文件属性与权限的特性,所以,在复制时,你必须要清楚了解到:
- 是否需要完整保留来源文件的信息
- 源文件是否为软连接文件
- 源文件是否为特殊文件
- 源文件是否为目录
- rm (移除文件或目录)
[root@www ~]# rm [-fir] 文件或目录选项与参数:-f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;-i :互动模式,在删除前会询问使用者是否动作-r :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!!范例一:将刚刚在 cp 的范例中创建的 bashrc 删除掉![root@www ~]# cd /tmp[root@www tmp]# rm -i bashrcrm: remove regular file `bashrc'? y# 如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名!范例二:透过万用字节*的帮忙,将/tmp底下开头为bashrc的档名通通删除:[root@www tmp]# rm -i bashrc*# 注意那个星号,代表的是 0 到无穷多个任意字节!很好用的东西!范例三:将 cp 范例中所创建的 /tmp/etc/ 这个目录删除掉![root@www tmp]# rmdir /tmp/etcrmdir: etc: Directory not empty <== 删不掉啊!因为这不是空的目录![root@www tmp]# rm -r /tmp/etcrm: descend into directory `/tmp/etc'? y....(中间省略)....# 因为身份是 root ,默认已经加入了 -i 的选项,所以你要一直按 y 才会删除!# 如果不想要继续按 y ,可以按下『 [ctrl]-c 』来结束 rm 的工作。# 这是一种保护的动作,如果确定要删除掉此目录而不要询问,可以这样做:[root@www tmp]# \rm -r /tmp/etc# 在命令前加上反斜线,可以忽略掉 alias 的指定选项喔!至於 alias 我们在bash再谈!范例四:删除一个带有 - 开头的文件[root@www tmp]# touch ./-aaa- <==touch这个命令可以创建空文件![root@www tmp]# ls -l -rw-r--r-- 1 root root 0 Sep 24 15:03 -aaa- <==文件大小为0,所以是空文件[root@www tmp]# rm -aaa-Try `rm --help' for more information. <== 因为 "-" 是选项嘛!所以系统误判了![root@www tmp]# rm ./-aaa-单纯使用rm "-aaa-" 系统的命令就会被误判,所以,只能用避过首位字符是"-"的方法。其实还有一种方法:
[root@www tmp]# rm -- -aaa-
- mv (移动文件或目录,或更名)
[root@www ~]# mv [-fiu] source destination[root@www ~]# mv [options] source1 source2 source3 .... directory选项与参数:-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!-u :若目标文件已经存在,且 source 比较新,才会升级 (update)范例一:复制一文件,创建一目录,将文件移动到目录中[root@www ~]# cd /tmp[root@www tmp]# cp ~/.bashrc bashrc[root@www tmp]# mkdir mvtest[root@www tmp]# mv bashrc mvtest# 将某个文件移动到某个目录去,就是这样做!范例二:将刚刚的目录名称更名为 mvtest2[root@www tmp]# mv mvtest mvtest2 <== 这样就更名了!简单~# 其实在 Linux 底下还有个有趣的命令,名称为 rename ,# 该命令专职进行多个档名的同时更名,并非针对单一档名变更,与mv不同。请man rename。范例三:再创建两个文件,再全部移动到 /tmp/mvtest2 当中[root@www tmp]# cp ~/.bashrc bashrc1[root@www tmp]# cp ~/.bashrc bashrc2[root@www tmp]# mv bashrc1 bashrc2 mvtest2# 注意到这边,如果有多个来源文件或目录,则最后一个目标档一定是『目录!』# 意思是说,将所有的数据移动到该目录的意思!
3.取得路径的文件名和目录名称
介绍几个简单的取得文件名和目录名的命令,下面是范例:
[root@www ~]# basename /etc/sysconfig/networknetwork <== 很简单!就取得最后的档名~[root@www ~]# dirname /etc/sysconfig/network/etc/sysconfig <== 取得的变成目录名了!
三.文件内容的查阅
1.直接查看文件的内容:cat,tac,nl
- cat (concatenate)
[root@www ~]# cat [-AbEnTv]选项与参数:-A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!-E :将结尾的断行字节 $ 显示出来;-n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;-T :将 [tab] 按键以 ^I 显示出来;-v :列出一些看不出来的特殊字符范例一:检阅 /etc/issue 这个文件的内容[root@www ~]# cat /etc/issueCentOS release 5.3 (Final)Kernel \r on an \m范例二:承上题,如果还要加印行号呢?[root@www ~]# cat -n /etc/issue 1 CentOS release 5.3 (Final) 2 Kernel \r on an \m 3# 看到了吧!可以印出行号呢!这对於大文件要找某个特定的行时,有点用处!# 如果不想要编排空白行的行号,可以使用『cat -b /etc/issue』,自己测试看看:范例三:将 /etc/xinetd.conf 的内容完整的显示出来(包含特殊字节)[root@www ~]# cat -A /etc/xinetd.conf#$....(中间省略)....defaults${$# The next two items are intended to be a quick access place to$....(中间省略)....^Ilog_on_failure^I= HOST$^Ilog_on_success^I= PID HOST DURATION EXIT$....(中间省略)....includedir /etc/xinetd.d$ $# 上面的结果限於篇幅,鸟哥删除掉很多数据了。另外,输出的结果并不会有特殊字体,# 鸟哥上面的特殊字体是要让您发现差异点在哪里就是了。基本上,在一般的环境中,# 使用 [tab] 与空白键的效果差不多,都是一堆空白啊!我们无法知道两者的差别。# 此时使用 cat -A 就能够发现那些空白的地方是啥鬼东西了![tab]会以 ^I 表示,# 断行字节则是以 $ 表示,所以你可以发现每一行后面都是 $ 啊!不过断行字节# 在Windows/Linux则不太相同,Windows的断行字节是 ^M$ 。# 这部分我们会在第十章 vim 软件的介绍时,再次的说明到!
使用cat命令其实并不方便,当文件内容太多,根本来不及在屏幕上显示,如果配合一下more和less来执行比较好。
- tac (反向列示)
[root@www ~]# tac /etc/issueKernel \r on an \mCentOS release 5.3 (Final)# 与刚刚上面的范例一比较,是由最后一行先显示!
- nl (添加行号打印)
[root@www ~]# nl [-bnw] 文件选项与参数:-b :指定行号指定的方式,主要有两种: -b a :表示不论是否为空行,也同样列出行号(类似 cat -n); -b t :如果有空行,空的那一行不要列出行号(默认值);-n :列出行号表示的方法,主要有三种: -n ln :行号在萤幕的最左方显示; -n rn :行号在自己栏位的最右方显示,且不加 0 ; -n rz :行号在自己栏位的最右方显示,且加 0 ;-w :行号栏位的占用的位数。范例一:用 nl 列出 /etc/issue 的内容[root@www ~]# nl /etc/issue 1 CentOS release 5.3 (Final) 2 Kernel \r on an \m# 注意看,这个文件其实有三行,第三行为空白(没有任何字节),# 因为他是空白行,所以 nl 不会加上行号!如果确定要加上行号,可以这样做:[root@www ~]# nl -b a /etc/issue 1 CentOS release 5.3 (Final) 2 Kernel \r on an \m 3# 行号加上来罗~那么如果要让行号前面自动补上 0 呢?可以这样做:[root@www ~]# nl -b a -n rz /etc/issue000001 CentOS release 5.3 (Final)000002 Kernel \r on an \m000003# 自动在自己栏位的地方补上 0 了~默认栏位是六位数,如果想要改成 3 位数?[root@www ~]# nl -b a -n rz -w 3 /etc/issue001 CentOS release 5.3 (Final)002 Kernel \r on an \m003# 变成仅有 3 位数~
nl可以将输出的文件内容自动加上行号!其默认的结果与cat -n有点不太一样,nl可以将执行号做比较多的显示设计,包括位数与是否自动补0等功能。
2.可翻页查看:more,less
- more (一页一页翻动)
[root@www ~]# more /etc/man.config## Generated automatically from man.conf.in by the# configure script.## man.conf from man-1.6d....(中间省略)....--More--(28%) <== 重点在这一行!你的光标也会在这里等待你的命令
在more这个程序的运行过程中,你有几个按键可以按:
- 空格键(Space) : 代表向下翻一页
- Enter : 代表向下滚动一行
- /字符串 : 代表在这个显示内容中,向下查询"字符串"这个关键字
- q : 代表立刻离开more,不再显示该文件内容
- b 或 [ctrl] - b : 代表向回翻页,不过这操作只对文件有用,对管道无用
若想搜寻字符串,可以这样做:
[root@www ~]# more /etc/man.config## Generated automatically from man.conf.in by the# configure script.## man.conf from man-1.6d....(中间省略)..../MANPATH <== 输入了 / 之后,光标就会自动跑到最底下一行等待输入!
- less (一页一页翻动)
[root@www ~]# less /etc/man.config## Generated automatically from man.conf.in by the# configure script.## man.conf from man-1.6d....(中间省略)....: <== 这里可以等待你输入命令!
- 空格键(Space) : 向下翻动一页
- [PageDown] : 向下翻动一页
- [PageUp] : 向上翻动一页
- /字符串 : 向下查询"字符串"的功能
- ?字符串 : 向上查询"字符串"的功能
- n : 重复前一个查询(与 / 或 ? 有关)
- N : 反向重复前一个查询(与 / 或 ? 有关)
- q : 离开less这个程序
less的用法比起more更加有弹性,同时,你是否会觉得less使用的界面与环境与man page非常的类似,这是因为man这个命令就是调用less来显示说明文件的内容的。
3.数据选取:head,tail
- head (取出前面几行)
[root@www ~]# head [-n number] 文件 选项与参数:-n :后面接数字,代表显示几行的意思[root@www ~]# head /etc/man.config# 默认的情况中,显示前面十行!若要显示前 20 行,就得要这样:[root@www ~]# head -n 20 /etc/man.config范例:如果后面100行的数据都不列印,只列印/etc/man.config的前面几行,该如何是好?[root@www ~]# head -n -100 /etc/man.config如果etc/man.config下共有141行,则上述的命令:
[root@www ~]# head -n -100 /etc/man.config就会列出前面的41行,后面的100行不会打印出来。
- tail (取出后面几行)
[root@www ~]# tail [-n number] 文件 选项与参数:-n :后面接数字,代表显示几行的意思-f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测[root@www ~]# tail /etc/man.config# 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:[root@www ~]# tail -n 20 /etc/man.config范例一:如果不知道/etc/man.config有几行,却只想列出100行以后的数据时?[root@www ~]# tail -n +100 /etc/man.config范例二:持续侦测/var/log/messages的内容[root@www ~]# tail -f /var/log/messages <==要等到输入[crtl]-c之后才会离开tail这个命令的侦测!范例二中,由于/var/log/messages随时会有数据写入,这个命令可以一直检测/var/log/messages这个文件,新加入的数据都会被显示到屏幕上。知道按下 [ctrl] + c 才会离开 tail 检测。
4.非纯文本文件:od
[root@www ~]# od [-t TYPE] 文件选项或参数:-t :后面可以接各种『类型 (TYPE)』的输出,例如: a :利用默认的字节来输出; c :使用 ASCII 字节来输出 d[size] :利用十进位(decimal)来输出数据,每个整数占用 size bytes ; f[size] :利用浮点数值(floating)来输出数据,每个数占用 size bytes ; o[size] :利用八进位(octal)来输出数据,每个整数占用 size bytes ; x[size] :利用十六进位(hexadecimal)来输出数据,每个整数占用 size bytes ;范例一:请将/usr/bin/passwd的内容使用ASCII方式来展现![root@www ~]# od -t c /usr/bin/passwd0000000 177 E L F 001 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \00000020 002 \0 003 \0 001 \0 \0 \0 260 225 004 \b 4 \0 \0 \00000040 020 E \0 \0 \0 \0 \0 \0 4 \0 \0 \a \0 ( \00000060 035 \0 034 \0 006 \0 \0 \0 4 \0 \0 \0 4 200 004 \b0000100 4 200 004 \b 340 \0 \0 \0 340 \0 \0 \0 005 \0 \0 \0.....(后面省略)....# 最左边第一栏是以 8 进位来表示bytes数。以上面范例来说,第二栏0000020代表开头是# 第 16 个 byes (2x8) 的内容之意。范例二:请将/etc/issue这个文件的内容以8进位列出储存值与ASCII的对照表[root@www ~]# od -t oCc /etc/issue0000000 103 145 156 164 117 123 040 162 145 154 145 141 163 145 040 065 C e n t O S r e l e a s e 50000020 056 062 040 050 106 151 156 141 154 051 012 113 145 162 156 145 . 2 ( F i n a l ) \n K e r n e0000040 154 040 134 162 040 157 156 040 141 156 040 134 155 012 012 l \ r o n a n \ m \n \n0000057# 如上所示,可以发现每个字节可以对应到的数值为何!# 例如e对应的记录数值为145,转成十进位:1x8^2+4x8+5=101。利用这个命令,可以将数据文件或者是二进制文件的内容数据读出来。
5.修改文件时间或创建新文件:touch
每个文件在linux下都会记录许多的时间参数,其中有三个主要的变动时间:
- modification time (mtime):
当该文件的『内容数据』变更时,就会升级这个时间!内容数据指的是文件的内容,而不是文件的属性或权限!
- status time (ctime):
当该文件的『状态 (status)』改变时,就会升级这个时间,举例说,权限与属性被更改了,都会升级这个时间。
- access time (atime):
当『该文件的内容被取用』时,就会升级这个读取时间(access)。举例说,我们用cat读取etc/man.config,就会升级该文件的atime。
[root@www ~]# ls -l /etc/man.config-rw-r--r-- 1 root root 4617 Jan 6 2007 /etc/man.config[root@www ~]# ls -l --time=atime /etc/man.config-rw-r--r-- 1 root root 4617 Sep 25 17:54 /etc/man.config[root@www ~]# ls -l --time=ctime /etc/man.config-rw-r--r-- 1 root root 4617 Sep 4 18:03 /etc/man.config在默认情况下,ls显示的是该文件的mtime,也就是这个文件的内容上次被更改的时间。
[root@www ~]# touch [-acdmt] 文件选项与参数:-a :仅修订 access time;-c :仅修改文件的时间,若该文件不存在则不创建新文件;-d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"-m :仅修改 mtime ;-t :后面可以接欲修订的时间而不用目前的时间,格式为[YYMMDDhhmm]范例一:新建一个空的文件并观察时间[root@www ~]# cd /tmp[root@www tmp]# touch testtouch[root@www tmp]# ls -l testtouch-rw-r--r-- 1 root root 0 Sep 25 21:09 testtouch# 注意到,这个文件的大小是 0 呢!在默认的状态下,如果 touch 后面有接文件,# 则该文件的三个时间 (atime/ctime/mtime) 都会升级为目前的时间。若该文件不存在,# 则会主动的创建一个新的空的文件喔!例如上面这个例子!范例二:将 ~/.bashrc 复制成为 bashrc,假设复制完全的属性,检查其日期[root@www tmp]# cp -a ~/.bashrc bashrc[root@www tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc-rw-r--r-- 1 root root 176 Jan 6 2007 bashrc <==这是 mtime-rw-r--r-- 1 root root 176 Sep 25 21:11 bashrc <==这是 atime-rw-r--r-- 1 root root 176 Sep 25 21:12 bashrc <==这是 ctime
touch这个命令最常被使用的情况:
- 创建一个空文件将
- 某个文件日期修改为目前日期 (mtime 与 atime)