之前包括以后所写的笔记中所记录的例子都摘录自鸟哥的简体总站:
http://vbird.dic.ksu.edu.tw/linux_basic/linux_basic.php
先来了解一些比较特殊的目录:
[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 就这样写!
[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/mail lrwxrwxrwx 1 root root 10 Sep 4 17:54 /var/mail -> spool/mail # 看到这里应该知道为啥了吧?因为 /var/mail 是连接档,连结到 /var/spool/mail # 所以,加上 pwd -P 的选项后,会不以连接档的数据显示,而是显示正确的完整路径!
[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/test4 mkdir: 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 -l drwxr-xr-x 3 root root 4096 Jul 18 12:50 test drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1 drwx--x--x 2 root root 4096 Jul 18 12:54 test2 # 仔细看上面的权限部分,如果没有加上 -m 来强制配置属性,系统会使用默认属性。 # 那么你的默认属性为何?这要通过底下介绍的 umask 才能了解!
[root@www ~]# rmdir [-p] 目录名称 选项与参数: -p :连同上一级『空的』目录也一起删除 范例:将于mkdir范例中创建的目录(/tmp底下)删除掉! [root@www tmp]# ls -l <==看看有多少目录存在? drwxr-xr-x 3 root root 4096 Jul 18 12:50 test drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1 drwx--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 仅能『删除空的目录』!
我们可以在任何地方执行 /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我们要知道几件事:
[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 156 drwxr-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 .bashrc drwx------ 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 156 drwxr-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 .bashrc drwx------ 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 156 drwxr-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 .bashrc drwx------ 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 可以查阅到比较正确的完整时间格式啊!
这个命令除了单纯的复制外,还可以创建连接文件(就是快捷方式),对比两文件的新旧而予以更新,以及复制整个目录的功能,还可以直接用来重命名(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/bashrc cp: 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/ /tmp cp: 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有种种的文件属性与权限的特性,所以,在复制时,你必须要清楚了解到:
[root@www ~]# rm [-fir] 文件或目录 选项与参数: -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息; -i :互动模式,在删除前会询问使用者是否动作 -r :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!! 范例一:将刚刚在 cp 的范例中创建的 bashrc 删除掉! [root@www ~]# cd /tmp [root@www tmp]# rm -i bashrc rm: remove regular file `bashrc'? y # 如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名! 范例二:透过万用字节*的帮忙,将/tmp底下开头为bashrc的档名通通删除: [root@www tmp]# rm -i bashrc* # 注意那个星号,代表的是 0 到无穷多个任意字节!很好用的东西! 范例三:将 cp 范例中所创建的 /tmp/etc/ 这个目录删除掉! [root@www tmp]# rmdir /tmp/etc rmdir: etc: Directory not empty <== 删不掉啊!因为这不是空的目录! [root@www tmp]# rm -r /tmp/etc rm: 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-
[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 # 注意到这边,如果有多个来源文件或目录,则最后一个目标档一定是『目录!』 # 意思是说,将所有的数据移动到该目录的意思!
介绍几个简单的取得文件名和目录名的命令,下面是范例:
[root@www ~]# basename /etc/sysconfig/network network <== 很简单!就取得最后的档名~ [root@www ~]# dirname /etc/sysconfig/network /etc/sysconfig <== 取得的变成目录名了!
[root@www ~]# cat [-AbEnTv] 选项与参数: -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已; -b :列出行号,仅针对非空白行做行号显示,空白行不标行号! -E :将结尾的断行字节 $ 显示出来; -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同; -T :将 [tab] 按键以 ^I 显示出来; -v :列出一些看不出来的特殊字符 范例一:检阅 /etc/issue 这个文件的内容 [root@www ~]# cat /etc/issue CentOS 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来执行比较好。
[root@www ~]# tac /etc/issue Kernel \r on an \m CentOS release 5.3 (Final) # 与刚刚上面的范例一比较,是由最后一行先显示!
[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/issue 000001 CentOS release 5.3 (Final) 000002 Kernel \r on an \m 000003 # 自动在自己栏位的地方补上 0 了~默认栏位是六位数,如果想要改成 3 位数? [root@www ~]# nl -b a -n rz -w 3 /etc/issue 001 CentOS release 5.3 (Final) 002 Kernel \r on an \m 003 # 变成仅有 3 位数~
nl可以将输出的文件内容自动加上行号!其默认的结果与cat -n有点不太一样,nl可以将执行号做比较多的显示设计,包括位数与是否自动补0等功能。
[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这个程序的运行过程中,你有几个按键可以按:
若想搜寻字符串,可以这样做:
[root@www ~]# more /etc/man.config # # Generated automatically from man.conf.in by the # configure script. # # man.conf from man-1.6d ....(中间省略).... /MANPATH <== 输入了 / 之后,光标就会自动跑到最底下一行等待输入!
[root@www ~]# less /etc/man.config # # Generated automatically from man.conf.in by the # configure script. # # man.conf from man-1.6d ....(中间省略).... : <== 这里可以等待你输入命令!
less的用法比起more更加有弹性,同时,你是否会觉得less使用的界面与环境与man page非常的类似,这是因为man这个命令就是调用less来显示说明文件的内容的。
[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行不会打印出来。
[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 检测。
[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/passwd 0000000 177 E L F 001 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0 0000020 002 \0 003 \0 001 \0 \0 \0 260 225 004 \b 4 \0 \0 \0 0000040 020 E \0 \0 \0 \0 \0 \0 4 \0 \0 \a \0 ( \0 0000060 035 \0 034 \0 006 \0 \0 \0 4 \0 \0 \0 4 200 004 \b 0000100 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/issue 0000000 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 5 0000020 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 e 0000040 154 040 134 162 040 157 156 040 141 156 040 134 155 012 012 l \ r o n a n \ m \n \n 0000057 # 如上所示,可以发现每个字节可以对应到的数值为何! # 例如e对应的记录数值为145,转成十进位:1x8^2+4x8+5=101。利用这个命令,可以将数据文件或者是二进制文件的内容数据读出来。
每个文件在linux下都会记录许多的时间参数,其中有三个主要的变动时间:
当该文件的『内容数据』变更时,就会升级这个时间!内容数据指的是文件的内容,而不是文件的属性或权限!
当该文件的『状态 (status)』改变时,就会升级这个时间,举例说,权限与属性被更改了,都会升级这个时间。
当『该文件的内容被取用』时,就会升级这个读取时间(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这个命令最常被使用的情况: