首頁 >後端開發 >php教程 >linux常用指令分享

linux常用指令分享

小云云
小云云原創
2018-03-26 11:26:432299瀏覽

本文主要和大家分享linux常用指令,希望能幫助大家。

一.基本上使用

X window與文字模式的切換。
通常我們也稱文字模式為終端機介面, terminal 或 console喔! Linux預設的情況下會提供六個Terminal來讓使用者登陸,切換的方式為使用:[Ctrl] + [Alt] + [F1]~[F6]的組合按鈕。系統會將[F1] ~ [F6]命名為tty1 ~ tty6的操作介面環境。按下[Ctrl] + [Alt] + [F7]就可以回到X圖形視窗。
在純文字環境中要啟動X窗口,可以在tty1~tty6的任一終端介面使用你的帳號登陸後(登陸的方法下一小節會介紹), 然後下達如下的指令即可:[vbird @www ~]$ startx。 Linux預設提供了七個Run level給我們使用,其中最常用到的就是run level 3與run level 5這兩者了。

man page
在查詢資料的幾個常見數字的意義:
1 使用者在shell環境中可以操作的命令或可運行檔案
5 設定檔或是某些檔案的格式
8 系統管理員可用的管理指令
man page按鍵功能:

#搜尋特定指令/檔案的man page說明檔。 [vbird@www ~]$ man -f man

[vbird@www ~]$ man -f man 
man                  (1)  - format and display the on-line manual pages 
man                  (7)  - macros to format man pages 
man.config [man]     (5)  - configuration data for man

但如果我要找的是『關鍵字』呢?

[vbird@www ~]$ man -k man 
. [builtins]         (1)  - bash built-in commands, see bash(1) 
.TP 15 php [php]     (1)  - PHP Command Line Interface 'CLI' ....(中间省略).... 
zshall               (1)  - the Z shell meta-man page 
zshbuiltins          (1)  - zsh built-in commands 
zshzle               (1)  - zsh command line editor

還有兩個指令跟man page有關:

[vbird@www ~]$ whatis  [命令或者是数据]   <==相当于 man -f [命令或者是数据] 
[vbird@www ~]$ apropos [命令或者是数据]   <==相当于 man -k [命令或者是数据]

info page
info與man的用途其實差不多,都是用來查詢指令的用法或是檔案的格式。但與man page一口氣輸出一堆資訊不同的是,info page則是將檔案資料拆成一個一個的段落,每個段落用自己的頁面來撰寫, 並且在各個頁面中還有類似網頁的『超連結』來跳到各不同的頁面中,每個獨立的頁面也稱為一個節點(node)。

關機指令
關機時會考慮。觀察系統的使用狀態:如果要看目前有誰在在線,可以下達‘who’這個命令,而如果要看網絡的聯機狀態,可以下達‘ netstat -a ’這個命令,而要看背景運行的程式可以運行‘ ps -aux ’這個指令。
幾個與關機/重新啟動相關的指令:
(1) 將資料同步寫入硬碟中的指令: sync
(2) 慣用的關機指令: shutdown
(3) 重新啟動,關機: reboot, halt, poweroff

[root@www ~]# /sbin/shutdown [-t 秒] [-arkhncfF] 时间 [警告信息] 选项与参数: 
-t sec : -t 后面加秒数,亦即『过几秒后关机』的意思 
-k     : 不要真的关机,只是发送警告信息出去! 
-r     : 在将系统的服务停掉之后就重新启动(常用) 
-h     : 将系统的服务停掉后,立即关机。 (常用) 
-n     : 不经过 init 程序,直接以 shutdown 的功能来关机 
-f     : 关机并启动之后,强制略过 fsck 的磁盘检查 
-F     : 系统重新启动之后,强制进行 fsck 的磁盘检查 
-c     : 取消已经在进行的 shutdown 命令内容。 
时间   : 这是一定要加入的参数!指定系统关机的时间!时间的范例底下会说明。 
范例: 
[root@www ~]# /sbin/shutdown -h 10 &#39;I will shutdown after 10 mins&#39; # 告诉大家,这部机器会在十分钟后关机!并且会显示在目前登陆者的屏幕前方! # 至于参数有哪些呢?以下介绍几个吧!

舉幾個例子:

[root@www ~]# shutdown -h now 立刻关机,其中 now 相当于时间为 0 的状态 
[root@www ~]# shutdown -h 20:25 系统在今天的 20:25 分会关机,若在21:25才下达此命令,则隔天才关机 
[root@www ~]# shutdown -h +10 系统再过十分钟后自动关机 
[root@www ~]# shutdown -r now 系统立刻重新启动 
[root@www ~]# shutdown -r +30 &#39;The system will reboot&#39;  再过三十分钟系统会重新启动,并显示后面的信息给所有在在线的使用者 
[root@www ~]# shutdown -k now &#39;This system will reboot&#39;  仅发出警告信件的参数!系统并不会关机啦!吓唬人!
  • 重新啟動,關機: reboot, halt, poweroff

  • #
    [root@www ~]# sync; sync; sync; reboot [root@www ~]# shutdown -h now [root@www ~]# poweroff -f
  • 切換運作等級: init
    run level 0:關機
    run level 3:純文字模式
    run level 5:包含圖形介面模式
    run level 6:重新啟動

  • [root@www ~]# init 0


    二. 檔案屬性與權限

    改變所屬群組, chgrp

    [root@www ~]# chgrp [-R] dirname/filename ...选项与参数:
    -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件、目录
      都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。
    范例:
    [root@www ~]# chgrp users install.log[root@www ~]# ls -l-rw-r--r--  1 root users 68495 Jun 25 08:53 install.log[root@www ~]# chgrp testing install.logchgrp: invalid group name `testing&#39; <== 发生错误讯息啰~找不到这个群组名~


    改變檔案擁有者, chown

    [root@www ~]# chown [-R] 账号名称 文件或目录[root@www ~]# chown [-R] 账号名称:组名 文件或目录选项与参数:
    -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更
    范例:将install.log的拥有者改为bin这个账号:
    [root@www ~]# chown bin install.log[root@www ~]# ls -l-rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log范例:将install.log的拥有者与群组改回为root:
    [root@www ~]# chown root:root install.log[root@www ~]# ls -l-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

    改變權限, chmod
    權限的設定方法有兩種, 分別可以使用數字或符號來進行權限的變更。

    [root@www ~]# chmod [-R] xyz 文件或目录
    选项与参数:xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

    如果要將.bashrc這個檔案所有的權限都設定啟用,那麼就下達:

    [root@www ~]# ls -al .bashrc-rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
    [root@www ~]# chmod 777 .bashrc[root@www ~]# ls -al .bashrc-rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc
    • 數字類型改變檔案權限
      Linux檔案的基本權限就有九個,分別是owner/group/others三種身分各有自己的read/write/execute權限,分別是r:4,w:2,x:1。每種身分(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的。

  • 符號類型改變檔案權限
    基本上就九個權限分別是(1)user (2)group (3)others三種身分囉!那我們就可以藉由u, g, o來代表三種身分的權限!此外, a 則代表 all 亦即是全部的身份!

    <code class="hljs coffeescript">[root<span class="hljs-property">@www</span> ~]<span class="hljs-comment"># chmod  u=rwx,go=rx  .bashrc</span> <br/><span class="hljs-comment"># 注意!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空格!</span> <br/>[root<span class="hljs-property">@www</span> ~]<span class="hljs-comment"># chmod  a+w  .bashrc</span> <br/>[[root<span class="hljs-property">@www</span> ~]<span class="hljs-comment"># chmod  a-x  .bashrc</span> </code>
  • 3. 檔案與目錄管理

    目錄的相關操作:

    ##cd (變換目錄)



  • 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&#39;: 
    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 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 才能了解喔! ^_^
  • rmdir (刪除『空』的目錄)


    <code class="hljs coffeescript">[root<span class="hljs-property">@www</span> ~]<span class="hljs-comment"># rmdir [-p] 目录名称</span> <br/>选项与参数: <br/>-p :连同上一级『空的』目录也一起删除 <br/>范例:将於mkdir范例中创建的目录(/tmp底下)删除掉! <br/>[root<span class="hljs-property">@www</span> tmp]<span class="hljs-comment"># ls -l   <==看看有多少目录存在?</span> <br/>drwxr-xr-x  <span class="hljs-number">3</span> root  root <span class="hljs-number">4096</span> Jul <span class="hljs-number">18</span> <span class="hljs-number">12</span>:<span class="hljs-number">50</span> test <br/>drwxr-xr-x  <span class="hljs-number">3</span> root  root <span class="hljs-number">4096</span> Jul <span class="hljs-number">18</span> <span class="hljs-number">12</span>:<span class="hljs-number">53</span> test1 <br/>drwx–x–x  <span class="hljs-number">2</span> root  root <span class="hljs-number">4096</span> Jul <span class="hljs-number">18</span> <span class="hljs-number">12</span>:<span class="hljs-number">54</span> test2 <br/>[root<span class="hljs-property">@www</span> tmp]<span class="hljs-comment"># rmdir test   <==可直接删除掉,没问题</span> <br/>[root<span class="hljs-property">@www</span> tmp]<span class="hljs-comment"># rmdir test1  <==因为尚有内容,所以无法删除!</span> <br/><span class="hljs-attribute">rmdir</span>: `<span class="javascript">test1<span class="hljs-string">’: Directory not empty <br/>[root@www tmp]# rmdir -p test1/test2/test3/test4 <br/>[root@www tmp]# ls -l        <==您看看,底下的输出中test与test1不见了! <br/>drwx–x–x  2 root  root 4096 Jul 18 12:54 test2</span></span></code>

  • # 瞧!利用 -p 這個選項,立刻就可以將 test1/test2/test3/test4 一次刪除~ # 不過要注意的是,這個 rmdir 只能『刪除空的目錄』喔!

  • 檔案與目錄管理


    • #檔案與目錄的檢視: 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)
  • cp (複製檔案或目錄)

    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 !最后需要注意的,如果来源档有两个以上,则最后一个目的档一定要是『目录』才行!
  • #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&#39;? 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-
  • 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# 注意到这边,如果有多个来源文件或目录,则最后一个目标档一定是『目录!』# 意思是说,将所有的数据移动到该目录的意思!
  • 文件内容查阅

    直接检视文件内容:
    cat 由第一行开始显示文件内容
    tac 从最后一行开始显示,可以看出 tac 是 cat 的倒著写!
    nl 显示的时候,顺道输出行号!
    可翻页检视:
    more 一页一页的显示文件内容
    less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
    数据撷取:
    head 只看头几行
    tail 只看尾巴几行
    非纯文字档:
    od 以二进位的方式读取文件内容!

    [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/issue1  CentOS release 5.3 (Final)2  Kernel \r on an \m3# 看到了吧!可以印出行号呢!这对於大文件要找某个特定的行时,有点用处!# 如果不想要编排空白行的行号,可以使用『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_type^I= SYSLOG daemon info $^Ilog_on_failure^I= HOST$^Ilog_on_success^I= PID HOST DURATION EXIT$....(中间省略)....
    • cat (concatenate)

  • tac (反向列示)

  • [root@www ~]# tac /etc/issueKernel \r on an \m
    CentOS 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/issue1  CentOS release 5.3 (Final)2  Kernel \r on an \m# 注意看,这个文件其实有三行,第三行为空白(没有任何字节),# 因为他是空白行,所以 nl 不会加上行号喔!如果确定要加上行号,可以这样做:[root@www ~]# nl -b a /etc/issue1  CentOS release 5.3 (Final)2  Kernel \r on an \m3# 呵呵!行号加上来罗~那么如果要让行号前面自动补上 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
  • 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%)  <== 重点在这一行喔!你的光标也会在这里等待你的命令

    1) 空白键 (space):代表向下翻一页;
    2) Enter :代表向下翻『一行』;
    3) /字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
    4) :f :立刻显示出档名以及目前显示的行数;
    5) q :代表立刻离开 more ,不再显示该文件内容。
    6) b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。

  • less (一页一页翻动)

  • [root@www ~]# less /etc/man.config## Generated automatically from man.conf.in by the# configure script.## man.conf from man-1.6d....(中间省略)....
    :   <== 这里可以等待你输入命令!

    1) 空白键 :向下翻动一页;
    2) [pagedown]:向下翻动一页;
    3) [pageup] :向上翻动一页;
    4) /字串 :向下搜寻『字串』的功能;

    5) ?字串 :向上搜寻『字串』的功能;
    6) n :重复前一个搜寻 (与 / 或 ? 有关!)
    7) N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
    8) q :离开 less 这个程序;

  • 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
  • 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这个命令的侦测!
  • 非纯文字档: 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。
  • 修改文件时间或建置新档: touch
    1) modification time (mtime):
    当该文件的『内容数据』变更时,就会升级这个时间!内容数据指的是文件的内容,而不是文件的属性或权限喔!
    2) status time (ctime):
    当该文件的『状态 (status)』改变时,就会升级这个时间,举例来说,像是权限与属性被更改了,都会升级这个时间啊。
    3) access time (atime):
    当『该文件的内容被取用』时,就会升级这个读取时间 (access)。举例来说,我们使用 cat 去读取 /etc/man.config , 就会升级该文件的 atime 了。

  • [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)

  • 文件与目录的默认权限与隐藏权限

    [root@www ~]# umask0022             <==与一般权限有关的是后面三个数字!
    [root@www ~]# umask -Su=rwx,g=rx,o=rx

    若使用者创建为『文件』则默认为:-rw-rw-rw-
    若使用者创建为『目录』则默认为:drwxrwxrwx

    • 文件默认权限:umask

  • chattr (配置文件隐藏属性)

  • [root@www ~]# chattr [+-=][ASacdistu] 文件或目录名称
    选项与参数:+  :添加某一个特殊参数,其他原本存在参数则不动。-  :移除某一个特殊参数,其他原本存在参数则不动。
    =   :配置一定,且仅有后面接的参数
    A  :当配置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime
    将不会被修改,可避免I/O较慢的机器过度的存取磁碟。这对速度较慢的计算机有帮助
    S  :一般文件是非同步写入磁碟的(原理请参考第五章sync的说明),如果加上 S 这个
    属性时,当你进行任何文件的修改,该更动会『同步』写入磁碟中。
    a  :当配置 a 之后,这个文件将只能添加数据,而不能删除也不能修改数据,只有root 
    才能配置这个属性。 
    c  :这个属性配置之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,
    但是在储存的时候,将会先进行压缩后再储存(看来对於大文件似乎蛮有用的!)
    d  :当 dump 程序被运行的时候,配置 d 属性将可使该文件(或目录)不会被 dump 备份
    i  :这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、配置连结也无法
    写入或新增数据!』对於系统安全性有相当大的助益!只有 root 能配置此属性
    s  :当文件配置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘
    空间,所以如果误删了,完全无法救回来了喔!
    u  :与 s 相反的,当使用 u 来配置文件时,如果该文件被删除了,则数据内容其实还
    存在磁碟中,可以使用来救援该文件喔!
    注意:属性配置常见的是 a 与 i 的配置值,而且很多配置值必须要身为 root 才能配置
    范例:请尝试到/tmp底下创建文件,并加入 i 的参数,尝试删除看看。
    [root@www ~]# cd /tmp
    [root@www tmp]# touch attrtest     <==创建一个空文件
    [root@www tmp]# chattr +i attrtest <==给予 i 的属性
    [root@www tmp]# rm attrtest        <==尝试删除看看rm: remove write-protected regular empty file `attrtest&#39;? yrm: cannot remove `attrtest&#39;: Operation not permitted  <==操作不许可
  • # 看到了吗?呼呼!连

  • root
  • 也没有办法将这个文件删除呢!赶紧解除配置! 范例:请将该文件的

  • i
  • 属性取消! [

  • root
  • @

  • www

  • tmp
  • ]#

  • chattr

  • -i

  • attrtest
  • lsattr (显示文件隐藏属性)

  • [root@www ~]# lsattr [-adR] 文件或目录选项与参数:
    -a :将隐藏档的属性也秀出来;
    -d :如果接的是目录,仅列出目录本身的属性而非目录内的档名;
    -R :连同子目录的数据也一并列出来! 
    [root@www tmp]# chattr +aij attrtest[root@www tmp]# lsattr attrtest----ia---j--- attrtest
  • 文件特殊权限: SUID, SGID, SBIT

    • Set UID
      基本上SUID有这样的限制与功能:

    SUID 权限仅对二进位程序(binary program)有效;
    运行者对於该程序需要具有 x 的可运行权限;
    本权限仅在运行该程序的过程中有效 (run-time);
    运行者将具有该程序拥有者 (owner) 的权限。

  • Set GID
    与 SUID 不同的是,SGID 可以针对文件或目录来配置!如果是对文件来说, SGID 有如下的功能:

  • SGID 对二进位程序有用;
    程序运行者对於该程序来说,需具备 x 的权限;
    运行者在运行的过程中将会获得该程序群组的支持!
    -
    当一个目录配置了 SGID 的权限后,他将具有如下的功能:
    使用者若对於此目录具有 r 与 x 的权限时,该使用者能够进入此目录;
    使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
    用途:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同。

  • Sticky Bit
    SBIT 对於目录的作用是:

  • 当使用者对於此目录具有 w, x 权限,亦即具有写入的权限时;
    当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件
    -
    换句话说:当甲这个使用者於 A 目录是具有群组或其他人的身份,并且拥有该目录 w 的权限, 这表示『甲使用者对该目录内任何人创建的目录或文件均可进行 “删除/更名/搬移” 等动作。』 不过,如果将 A 目录加上了 SBIT 的权限项目时, 则甲只能够针对自己创建的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。

  • SUID/SGID/SBIT 权限配置
    4 为 SUID,2 为 SGID,1 为 SBIT

  • [root@www ~]# cd /tmp[root@www tmp]# touch test                  <==创建一个测试用空档[root@www tmp]# chmod 4755 test; ls -l test <==加入具有 SUID 的权限-rwsr-xr-x 1 root root 0 Sep 29 03:06 test
    [root@www tmp]# chmod 6755 test; ls -l test <==加入具有 SUID/SGID 的权限-rwsr-sr-x 1 root root 0 Sep 29 03:06 test
    [root@www tmp]# chmod 1755 test; ls -l test <==加入 SBIT 的功能!-rwxr-xr-t 1 root root 0 Sep 29 03:06 test
    [root@www tmp]# chmod 7666 test; ls -l test <==具有空的 SUID/SGID 权限-rwSrwSrwT 1 root root 0 Sep 29 03:06 test
  • 观察文件类型:file

  • [root@www ~]# file ~/.bashrc/root/.bashrc: ASCII text  <==告诉我们是 ASCII 的纯文字档啊!
    [root@www ~]# file /usr/bin/passwd/usr/bin/passwd: setuid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped# 运行档的数据可就多的不得了!包括这个文件的 suid 权限、兼容於 Intel 386# 等级的硬件平台、使用的是 Linux 核心 2.6.9 的动态函式库连结等等。[root@www ~]# file /var/lib/mlocate/mlocate.db/var/lib/mlocate/mlocate.db: data  <== 这是 data 文件!
  • 命令与文件的搜寻

    • which (寻找『运行档』)

    [root@www ~]# which [-a] command选项或参数:
    -a :将所有由 PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称
    范例一:分别用root与一般帐号搜寻 ifconfig 这个命令的完整档名
    [root@www ~]# which ifconfig/sbin/ifconfig            <==用 root 可以找到正确的运行档名喔!
    [root@www ~]# su - vbird <==切换身份成为 vbird 去![vbird@www ~]$ which ifconfig
    /usr/bin/which: no ifconfig in (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/vbird/bin)         <==见鬼了!竟然一般身份帐号找不到!# 因为 which 是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,# 不同的 PATH 配置内容所找到的命令当然不一样啦!因为 /sbin 不在 vbird 的 # PATH 中,找不到也是理所当然的啊!了乎?[vbird@www ~]$ exit      <==记得将身份切换回原本的 root
    范例二:用 which 去找出 which 的档名为何?
    [root@www ~]# which whichalias which=&#39;alias | /usr/bin/which --tty-only --read-alias --show-dot &#39;
      /usr/bin/which# 竟然会有两个 which ,其中一个是 alias 这玩意儿呢!那是啥?# 那就是所谓的『命令别名』,意思是输入 which 会等於后面接的那串命令啦!# 更多的数据我们会在 bash 章节中再来谈的!范例三:请找出 cd 这个命令的完整档名
    [root@www ~]# which cd/usr/bin/which: no cd in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)# 瞎密?怎么可能没有 cd ,我明明就能够用 root 运行 cd 的啊!
  • whereis (寻找特定文件)

  • [root@www ~]# whereis [-bmsu] 文件或目录名选项与参数:
    -b    :只找 binary 格式的文件
    -m    :只找在说明档 manual 路径下的文件
    -s    :只找 source 来源文件
    -u    :搜寻不在上述三个项目当中的其他特殊文件
    范例一:请用不同的身份找出 ifconfig 这个档名
    [root@www ~]# whereis ifconfig ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
    [root@www ~]# su - vbird        <==切换身份成为 vbird[vbird@www ~]$ whereis ifconfig <==找到同样的结果喔!ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
    [vbird@www ~]$ exit              <==回归身份成为 root 去!# 注意看,明明 which 一般使用者找不到的 ifconfig 却可以让 whereis 找到!# 这是因为系统真的有 ifconfig 这个『文件』,但是使用者的 PATH 并没有加入 /sbin# 所以,未来你找不到某些命令时,先用文件搜寻命令找找看再说!范例二:只找出跟 passwd 有关的『说明文件』档名(man page)
    [root@www ~]# whereis -m passwdpasswd: /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
  • locate

  • [root@www ~]# locate [-ir] keyword选项与参数:
    -i  :忽略大小写的差异;
    -r  :后面可接正规表示法的显示方式
    范例一:找出系统中所有与 passwd 相关的档名
    [root@www ~]# locate passwd/etc/passwd
    /etc/passwd-
    /etc/news/passwd.nntp
    /etc/pam.d/passwd
    ....(底下省略)....
  • find

  • [root@www ~]# find [PATH] [option] [action]选项与参数:1.与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明
    -mtime  n :n 为数字,意义为在 n 天之前的『一天之内』被更动过内容的文件;
    -mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件档名;
    -mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件档名。
    -newer file :file 为一个存在的文件,列出比 file 还要新的文件档名
    范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出
    [root@www ~]# find / -mtime 0# 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前,# 有变动过内容的文件都会被列出来!那如果是三天前的 24 小时内?# find / -mtime 3 有变动过的文件都被列出的意思!范例二:寻找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出
    [root@www ~]# find /etc -newer /etc/passwd# -newer 用在分辨两个文件之间的新旧关系是很有用的!选项与参数:2.与使用者或群组名称有关的参数:
    -uid n :n 为数字,这个数字是使用者的帐号 ID,亦即 UID ,这个 UID 是记录在
          /etc/passwd 里面与帐号名称对应的数字。这方面我们会在第四篇介绍。
    -gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在
          /etc/group,相关的介绍我们会第四篇说明~
    -user name :name 为使用者帐号名称喔!例如 dmtsai 
    -group name:name 为群组名称喔,例如 users ;
    -nouser    :寻找文件的拥有者不存在 /etc/passwd 的人!
    -nogroup   :寻找文件的拥有群组不存在於 /etc/group 的文件!
              当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,
              这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。
    范例三:搜寻 /home 底下属於 vbird 的文件
    [root@www ~]# find /home -user vbird# 这个东西也很有用的~当我们要找出任何一个使用者在系统当中的所有文件时,# 就可以利用这个命令将属於某个使用者的所有文件都找出来喔!范例四:搜寻系统中不属於任何人的文件
    [root@www ~]# find / -nouser# 透过这个命令,可以轻易的就找出那些不太正常的文件。# 如果有找到不属於系统任何人的文件时,不要太紧张,# 那有时候是正常的~尤其是你曾经以原始码自行编译软件时。选项与参数:3.与文件权限及名称有关的参数:
    -name filename:搜寻文件名称为 filename 的文件;
    -size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有:
                 c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB
                 还要大的文件,就是『 -size +50k 』
    -type TYPE    :搜寻文件的类型为 TYPE 的,类型主要有:一般正规文件 (f),
                 装置文件 (b, c), 目录 (d), 连结档 (l), socket (s), 
                 及 FIFO (p) 等属性。
    -perm mode  :搜寻文件权限『刚好等於』 mode 的文件,这个 mode 为类似 chmod
               的属性值,举例来说, -rwsr-xr-x 的属性为 4755 !
    -perm -mode :搜寻文件权限『必须要全部囊括 mode 的权限』的文件,举例来说,
               我们要搜寻 -rwxr--r-- ,亦即 0744 的文件,使用 -perm -0744,
               当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,
               因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。
    -perm +mode :搜寻文件权限『包含任一 mode 的权限』的文件,举例来说,我们搜寻
               -rwxr-xr-x ,亦即 -perm +755 时,但一个文件属性为 -rw-------
               也会被列出来,因为他有 -rw.... 的属性存在!
    范例五:找出档名为 passwd 这个文件
    [root@www ~]# find / -name passwd# 利用这个 -name 可以搜寻档名啊!范例六:找出 /var 目录下,文件类型为 Socket 的档名有哪些?
    [root@www ~]# find /var -type s# 这个 -type 的属性也很有帮助喔!尤其是要找出那些怪异的文件,# 例如 socket 与 FIFO 文件,可以用 find /var -type p 或 -type s 来找!范例七:搜寻文件当中含有 SGID 或 SUID 或 SBIT 的属性
    [root@www ~]# find / -perm +7000 # 所谓的 7000 就是 ---s--s--t ,那么只要含有 s 或 t 的就列出,# 所以当然要使用 +7000 ,使用 -7000 表示要含有 ---s--s--t 的所有三个权限,# 因此,就是 +7000 ~了乎?选项与参数:4.额外可进行的动作:
    -exec command :command 为其他命令,-exec 后面可再接额外的命令来处理搜寻到的结果。
    -print        :将结果列印到萤幕上,这个动作是默认动作!
    范例八:将上个范例找到的文件使用 ls -l 列出来~
    [root@www ~]# find / -perm +7000 -exec ls -l {} \;# 注意到,那个 -exec 后面的 ls -l 就是额外的命令,命令不支持命令别名,# 所以仅能使用 ls -l 不可以使用 ll 喔!注意注意!范例九:找出系统中,大於 1MB 的文件
    [root@www ~]# find / -size +1000k# 虽然在 man page 提到可以使用 M 与 G 分别代表 MB 与 GB,# 不过,俺却试不出来这个功能~所以,目前应该是仅支持到 c 与 k 吧!

    {} 代表的是『由 find 找到的内容』,如上图所示,find 的结果会被放置到 {} 位置中;
    -exec 一直到 \; 是关键字,代表 find 额外动作的开始 (-exec) 到结束 (\;) ,在这中间的就是 find 命令内的额外动作。 在本例中就是『 ls -l {} 』罗!
    因为『 ; 』在 bash 环境下是有特殊意义的,因此利用反斜线来跳脱。


    未完待续




转自:https://blog.csdn.net/hustlinevan/article/details/38306311

一. 基本使用


X window与文本模式的切换。
通常我们也称文本模式为终端机接口, terminal 或 console喔!Linux默认的情况下会提供六个Terminal来让使用者登陆,切换的方式为使用:[Ctrl] + [Alt] + [F1]~[F6]的组合按钮。系统会将[F1] ~ [F6]命名为tty1 ~ tty6的操作接口环境。按下[Ctrl] + [Alt] + [F7]就可以回到X图形窗口。
在纯文本环境中要启动X窗口,可以在tty1~tty6的任意一个终端接口使用你的账号登陆后(登陆的方法下一小节会介绍), 然后下达如下的命令即可:[vbird@www ~]$ startx。Linux默认提供了七个Run level给我们使用,其中最常用到的就是run level 3与run level 5这两者了。

  • man page
    在查询数据的几个常见数字的意义:
    1 使用者在shell环境中可以操作的命令或可运行文件
    5 配置文件或者是某些文件的格式
    8 系统管理员可用的管理命令
    man page按键功能:

    搜寻特定命令/文件的man page说明文件。[vbird@www ~]$ man -f man

    [vbird@www ~]$ man -f man 
    man                  (1)  - format and display the on-line manual pages 
    man                  (7)  - macros to format man pages 
    man.config [man]     (5)  - configuration data for man

    但如果我想要找的是『关键词』呢?

    [vbird@www ~]$ man -k man 
    . [builtins]         (1)  - bash built-in commands, see bash(1) 
    .TP 15 php [php]     (1)  - PHP Command Line Interface &#39;CLI&#39; ....(中间省略).... 
    zshall               (1)  - the Z shell meta-man page 
    zshbuiltins          (1)  - zsh built-in commands 
    zshzle               (1)  - zsh command line editor

    还有两个命令与man page有关:

    [vbird@www ~]$ whatis  [命令或者是数据]   <==相当于 man -f [命令或者是数据] 
    [vbird@www ~]$ apropos [命令或者是数据]   <==相当于 man -k [命令或者是数据]
  • info page
    info与man的用途其实差不多,都是用来查询命令的用法或者是文件的格式。但是与man page一口气输出一堆信息不同的是,info page则是将文件数据拆成一个一个的段落,每个段落用自己的页面来撰写, 并且在各个页面中还有类似网页的『超链接』来跳到各不同的页面中,每个独立的页面也被称为一个节点(node)。

  • 关机命令
    关机时考虑。观察系统的使用状态:如果要看目前有谁在在线,可以下达『who』这个命令,而如果要看网络的联机状态,可以下达 『 netstat -a 』这个命令,而要看背景运行的程序可以运行『 ps -aux 』这个命令。
    几个与关机/重新启动相关的命令:
    (1) 将数据同步写入硬盘中的命令: sync
    (2) 惯用的关机命令: shutdown
    (3) 重新启动,关机: reboot, halt, poweroff

    [root@www ~]# /sbin/shutdown [-t 秒] [-arkhncfF] 时间 [警告信息] 选项与参数: 
    -t sec : -t 后面加秒数,亦即『过几秒后关机』的意思 
    -k     : 不要真的关机,只是发送警告信息出去! 
    -r     : 在将系统的服务停掉之后就重新启动(常用) 
    -h     : 将系统的服务停掉后,立即关机。 (常用) 
    -n     : 不经过 init 程序,直接以 shutdown 的功能来关机 
    -f     : 关机并启动之后,强制略过 fsck 的磁盘检查 
    -F     : 系统重新启动之后,强制进行 fsck 的磁盘检查 
    -c     : 取消已经在进行的 shutdown 命令内容。 
    时间   : 这是一定要加入的参数!指定系统关机的时间!时间的范例底下会说明。 
    范例: 
    [root@www ~]# /sbin/shutdown -h 10 &#39;I will shutdown after 10 mins&#39; # 告诉大家,这部机器会在十分钟后关机!并且会显示在目前登陆者的屏幕前方! # 至于参数有哪些呢?以下介绍几个吧!

    举几个例子:

    [root@www ~]# shutdown -h now 立刻关机,其中 now 相当于时间为 0 的状态 
    [root@www ~]# shutdown -h 20:25 系统在今天的 20:25 分会关机,若在21:25才下达此命令,则隔天才关机 
    [root@www ~]# shutdown -h +10 系统再过十分钟后自动关机 
    [root@www ~]# shutdown -r now 系统立刻重新启动 
    [root@www ~]# shutdown -r +30 &#39;The system will reboot&#39;  再过三十分钟系统会重新启动,并显示后面的信息给所有在在线的使用者 
    [root@www ~]# shutdown -k now &#39;This system will reboot&#39;  仅发出警告信件的参数!系统并不会关机啦!吓唬人!
    • shutdown

  • 重新启动,关机: reboot, halt, poweroff

  • [root@www ~]# sync; sync; sync; reboot [root@www ~]# shutdown -h now [root@www ~]# poweroff -f
  • 切换运行等级: init
    run level 0:关机
    run level 3:纯文本模式
    run level 5:含有图形接口模式
    run level 6:重新启动

  • [root@www ~]# init 0


    二. 文件属性与权限



改变所属群组, chgrp

[root@www ~]# chgrp [-R] dirname/filename ...选项与参数:
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件、目录
  都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。
范例:
[root@www ~]# chgrp users install.log[root@www ~]# ls -l-rw-r--r--  1 root users 68495 Jun 25 08:53 install.log[root@www ~]# chgrp testing install.logchgrp: invalid group name `testing&#39; <== 发生错误讯息啰~找不到这个群组名~
  • 改变文件拥有者, chown

    [root@www ~]# chown [-R] 账号名称 文件或目录[root@www ~]# chown [-R] 账号名称:组名 文件或目录选项与参数:
    -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更
    范例:将install.log的拥有者改为bin这个账号:
    [root@www ~]# chown bin install.log[root@www ~]# ls -l-rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log范例:将install.log的拥有者与群组改回为root:
    [root@www ~]# chown root:root install.log[root@www ~]# ls -l-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log
  • 改变权限, chmod
    权限的设定方法有两种, 分别可以使用数字或者是符号来进行权限的变更。

    [root@www ~]# chmod [-R] xyz 文件或目录
    选项与参数:xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

    如果要将.bashrc这个文件所有的权限都设定启用,那么就下达:

    [root@www ~]# ls -al .bashrc-rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
    [root@www ~]# chmod 777 .bashrc[root@www ~]# ls -al .bashrc-rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc
    • 数字类型改变文件权限
      Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限,分别是r:4,w:2,x:1。每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的。

  • 符号类型改变文件权限
    基本上就九个权限分别是(1)user (2)group (3)others三种身份啦!那么我们就可以藉由u, g, o来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!

    <code class="hljs coffeescript">[root<span class="hljs-property">@www</span> ~]<span class="hljs-comment"># chmod  u=rwx,go=rx  .bashrc</span> <br/><span class="hljs-comment"># 注意!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空格!</span> <br/>[root<span class="hljs-property">@www</span> ~]<span class="hljs-comment"># chmod  a+w  .bashrc</span> <br/>[[root<span class="hljs-property">@www</span> ~]<span class="hljs-comment"># chmod  a-x  .bashrc</span> <br/></code>

  • 3. 文件与目录管理



    目录的相关操作:


    cd (变换目录)

  • 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&#39;: 
    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 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 才能了解喔! ^_^
  • rmdir (删除『空』的目录)

    <code class="hljs coffeescript">[root<span class="hljs-property">@www</span> ~]<span class="hljs-comment"># rmdir [-p] 目录名称</span> <br/>选项与参数: <br/>-p :连同上一级『空的』目录也一起删除 <br/>范例:将於mkdir范例中创建的目录(/tmp底下)删除掉! <br/>[root<span class="hljs-property">@www</span> tmp]<span class="hljs-comment"># ls -l   <==看看有多少目录存在?</span> <br/>drwxr-xr-x  <span class="hljs-number">3</span> root  root <span class="hljs-number">4096</span> Jul <span class="hljs-number">18</span> <span class="hljs-number">12</span>:<span class="hljs-number">50</span> test <br/>drwxr-xr-x  <span class="hljs-number">3</span> root  root <span class="hljs-number">4096</span> Jul <span class="hljs-number">18</span> <span class="hljs-number">12</span>:<span class="hljs-number">53</span> test1 <br/>drwx–x–x  <span class="hljs-number">2</span> root  root <span class="hljs-number">4096</span> Jul <span class="hljs-number">18</span> <span class="hljs-number">12</span>:<span class="hljs-number">54</span> test2 <br/>[root<span class="hljs-property">@www</span> tmp]<span class="hljs-comment"># rmdir test   <==可直接删除掉,没问题</span> <br/>[root<span class="hljs-property">@www</span> tmp]<span class="hljs-comment"># rmdir test1  <==因为尚有内容,所以无法删除!</span> <br/><span class="hljs-attribute">rmdir</span>: `<span class="javascript">test1<span class="hljs-string">’: Directory not empty <br/>[root@www tmp]# rmdir -p test1/test2/test3/test4 <br/>[root@www tmp]# ls -l        <==您看看,底下的输出中test与test1不见了! <br/>drwx–x–x  2 root  root 4096 Jul 18 12:54 test2</span></span></code>
  • # 瞧!利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次删除~ # 不过要注意的是,这个 rmdir 仅能『删除空的目录』喔!

  • 文件与目录管理

    • 文件与目录的检视: 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)
  • cp (复制文件或目录)

  • 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 !最后需要注意的,如果来源档有两个以上,则最后一个目的档一定要是『目录』才行!
  • 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&#39;? 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-
  • 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# 注意到这边,如果有多个来源文件或目录,则最后一个目标档一定是『目录!』# 意思是说,将所有的数据移动到该目录的意思!
  • 文件内容查阅

    直接检视文件内容:
    cat 由第一行开始显示文件内容
    tac 从最后一行开始显示,可以看出 tac 是 cat 的倒著写!
    nl 显示的时候,顺道输出行号!
    可翻页检视:
    more 一页一页的显示文件内容
    less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
    数据撷取:
    head 只看头几行
    tail 只看尾巴几行
    非纯文字档:
    od 以二进位的方式读取文件内容!

    [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/issue1  CentOS release 5.3 (Final)2  Kernel \r on an \m3# 看到了吧!可以印出行号呢!这对於大文件要找某个特定的行时,有点用处!# 如果不想要编排空白行的行号,可以使用『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_type^I= SYSLOG daemon info $^Ilog_on_failure^I= HOST$^Ilog_on_success^I= PID HOST DURATION EXIT$....(中间省略)....
    • cat (concatenate)

  • tac (反向列示)

  • [root@www ~]# tac /etc/issueKernel \r on an \m
    CentOS 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/issue1  CentOS release 5.3 (Final)2  Kernel \r on an \m# 注意看,这个文件其实有三行,第三行为空白(没有任何字节),# 因为他是空白行,所以 nl 不会加上行号喔!如果确定要加上行号,可以这样做:[root@www ~]# nl -b a /etc/issue1  CentOS release 5.3 (Final)2  Kernel \r on an \m3# 呵呵!行号加上来罗~那么如果要让行号前面自动补上 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
  • 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%)  <== 重点在这一行喔!你的光标也会在这里等待你的命令

    1) 空白键 (space):代表向下翻一页;
    2) Enter :代表向下翻『一行』;
    3) /字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
    4) :f :立刻显示出档名以及目前显示的行数;
    5) q :代表立刻离开 more ,不再显示该文件内容。
    6) b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。

  • less (一页一页翻动)

  • [root@www ~]# less /etc/man.config## Generated automatically from man.conf.in by the# configure script.## man.conf from man-1.6d....(中间省略)....
    :   <== 这里可以等待你输入命令!

    1) 空白键 :向下翻动一页;
    2) [pagedown]:向下翻动一页;
    3) [pageup] :向上翻动一页;
    4) /字串 :向下搜寻『字串』的功能;
    5) ?字串 :向上搜寻『字串』的功能;
    6) n :重复前一个搜寻 (与 / 或 ? 有关!)
    7) N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
    8) q :离开 less 这个程序;

  • 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
  • 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这个命令的侦测!
  • 非纯文字档: 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。
  • 修改文件时间或建置新档: touch
    1) modification time (mtime):
    当该文件的『内容数据』变更时,就会升级这个时间!内容数据指的是文件的内容,而不是文件的属性或权限喔!
    2) status time (ctime):
    当该文件的『状态 (status)』改变时,就会升级这个时间,举例来说,像是权限与属性被更改了,都会升级这个时间啊。
    3) access time (atime):
    当『该文件的内容被取用』时,就会升级这个读取时间 (access)。举例来说,我们使用 cat 去读取 /etc/man.config , 就会升级该文件的 atime 了。

  • [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)

  • 文件与目录的默认权限与隐藏权限

    [root@www ~]# umask0022             <==与一般权限有关的是后面三个数字!
    [root@www ~]# umask -Su=rwx,g=rx,o=rx

    若使用者创建为『文件』则默认为:-rw-rw-rw-
    若使用者创建为『目录』则默认为:drwxrwxrwx

    • 文件默认权限:umask

  • chattr (配置文件隐藏属性)

  • [root@www ~]# chattr [+-=][ASacdistu] 文件或目录名称
    选项与参数:+  :添加某一个特殊参数,其他原本存在参数则不动。-  :移除某一个特殊参数,其他原本存在参数则不动。
    =   :配置一定,且仅有后面接的参数
    A  :当配置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime
    将不会被修改,可避免I/O较慢的机器过度的存取磁碟。这对速度较慢的计算机有帮助
    S  :一般文件是非同步写入磁碟的(原理请参考第五章sync的说明),如果加上 S 这个
    属性时,当你进行任何文件的修改,该更动会『同步』写入磁碟中。
    a  :当配置 a 之后,这个文件将只能添加数据,而不能删除也不能修改数据,只有root 
    才能配置这个属性。 
    c  :这个属性配置之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,
    但是在储存的时候,将会先进行压缩后再储存(看来对於大文件似乎蛮有用的!)
    d  :当 dump 程序被运行的时候,配置 d 属性将可使该文件(或目录)不会被 dump 备份
    i  :这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、配置连结也无法
    写入或新增数据!』对於系统安全性有相当大的助益!只有 root 能配置此属性
    s  :当文件配置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘
    空间,所以如果误删了,完全无法救回来了喔!
    u  :与 s 相反的,当使用 u 来配置文件时,如果该文件被删除了,则数据内容其实还
    存在磁碟中,可以使用来救援该文件喔!
    注意:属性配置常见的是 a 与 i 的配置值,而且很多配置值必须要身为 root 才能配置
    范例:请尝试到/tmp底下创建文件,并加入 i 的参数,尝试删除看看。
    [root@www ~]# cd /tmp
    [root@www tmp]# touch attrtest     <==创建一个空文件
    [root@www tmp]# chattr +i attrtest <==给予 i 的属性
    [root@www tmp]# rm attrtest        <==尝试删除看看rm: remove write-protected regular empty file `attrtest&#39;? yrm: cannot remove `attrtest&#39;: Operation not permitted  <==操作不许可
  • # 看到了吗?呼呼!连

  • root
  • 也没有办法将这个文件删除呢!赶紧解除配置! 范例:请将该文件的

  • i
  • 属性取消! [

  • root
  • @

  • www

  • tmp
  • ]#

  • chattr

  • -i

  • attrtest
  • lsattr (显示文件隐藏属性)

  • [root@www ~]# lsattr [-adR] 文件或目录选项与参数:
    -a :将隐藏档的属性也秀出来;
    -d :如果接的是目录,仅列出目录本身的属性而非目录内的档名;
    -R :连同子目录的数据也一并列出来! 
    [root@www tmp]# chattr +aij attrtest[root@www tmp]# lsattr attrtest----ia---j--- attrtest
  • 文件特殊权限: SUID, SGID, SBIT

    • Set UID
      基本上SUID有这样的限制与功能:

    SUID 权限仅对二进位程序(binary program)有效;
    运行者对於该程序需要具有 x 的可运行权限;
    本权限仅在运行该程序的过程中有效 (run-time);
    运行者将具有该程序拥有者 (owner) 的权限。

  • Set GID
    与 SUID 不同的是,SGID 可以针对文件或目录来配置!如果是对文件来说, SGID 有如下的功能:

  • SGID 对二进位程序有用;
    程序运行者对於该程序来说,需具备 x 的权限;
    运行者在运行的过程中将会获得该程序群组的支持!
    -
    当一个目录配置了 SGID 的权限后,他将具有如下的功能:
    使用者若对於此目录具有 r 与 x 的权限时,该使用者能够进入此目录;
    使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
    用途:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同。

  • Sticky Bit
    SBIT 对於目录的作用是:

  • 当使用者对於此目录具有 w, x 权限,亦即具有写入的权限时;
    当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件
    -
    换句话说:当甲这个使用者於 A 目录是具有群组或其他人的身份,并且拥有该目录 w 的权限, 这表示『甲使用者对该目录内任何人创建的目录或文件均可进行 “删除/更名/搬移” 等动作。』 不过,如果将 A 目录加上了 SBIT 的权限项目时, 则甲只能够针对自己创建的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。

  • SUID/SGID/SBIT 权限配置
    4 为 SUID,2 为 SGID,1 为 SBIT

  • [root@www ~]# cd /tmp[root@www tmp]# touch test                  <==创建一个测试用空档[root@www tmp]# chmod 4755 test; ls -l test <==加入具有 SUID 的权限-rwsr-xr-x 1 root root 0 Sep 29 03:06 test
    [root@www tmp]# chmod 6755 test; ls -l test <==加入具有 SUID/SGID 的权限-rwsr-sr-x 1 root root 0 Sep 29 03:06 test
    [root@www tmp]# chmod 1755 test; ls -l test <==加入 SBIT 的功能!-rwxr-xr-t 1 root root 0 Sep 29 03:06 test
    [root@www tmp]# chmod 7666 test; ls -l test <==具有空的 SUID/SGID 权限-rwSrwSrwT 1 root root 0 Sep 29 03:06 test
  • 观察文件类型:file

  • [root@www ~]# file ~/.bashrc/root/.bashrc: ASCII text  <==告诉我们是 ASCII 的纯文字档啊!
    [root@www ~]# file /usr/bin/passwd/usr/bin/passwd: setuid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped# 运行档的数据可就多的不得了!包括这个文件的 suid 权限、兼容於 Intel 386# 等级的硬件平台、使用的是 Linux 核心 2.6.9 的动态函式库连结等等。[root@www ~]# file /var/lib/mlocate/mlocate.db/var/lib/mlocate/mlocate.db: data  <== 这是 data 文件!
  • 命令与文件的搜寻

    • which (寻找『运行档』)

    [root@www ~]# which [-a] command选项或参数:
    -a :将所有由 PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称
    范例一:分别用root与一般帐号搜寻 ifconfig 这个命令的完整档名
    [root@www ~]# which ifconfig/sbin/ifconfig            <==用 root 可以找到正确的运行档名喔!
    [root@www ~]# su - vbird <==切换身份成为 vbird 去![vbird@www ~]$ which ifconfig
    /usr/bin/which: no ifconfig in (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/vbird/bin)         <==见鬼了!竟然一般身份帐号找不到!# 因为 which 是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,# 不同的 PATH 配置内容所找到的命令当然不一样啦!因为 /sbin 不在 vbird 的 # PATH 中,找不到也是理所当然的啊!了乎?[vbird@www ~]$ exit      <==记得将身份切换回原本的 root
    范例二:用 which 去找出 which 的档名为何?
    [root@www ~]# which whichalias which=&#39;alias | /usr/bin/which --tty-only --read-alias --show-dot &#39;
      /usr/bin/which# 竟然会有两个 which ,其中一个是 alias 这玩意儿呢!那是啥?# 那就是所谓的『命令别名』,意思是输入 which 会等於后面接的那串命令啦!# 更多的数据我们会在 bash 章节中再来谈的!范例三:请找出 cd 这个命令的完整档名
    [root@www ~]# which cd/usr/bin/which: no cd in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)# 瞎密?怎么可能没有 cd ,我明明就能够用 root 运行 cd 的啊!
  • whereis (寻找特定文件)

  • [root@www ~]# whereis [-bmsu] 文件或目录名选项与参数:
    -b    :只找 binary 格式的文件
    -m    :只找在说明档 manual 路径下的文件
    -s    :只找 source 来源文件
    -u    :搜寻不在上述三个项目当中的其他特殊文件
    范例一:请用不同的身份找出 ifconfig 这个档名
    [root@www ~]# whereis ifconfig ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
    [root@www ~]# su - vbird        <==切换身份成为 vbird[vbird@www ~]$ whereis ifconfig <==找到同样的结果喔!ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
    [vbird@www ~]$ exit              <==回归身份成为 root 去!# 注意看,明明 which 一般使用者找不到的 ifconfig 却可以让 whereis 找到!# 这是因为系统真的有 ifconfig 这个『文件』,但是使用者的 PATH 并没有加入 /sbin# 所以,未来你找不到某些命令时,先用文件搜寻命令找找看再说!范例二:只找出跟 passwd 有关的『说明文件』档名(man page)
    [root@www ~]# whereis -m passwdpasswd: /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
  • locate

  • [root@www ~]# locate [-ir] keyword选项与参数:
    -i  :忽略大小写的差异;
    -r  :后面可接正规表示法的显示方式
    范例一:找出系统中所有与 passwd 相关的档名
    [root@www ~]# locate passwd/etc/passwd
    /etc/passwd-
    /etc/news/passwd.nntp
    /etc/pam.d/passwd
    ....(底下省略)....
  • find

  • [root@www ~]# find [PATH] [option] [action]选项与参数:1.与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明
    -mtime  n :n 为数字,意义为在 n 天之前的『一天之内』被更动过内容的文件;
    -mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件档名;
    -mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件档名。
    -newer file :file 为一个存在的文件,列出比 file 还要新的文件档名
    范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出
    [root@www ~]# find / -mtime 0# 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前,# 有变动过内容的文件都会被列出来!那如果是三天前的 24 小时内?# find / -mtime 3 有变动过的文件都被列出的意思!范例二:寻找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出
    [root@www ~]# find /etc -newer /etc/passwd# -newer 用在分辨两个文件之间的新旧关系是很有用的!选项与参数:2.与使用者或群组名称有关的参数:
    -uid n :n 为数字,这个数字是使用者的帐号 ID,亦即 UID ,这个 UID 是记录在
          /etc/passwd 里面与帐号名称对应的数字。这方面我们会在第四篇介绍。
    -gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在
          /etc/group,相关的介绍我们会第四篇说明~
    -user name :name 为使用者帐号名称喔!例如 dmtsai 
    -group name:name 为群组名称喔,例如 users ;
    -nouser    :寻找文件的拥有者不存在 /etc/passwd 的人!
    -nogroup   :寻找文件的拥有群组不存在於 /etc/group 的文件!
              当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,
              这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。
    范例三:搜寻 /home 底下属於 vbird 的文件
    [root@www ~]# find /home -user vbird# 这个东西也很有用的~当我们要找出任何一个使用者在系统当中的所有文件时,# 就可以利用这个命令将属於某个使用者的所有文件都找出来喔!范例四:搜寻系统中不属於任何人的文件
    [root@www ~]# find / -nouser# 透过这个命令,可以轻易的就找出那些不太正常的文件。# 如果有找到不属於系统任何人的文件时,不要太紧张,# 那有时候是正常的~尤其是你曾经以原始码自行编译软件时。选项与参数:3.与文件权限及名称有关的参数:
    -name filename:搜寻文件名称为 filename 的文件;
    -size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有:
                 c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB
                 还要大的文件,就是『 -size +50k 』
    -type TYPE    :搜寻文件的类型为 TYPE 的,类型主要有:一般正规文件 (f),
                 装置文件 (b, c), 目录 (d), 连结档 (l), socket (s), 
                 及 FIFO (p) 等属性。
    -perm mode  :搜寻文件权限『刚好等於』 mode 的文件,这个 mode 为类似 chmod
               的属性值,举例来说, -rwsr-xr-x 的属性为 4755 !
    -perm -mode :搜寻文件权限『必须要全部囊括 mode 的权限』的文件,举例来说,
               我们要搜寻 -rwxr--r-- ,亦即 0744 的文件,使用 -perm -0744,
               当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,
               因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。
    -perm +mode :搜寻文件权限『包含任一 mode 的权限』的文件,举例来说,我们搜寻
               -rwxr-xr-x ,亦即 -perm +755 时,但一个文件属性为 -rw-------
               也会被列出来,因为他有 -rw.... 的属性存在!
    范例五:找出档名为 passwd 这个文件
    [root@www ~]# find / -name passwd# 利用这个 -name 可以搜寻档名啊!范例六:找出 /var 目录下,文件类型为 Socket 的档名有哪些?
    [root@www ~]# find /var -type s# 这个 -type 的属性也很有帮助喔!尤其是要找出那些怪异的文件,# 例如 socket 与 FIFO 文件,可以用 find /var -type p 或 -type s 来找!范例七:搜寻文件当中含有 SGID 或 SUID 或 SBIT 的属性
    [root@www ~]# find / -perm +7000 # 所谓的 7000 就是 ---s--s--t ,那么只要含有 s 或 t 的就列出,# 所以当然要使用 +7000 ,使用 -7000 表示要含有 ---s--s--t 的所有三个权限,# 因此,就是 +7000 ~了乎?选项与参数:4.额外可进行的动作:
    -exec command :command 为其他命令,-exec 后面可再接额外的命令来处理搜寻到的结果。
    -print        :将结果列印到萤幕上,这个动作是默认动作!
    范例八:将上个范例找到的文件使用 ls -l 列出来~
    [root@www ~]# find / -perm +7000 -exec ls -l {} \;# 注意到,那个 -exec 后面的 ls -l 就是额外的命令,命令不支持命令别名,# 所以仅能使用 ls -l 不可以使用 ll 喔!注意注意!范例九:找出系统中,大於 1MB 的文件
    [root@www ~]# find / -size +1000k# 虽然在 man page 提到可以使用 M 与 G 分别代表 MB 与 GB,# 不过,俺却试不出来这个功能~所以,目前应该是仅支持到 c 与 k 吧!

    {} 代表的是『由 find 找到的内容』,如上图所示,find 的结果会被放置到 {} 位置中;
    -exec 一直到 \; 是关键字,代表 find 额外动作的开始 (-exec) 到结束 (\;) ,在这中间的就是 find 命令内的额外动作。 在本例中就是『 ls -l {} 』罗!
    因为『 ; 』在 bash 环境下是有特殊意义的,因此利用反斜线来跳脱。


    以上是linux常用指令分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn