linux下的文件和目录管理自我总结

来源:互联网 发布:大尺度美剧 知乎 编辑:程序博客网 时间:2024/05/29 09:05
linux下的文件和目录管理自我总结  2  3      摘要:主要总结了linux下的文件和目录的管理,包括各种命令的使用和分类整理。  4  5  1, 目录与路径  6  .相对路径和绝对路径  7      以/打头的就是绝对路径,它会从根路径/开始寻找你要去的路径名。而不以/打头的就是相对路径,     例如:  8      cd /home/zhengxh                    #绝对路径  9      cd ./mydir [和 cd mydir相同]         #相对路径,以当前目录为起始目录 10      cd ../mydir                         #相对路径,以当前目录的上一层目录为起始目录 11 12  2, 目录的相关操作 13 14  .目录的相关符号 15      .           #代表当前目录 16      ..          #代表当前目录的父目录 17      -           #代表上一次进入的目录,即:$OLDPWD的值 18      ~           #代表使用者的家(/home/username) 目录 19      ~user       #代表user的家目录 20 21  .几个常见的目录处理命令 22 23  cd (变换目录) 24 25  cd dirname 26 27  #如果不加任何路径,就默认回到自己的家目录了,挺方便的把:) 28      cd ./mydir      #就在当前目录下的mydir目录 29      cd ..           #切换到上层目录 30      cd -            #切换到上次所在的目录 31      cd ~            #切换到我的家目录 32      cd ~user        #切换到user的家目录即:/home/user目录 33                      #注意:一般root用户才能切换 34      cd /tmp         #绝对路径,切换到/tmp目录 35 36 37  pwd (显示当前所在路径) 38 39  参数: 40      -P          #显示实际的物理路径,而不是符号链接路径 41 42  #以下例子可以看出-P参数加上后 43  #显示的是实际的物理路径,而不是符号链接路径 44  -------------------------------------------------------- 45  [zhengxh@hoverzg stdshell]$ ls -l md 46  lrwxrwxrwx  1 zhengxh cvs 5  6月 14 10:44 md -> mydir 47 48  #上面的是一个链接文件 49  [zhengxh@hoverzg stdshell]$ cd md 50  [zhengxh@hoverzg md]$ pwd 51  /home/zhengxh/stdshell/md 52  [zhengxh@hoverzg md]$ pwd -P 53  /home/zhengxh/stdshell/mydir 54  -------------------------------------------------------- 55 56 57  mkdir (创建新目录) 58 59  参数: 60      -m      #设定新创建目录的权限-m $(umask -S)这是默认的权限, 61              #(-m 554) 设定自己的权限,不需要关umask的值 62      -p      #如果你创建的目录中有任何不存在的目录,该参数都会为你创建 63 64  -------------------------------------------------------- 65  #可以看只有最后一层的目录,权限都变成了777 66  #注意:在-p 和-m参数一起使用时,只有最后一层的目录变成你设定的目录, 67  #而其他的则会使用默认的目录权限 68 69  [zhengxh@hoverzg stdshell]$ mkdir -p -m 777 dir1/dir2/dir3 70  [zhengxh@hoverzg stdshell]$ ls -Rl dir1/ 71  drwxr-xr-x  3 zhengxh cvs 4096  6月 14 11:16 dir1 72  drwxr-xr-x  3 zhengxh cvs 4096  6月 14 11:16 dir2 73  drwxrwxrwx  2 zhengxh cvs 4096  6月 14 11:16 dir3 74 75  -------------------------------------------------------- 76 77 78  rmdir (删除空的路径) 79 80  注意:该命令只能删除空目录,而且是每个目录必须都为空 81  参数: 82      -p          #连同上层父目录一起删除 83 84  -------------------------------------------------------- 85  #注意:使用-p参数时,要指定删除目录的最后一层,而不能只写到第一层, 86  #因为,它不为空阿:) 87  [zhengxh@hoverzg stdshell]$ mkdir -p test1/test2/test3 88 89  #要写到最后一层为空的目录,否则会提示错误 90  [zhengxh@hoverzg stdshell]$ rmdir -p test1 91  rmdir: ‘test1’: 目录非空 92  [zhengxh@hoverzg stdshell]$ rmdir -p test1/test2/test3/ 93 94  -------------------------------------------------------- 95 96  3, 文件和目录的管理 97 98  ls (文件和目录查看命令) 99  用法:ls [选项]... [文件]...100101    -a, --all                  不隐藏任何以 . 字符开始的项目102    -A, --almost-all           列出除了 . 及 .. 以外的任何项目103    -d, --directory            列出目录而不是列出文件名104    -f                         不进行排序,-aU 选项生效,-lst 选项失效105    -l                         以列表的形式列出文件的完整信息106    -h                   以人类可读的方式列出文件的大小(K,M)107    -F                   加上文件类型的指示符号 (*/=@| 其中一个)108                          *:代表可執行檔; /:代表目錄;@:代表链接文件109                       =:代表 socket 檔案; |:代表 FIFO 檔案;110    -i, --inode                印出每个文件的 inode 号111    -n, --numeric-uid-gid      类似 -l,但列出 UID 及 GID 号112    -Q, --quote-name           将项目名称括上双引号113    -r, --reverse              依相反次序排列114    -R, --recursive            同时列出所有子目录层115    -S                         以文件大小排序116    -t                         以修改的时间先后顺序排序117    -X                         根据扩展名排序118    -1                                每行只列出一个文件119    -u                         配合 -lt:显示访问时间而且依访问时间排序120                                 配合 -l:显示访问时间但根据名称排序121                                 否则:根据访问时间排序122123    --full-time                显示完整的时间,包括年份124    --color=[never,always,auto]   显示颜色的方式125126  --------------------------------------------------------127  [zhengxh@hoverzg stdshell]$ ls -lF --full-time128  总用量 1732129  -rw-r--r--  1 zhengxh cvs         56 2008-06-04 13:51:35.000000000 +0800 22130  -rw-r--r--  1 zhengxh cvs         30 2008-05-31 18:30:01.000000000 +0800 33131  --------------------------------------------------------132133  cp, rm, mv (复制转移与删除)134135  cp (复制文件或目录)136      将<来源>文件复制至<目的地>,或将多个<文件>复制至<目录>。137      用法:cp [选项]... 来源 目的地138          或:cp [选项]... 来源... 目录139140    -a, --archive                等於 -dpR141    -d                           不会找出符号链接指示的真正目的地142    -f, --force                  强制进行,而不会让用户确认143    -i, --interactive            覆盖文件前需要确认144    -H                           使用命令列中的符号链接指示的真正目的地145    -l, --link                   链接而非复制文件146    -L, --dereference            一定先找出符号链接指示的真正目的地147    -u                           当源和目的文件有差异时,将会覆盖原来的文件148    -p/-c                        保留/不保留源文件的属性149    -R, -r, --recursive          复制目录及目录内的所有项目150    -s, --symbolic-link          只创建符号链接而不是复制文件151                         注意:和ln -s的效果一样,创建时要在目标目录下152153  --------------------------------------------------------154  [zhengxh@hoverzg stdshell]$ ls -l155  lrwxrwxrwx  1 zhengxh cvs          5  6月 14 10:44 md -> mydir156157  [zhengxh@hoverzg stdshell]$ cp -a md mytestdir/158  [zhengxh@hoverzg stdshell]$ ls -F mytestdir/159  md@160161  [zhengxh@hoverzg stdshell]$ cp -aL md mytestdir/162  [zhengxh@hoverzg stdshell]$ cd mytestdir/163  [zhengxh@hoverzg mytestdir]$ ls -F164  md/165166  #可以看到开始没有加L参数之前,我们复制到mytestdir中的仅仅是一个符号链接。167  而且一般这个符号链接由于路径改变所以已经没有意义。而加了L参数后,把整个168  目录都复制过去了,目录名是符号链接的名字。169170  [zhengxh@hoverzg stdshell]$ ls -l171  drwxrwxrw-  2 zhengxh cvs       4096  6月 14 11:20 ff172  [zhengxh@hoverzg stdshell]$ cp -R ff mytestdir/173  [zhengxh@hoverzg mytestdir]$ ls -l174  drwxr-xr--  2 zhengxh cvs 4096  6月 15 10:20 ff175176  #请看上面的复制过来的目录时间和权限都改变了177  #如果要保持它原来的属性,请加上-p选项。178179180  #cp的其他用法181  (1)cp /dev/cdrom xxxx.iso  将光盘做成iso文件182183  --------------------------------------------------------184185  rm (删除文件和目录)186187  用法:rm [选项]... 目录...188    -f, --force           强制删除,不提示用户189    -i, --interactive     在删除前要寻问用户190    -r, -R, --recursive   轮训删除191    -d, --directory       可以用来删除符号链接目录192    --                    删除一个头是-的文件193194195  --------------------------------------------------------196  [zhengxh@hoverzg stdshell]$ rm -hh197  rm:无效选项 -- h198  请尝试执行‘rm --help’来获取更多信息。199  [zhengxh@hoverzg stdshell]$ rm -- -hh200  rm:是否删除一般文件‘-hh’? y201202  --------------------------------------------------------203204  mv (删除文件或更改目录/文件名)205206  用法:mv [选项]... 来源 目的地207    或:mv [选项]... 来源... 目录208209    -f, --force           强制删除,不提示用户210    -i, --interactive     在删除前要寻问用户211    -u, --update          只在<来源>文件比目的地文件新,或目的地文件212                                不存在时才会移动213214215216  rename  (批量文件名的更改)217218      rename [现有文件包含字符串] [更改后的字符串] [文件列表]219220  --------------------------------------------------------221222  #把所有.exe文件中的.exe的文件名字符串,改变成.out223  [zhengxh@hoverzg stdshell]$ rename .exe .out *.exe224225  --------------------------------------------------------226227  .取得文件名或目录名228229  basename230      basename [filename] [后缀字符串]231232  dirname233234      dirname [dirname] [取得父目录]235236237  4, 文件内容查看238239      * cat  由第一行開始顯示檔案內容240      * tac  從最後一行開始顯示,可以看出 tac 是 cat 的倒著寫!241      * nl   顯示的時候,順道輸出行號!242      * more 一頁一頁的顯示檔案內容243      * less 與 more 類似,但是比 more 更好的是,他可以往前翻頁!244      * head 只看頭幾行245      * tail 只看尾巴幾行246      * od   以二進位的方式讀取檔案內容!247248249  cat (将文件内容或标准输入-,连续的输出到标准输出)250251  用法: cat [-AEnTv] [FILE]...252253    -A,--show-all            相当于-vET的组合,可以列出一些特殊的字符254    -e                       相当于-vE选项的组合255    -E, --show-ends          在行的末尾显示$符号256    -n, --number             在输出行的前面加上行号257    -s, --squeeze-blank      只打印多个连续空白行的一行258    -t                       相当于-vT选项的组合259    -T, --show-tabs          显示TAB键为^I260    -v, --show-nonprinting   显示非打印字符^和 M-, 除了LFD and TAB261262  --------------------------------------------------------263264  [zhengxh@hoverzg stdshell]$ cat -A file265  rwxrwsrwx^Igprs^I512^IGPRS$266  12345wxrwsrwx^Igprs^I512^Izhengxh$267  $268  adf$269  adf$270  a$271  fd$272  $273  $274  $275  adfadsf$276  $277  [zhengxh@hoverzg stdshell]$ cat -sn file278       1  rwxrwsrwx       gprs    512     GPRS279       2  12345wxrwsrwx   gprs    512     zhengxh280       3281       4  adf282       5  adf283       6  a284       7  fd285       8286       9  adfadsf287      10288  #可以看到多个空白行只显示了一个空白行289290  --------------------------------------------------------291292  tac (反向显示)293294    -r, --regex              按正则表达式作为分隔符,把内容反转295    -s, --separator=STRING   使用STRING而不是默认的/n把内容反转296297298  --------------------------------------------------------299300  [zhengxh@hoverzg stdshell]$ tac t301  d302  dfa303  adfa304  adf305  this is a test306  [zhengxh@hoverzg stdshell]$ cat t307  this is a test308  adf309  adfa310  dfa311  d312  --------------------------------------------------------313314  nl (给输出的文件内容加上行号)315      nl 可以对行号进行比较多的样式的设计,包括:316      (1) 行号的位数317      (2) 行号的补零设计318319  參數:320  -b  :指定行號指定的方式,主要有兩種:321        -b a :表示不論是否為空行,也同樣列出行號;322        -b t :(默认)如果有空行,空的那一行不要列出行号;323  -n  :列出行號表示的方法,主要有三種:324        -n ln :行號在螢幕的最左方顯示;325        -n rn :行號在自己欄位的最右方顯示,且不加 0 ;326        -n rz :行號在自己欄位的最右方顯示,且加 0 ;327  -w  :行號欄位的佔用的位元數。328329  -----------------例子来自于鸟哥---------------------------330331  [root@linux ~]# nl -b a -n rz -w 3 /etc/issue332  001     Fedora Core release 4 (Stentz)333  002     Kernel /r on an /m334  003335  # 变成了仅有三位数的行号了...336337  nl 可以將輸出的檔案內容自動的加上行號!其結果與 cat -n 有點不太一樣,338  nl 可以將行號做比較多的顯示設計,包括位數與是否自動補齊 0339  等等的功能呢~340341  --------------------------------------------------------342343  .文件内容的翻页查看344345  more (一页一页的翻看文件)346347  常见的操作:348      (回车键)Enter    向下翻一行349      (空白键)space    向下翻一页350      /               向下查找 n 向下查找下一处351      q               退出352353354  --------------------------------------------------------355356  less (可以上下翻动,功能强大的文件浏览器)357358      * 空白鍵    :向下翻動一頁;359      * [pagedown]:向下翻動一頁;360      * [pageup]  :向上翻動一頁;361      * /字串     :向下搜尋『字串』的功能;362      * ?字串     :向上搜尋『字串』的功能;363      * n         :重複前一個搜尋 (與 / 或 ? 有關!)364      * N         :反向的重複前一個搜尋 (與 / 或 ? 有關!)365      * q         :離開 less 這個程式;366367  具体的功能请查看 man less 或 less -?/--help368369  --------------------------------------------------------370371  .取档案内容372      head, tail, awk, sed, grep373      后面的三种是专门的语言,会专门进行笔记。这里只是说明一下前两种的用法。374375  head (显示从文件头开始的前10行-默认)376377      用法:head [选项]... [文件]...378379      -c num      显示前<num>bytes的文件内容380      -n num      显示前<num>行381      -v/q        是否显示/不显示(默认)文件名382383  ------------------------例子------------------------------384  [zhengxh@hoverzg stdshell]$ head -q -n 5 test.c385  #include <stdio.h>386  #include <unistd.h>387388  int389  main(void)390  [zhengxh@hoverzg stdshell]$ head -v -n 5 test.c | nl391       1  ==> test.c <==392       2  #include <stdio.h>393       3  #include <unistd.h>394395       4  int396       5  main(void)397398  --------------------------------------------------------399400  tail (显示文件的最后10行-默认)401402      用法:tail [选项]... [文件]...403404      -c num/+num     显示前<num>bytes的文件内容/从<num>行开始显示后面的内容405      -n num/+num     显示前<num>行/从<num>开始显示后面的内容406      -v/q            是否显示/不显示(默认)文件名407408  --------------------------------------------------------409410  [zhengxh@hoverzg stdshell]$ head -n 3 test.c | nl -b a411       1  #include <stdio.h>412       2  #include <unistd.h>413       3414415  [zhengxh@hoverzg stdshell]$ tail -n +3 test.c | nl -b a416       1417       2  int418       3  main(void)419       4  {420       5          int i;421       6422       7          for(i=0; i<100; i++){423       8                  fprintf(stderr, "put %d/n", i);424       9                  sleep(1);425      10          }426      11          return ;427      12  }428  [zhengxh@hoverzg stdshell]$ tail -n 3 test.c | nl -b a429       1          }430       2          return ;431       3  }432433  --------------------------------------------------------434435  扩散:436437  .取第10行到20行的内容438  --------------------------------------------------------439440  [zhengxh@hoverzg stdshell]$ head -n 20 abs.txt | tail -n 10 | nl -b a441442  --------------------------------------------------------443444445  .按照不同编码显示文件内容446      主要命令有: od , vim(也可以在编辑器里面转变), hexdump447448  od (把文件内容用2进制的编码形式显示出来)449450      用法: od [OPTION]... [FILE]...451452     -t  :後面可以接各種『類型 (TYPE)』的輸出,例如:453        a       :利用預設的字元來輸出;454        c       :使用 ASCII 字元來輸出455        d[size] :利用十進位(decimal)來輸出資料,每個整數佔用 size bytes ;456        f[size] :利用浮點數值(floating)來輸出資料,每個數佔用 size bytes ;457        o[size] :利用八進位(octal)來輸出資料,每個整數佔用 size bytes ;458        x[size] :利用十六進位(hexadecimal)來輸出資料,每個整數佔用 size bytes ;459460    -a   same as -t a,  使用预设的字符输出461    -b   same as -t oC, 用八进制输出462    -c   same as -t c,  使用 ASCII 字符輸出463    -d   same as -t u2, select unsigned decimal shorts464    -f   same as -t fF, select floats465    -h   same as -t x2, select hexadecimal shorts466    -i   same as -t d2, select decimal shorts467    -l   same as -t d4, select decimal longs468    -o   same as -t o2, select octal shorts469    -x   same as -t x2, select hexadecimal shorts470471  --------------------------------------------------------472473  .建立新文件和修改文件时间474  touch (建立新文件和修改文件时间-mtime和atime)475      .建立新文件476      .修改文件的atime 和 mtime 两个时间477478  [root@linux ~]# touch [-acdmt] 檔案479  参数:480          -a  :仅仅修改 access time;481          -c  :仅修改時間,而不创建文件;482          -d  :后面可以接日期,也可以使用 --date="日期或时间"483          -m  :仅修改 mtime ;484          -t  :后面可以接时间,格式为[YYMMDDhhmm]485486  * modification time (mtime):该文件的内容最后的修改时间。487  * status time (ctime):        该文件的状态(访问权限、用户ID、链接数等)的修改时间。488  * access time (atime):        文件的最后访问时间。如 cat ~/.bashrc ,就更新 atime 了。489490  --------------------------------------------------------491492  [zhengxh@hoverzg stdshell]$ touch -t 200706151910 awkf493  [zhengxh@hoverzg stdshell]$ ls -l awkf494  -rw-r--r--  1 zhengxh cvs 95 2007-06-15  awkf495496  #注意我们系统默认显示的是mtime,也就是文件的内容最后改变的时间。497  #但在复制文件时,我们却无法复制文件的ctime。498499  [root@linux ~]# ls -l /etc/man.config500  -rw-r--r--  1 root root 4506 Apr  8 19:11 /etc/man.config501  [root@linux ~]# ls -l --time=atime /etc/man.config502  -rw-r--r--  1 root root 4506 Jul 19 17:53 /etc/man.config503  [root@linux ~]# ls -l --time=ctime /etc/man.config504  -rw-r--r--  1 root root 4506 Jun 25 08:28 /etc/man.config505506  --------------------------------------------------------507508  .文件和目录的权限操作509  umask, chattr/lsattr, chown, chmod,510511  umask (目前建立文件或目录的预设值)512      用法:   umask [-Sp]513          -S      以字符的形式打印出预设权限514          -p      以数字的形式打印出预设的权限515                  没有参数时数值形式打印预值516  注意:目录:预设的权限是777减去umask的值517        文件:预设的权限是777减去umask的预设值和每组的可执行权限值,518      即:每组的可执行位--x--x--x也就是文件的最大权限是666519      计算时,对于文件要先挖掉文件的可执行权限,再相减520       umask 為 003 ,所以拿掉的屬性為 --------wx,因此:521       对于文件要先挖掉可执行权限即: 002: (-rw-rw-rw-) - (--------wx) = -rw-rw-r--522       目錄: (drwxrwxrwx) - (--------wx) = drwxrwxr--523524  --------------------------------------------------------525526  #预设权限527  [zhengxh@hoverzg stdshell]$ umask528  0022529  [zhengxh@hoverzg stdshell]$ cat > ee530  adfa531532  #666和022(110-110-110)相减 (000-010-010)533  [zhengxh@hoverzg stdshell]$ ls -l ee534  -rw-r--r--  1 zhengxh cvs 5  6月 19 07:35 ee535  [zhengxh@hoverzg stdshell]$ ls -l eee536  -rw-rw-r--  1 zhengxh cvs 0  6月 19 07:36 eee537538  #重新设定预设值539  [zhengxh@hoverzg stdshell]$ umask 0002540  [zhengxh@hoverzg stdshell]$ mkdir ffff541  [zhengxh@hoverzg stdshell]$ ls -l | grep ffff542  drwxrwxr-x  2 zhengxh cvs       4096  6月 19 07:36 ffff543544  --------------------------------------------------------545546  chattr (修改文件的隐藏属性)547      用法: chattr [-RV] [-+=AacDdijsSu] [-v version] files...548      -R          改变其子目录的文件,符号文件会被忽略549      -v          显示出修改过程550      ---551      參數:552      +   :增加某一個特殊參數,其他原本存在參數則不動。553      -   :移除某一個特殊參數,其他原本存在參數則不動。554      =   :設定一定,且僅有後面接的參數555556      i  :对于一个文件:不能被刪除、改名、设定链接也无法写入或新添加内容557           对于系统文件安全性有很大的益处。558      a  :如果a属性被设定,这文件就只能增加内容,而不能刪除,只有 root559           才能設定這個屬性。560      A  :如果 A 这个属性,该文件(或目录)的存取時間 atime (access)561           将不可被修改,可避免例如手手提电脑容易有磁盘I/O 的错误发生!562      S  :如果S属性被设定,就类似sync 的功能!它会把内容同步写入磁盘中!563           可以有效避免文件内容的丢失。564      c  :這個屬性設定之後,將會自動的將此檔案『壓縮』,在讀取的時候將會自動解壓縮,565           但是在儲存的時候,將會先進行壓縮後再儲存(看來對於大檔案似乎蠻有用的!)566      d  :當dump(備份)程序被執行的時候,設定 d 屬性將可使該檔案(或目錄)不具有dump功能567      j  :當使用 ext3 這個檔案系統格式時,設定 j 屬性將會使檔案在寫入時先記錄在568           journal 中!但是當 filesystem 設定參數為 data=journalled 時,由於已經設定了569           日誌了,所以這個屬性無效!570      s  :當檔案設定了 s 參數時,他將會被完全的移除出這個硬碟空間。571      u  :與 s 相反的,當使用 u 來設定檔案時,則資料內容其實還存在磁碟中,572           可以使用來 undeletion.573      注意:這個屬性設定上面,比較常見的是 a 與 i 的設定值,而且很多設定值必須要身為574      root 才能夠設定的喔!575576  [root@linux ~]# cd /tmp577  [root@linux tmp]# touch attrtest578  [root@linux tmp]# chattr +i attrtest579  [root@linux tmp]# rm attrtest580  rm: remove write-protected regular empty file `attrtest'? y581  rm: cannot remove `attrtest': Operation not permitted582583  --------------------------------------------------------584585  lsattr (显示文件的隐藏属性)586      Usage: lsattr [-RVadlv] [files...]587588      -R      递归显示文件夹和子文件夹里的所有内容589      -a      显示文件夹里的所有文件包括.590      -d      显示目录,而不是显示内容591592593  --------------------------------------------------------594595  [zhengxh@hoverzg aa]$ lsattr -a596  ------------- ./cc.back597  ------------- ./bb598  ------------- ./bc.tar599600  [zhengxh@hoverzg aa]$ lsattr -R601  ------------- ./cc.back602  ------------- ./bb603604  ./bb:605  ------------- ./bb/test1606  ------------- ./bb/test2607  ------------- ./bb/cc608609  ./bb/cc:610  ------------- ./bb/cc/cc2611612  --------------------------------------------------------613614  chown (改变文件和目录的所有者)615  chgrp (改变文件和目录的组)616617  用法:chown [选项]... 所有者[:[组]] 文件...618    或:chown [选项]... :组 文件...619    或:chown [选项]... --reference=参考文件 文件...620621    -c, --changes          当文件所有者改变了显示出详细信息622    -f, --silent, --quiet  不输出错误消息623        --reference=RFILE  使用RFILE文件的模式作为目标模式而不是OWNER:GROUP的值624    -R                递归改变该目录及其子目录和这些目录下的文件的所有者和组所有者625626627628629  chmod (改变文件的属性)630631  用法:chmod [-cfvR]... [ugoa][+-=][rwxXst] 文件...632    或:chmod [-cfvR]... 八进制模式 文件...633    或:chmod [-cfvR]... --reference=参考文件 文件...634635    -c, --changes           当文件模式改变了显示出详细信息636    -f, --silent, --quiet   不输出错误信息637    -v, --verbose           显示改变的详细信息638        --reference=RFILE   使用RFILE文件的模式作为目标模式639    -R, --recursive         递归的改变文件和目录的属性640641642      * 4 为 SUID            :用户设置ID,把可执行文件的权限在执行时改成文件的所者643      * 2 为 SGID            :组设置ID644      * 1 为 Sticky bit      :对目录设置,只有对该目录有写权限的用户,并且(1),拥有该文件 (2),拥有此目录645                          (3),是超级用户 满足这三者之一时才能更名或删除该文件。646647  --------------------------------------------------------648649  drwxrwxrwt  61 root root 57344  6月 19 18:32 tmp650651  #设置用户组ID位652  [zhengxh@hoverzg stdshell]$ chmod u+s t1.sh653  [zhengxh@hoverzg stdshell]$ ls -l t1.sh654  -rwsrw-r--  1 zhengxh zhengxh 143  1月  6 11:02 t1.sh655  #设置粘着位656  [zhengxh@hoverzg stdshell]$ chmod a+t h1.sh657  [zhengxh@hoverzg stdshell]$ ls -l h1.sh658  -rwxrw-r-T  1 zhengxh zhengxh 75  4月 11 11:33 h1.sh659660  --------------------------------------------------------661662  .文件和目录查找命令663      file, which, whereis, find, locate, xargs664665  file (查看文件的格式)666      报告文件类型。667668  which (查看命令的位置)669      用法:   which [-a] [程序文件名1] [程序文件名2] [...]670              该指令会在PATH所列出的路径中,寻找后面列出的程序文件名。671      -a      会寻找包括alias在内的程序名672673  --------------------------------------------------------674675  [zhengxh@hoverzg ~]$ which -a ls pwd whoami hh676  alias ls='ls --color=tty'677          /bin/ls678  /bin/pwd679  /usr/bin/whoami680  /usr/bin/which: no hh in681  (/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin)682683  --------------------------------------------------------684685  whereis (查看程序的位置)686      用法:whereis [ -bmsu ] [ -BMS directory...  -f ] filename ...687         -b     只搜索二进制文件688         -m     只找在说明文件 manual路径下的文件689         -s     只寻找sources来源文件690         -u     没有说明文件的文件691692  --------------------------------------------------------693  [zhengxh@hoverzg ~]$ whereis -b ls694  ls: /bin/ls695  [zhengxh@hoverzg ~]$ whereis ls696  ls: /bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz697  [zhengxh@hoverzg ~]$698699  --------------------------------------------------------700701  locate (查询和搜索文件)702703    搜索用法:     locate [-qi] [-d <path>] [--database=<path>] <search string>...704                  locate [-r <regexp>] [--regexp=<regexp>]705  数据库用法:    locate [-qv] [-o <file>] [--output=<file>]706                  locate [-e <dir1,dir2,...>] [-f <fs_type1,...> ] [-l <level>]707                         [-c] <[-U <path>] [-u]>708    一般用法:     locate [-Vh] [--version] [--help]709710     -q                 - 不输出错误信息711     -i                 - 大小写敏感.712     -d                 - 说明locate数据库建立的路径713     -u                 - 创建从/开始的索引数据库714     -U <dir>           - 创建从<dir>开始的索引数据库715     -c                 - 解析原来locate的配置文件 '/etc/updatedb.conf'716                          当使用-u or -U 选项时,如果'updatedb'链接到locate则会自动使用该文件717     -e <dir1,dir2,...> - 使用-u和-U选项时从locate数据库中排除目录718     -f <fs_type1,...>  - 使用-u和-U选项时从locate数据库中排除文件系统类型(ie. NFS, etc)719     -r <regexp>        - 使用基本的正则表达式查询720     --regexp=<regexp>  - 使用标准正则表达式721722  --------------------------------------------------------723724  #使用正则表达式725  [zhengxh@hoverzg writemybook]$ locate -r "上海"726  /home/zhengxh/music/上海滩.mp3727728  #一次搜索多个文件729  [zhengxh@hoverzg music]$ locate -q "上海" "天空"730  /home/zhengxh/music/上海滩.mp3731  /home/zhengxh/music/classic/天空之城.mp3732  /home/zhengxh/music/hope/海阔天空.mp3733734735  --------------------------------------------------------736737  find (查找文件的位置)738      用法: find [PATH] [option] [-print -exec -ok]739740  选项[option]:741  1. 与时间有关的参数:742     -atime n :n 为数字,在 n 天之前的'一天之內'被 access 过的文件;743     -ctime n :n 为数字,在 n 天之前的『一天之內』被 change 过状态的文件;744     -mtime n :n 为数字,在 n 天之前的『一天之內』被 modification 过的文件;745     -newer file :比file 新的文件就输出746747  2. 与使用者或组名有关的参数:748     -uid n :n 为数字,這個數字是使用者的帳號 ID,亦即 UID ,這個 UID 是記錄在 /etc/passwd749     -gid n :n 为数字,這個數字是群組名稱的 ID,亦即 GID,這個 GID 記錄在 /etc/group750     -user name :name 为使用者帐号名称!例如 dmtsai751     -group name:name 为用户的组名,例如 users ;752     -nouser    :选找文件的拥有者不存在 /etc/passwd 的人!753     -nogroup   :选找文件的组名不存在 /etc/group 的文件!754755  3. 与文件权限及文件名有关的参数:756     -name filename:查询文件名为 filename 的文件;757     -size [+-]SIZE:查询比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有:758                     c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB759                     还要大的文件,就是『 -size +50k 』760     -type TYPE    :寻找类型为TYPE 的文件,类型主要有:一般文件 (f),761                     装置文件 (b, c), 目录 (d), 连接文件 (l), socket (s),762                     及 FIFO (p) 等。763     -perm mode  :查询文件的属性等于 mode 的文件,这个 mode 为类似 chmod764                   的属性值,例如, -rwsr-xr-x 的属性为 4755 !765     -perm -mode :查询文件的属性『必須要全部包括 mode 的属性为』的文件,例如,766                   要查询 -rwxr--r-- ,即 0744 的文件,使用 -perm -0744,767                   如果一个文件的属性为 -rwsr-xr-x ,即 4755 时,也会被列出來,768                   因为 -rwsr-xr-x 的已经包括了 -rwxr--r-- 的属性了。769     -perm +mode :查询文件的属性『包含任一 mode 的属性』的文件,例如,查询770                   -rwxr-xr-x ,亦即 -perm +755 时,但一个文件属性为-rw-------771                   也会被列出来,因为他有 -rw.... 的属性存在!772  4. 动作选项:773     -exec command :command 為其他指令,-exec 後面可再接額外的指令來處理搜尋到774                     的結果。775     -print        :將結果列印到螢幕上,這個動作是預設動作!776777  --------------------------------------------------------778779  範例:780  範例一:將過去系統上面 24 小時內有更動過內容 (mtime) 的檔案列出781  [root@linux ~]# find / -mtime 0782  # 那個 0 是重點!0 代表目前的時間,所以,從現在開始到 24 小時前,783  # 有變動過內容的檔案都會被列出來!那如果是三天前的 24 小時內?784  # find / -mtime 3 ,意思是說今天之前的 3*24 ~ 4*24 小時之間785  # 有變動過的檔案都被列出的意思!同時 -atime 與 -ctime 的用法相同。786787  範例二:尋找 /etc 底下的檔案,如果檔案日期比 /etc/passwd 新就列出788  [root@linux ~]# find /etc -newer /etc/passwd789  # -newer 用在分辨兩個檔案之間的新舊關係是很有用的!790791  範例三:搜尋 /home 底下屬於 dmtsai 的檔案792  [root@linux ~]# find /home -user dmtsai793  # 這個東西也很有用的~當我們要找出任何一個使用者在系統當中的所有檔案時,794  # 就可以利用這個指令將屬於某個使用者的所有檔案都找出來喔!795796  範例四:搜尋系統中不屬於任何人的檔案797  [root@linux ~]# find / -nouser798  # 透過這個指令,可以輕易的就找出那些不太正常的檔案。799  # 如果有找到不屬於系統任何人的檔案時,不要太緊張,800  # 那有時候是正常的~尤其是您曾經以原始碼自行編譯軟體時。801802  範例五:找出檔名為 passwd 這個檔案803  [root@linux ~]# find / -name passwd804  # 利用這個 -name 可以搜尋檔名啊!805806  範例六:搜尋檔案屬性為 f (一般檔案) 的檔案807  [root@linux ~]# find /home -type f808  # 這個 -type 的屬性也很有幫助喔!尤其是要找出那些怪異的檔案,809  # 例如 socket 與 FIFO 檔案,可以用 find /var -type p 或 -type s 來找!810811  範例七:搜尋檔案當中含有 SGID/SUID/SBIT 的屬性812  [root@linux ~]# find / -perm +7000813  # 所謂的 7000 就是 ---s--s--t ,那麼只要含有 s 或 t 的就列出,814  # 所以當然要使用 +7000 ,使用 -7000 表示要含有 ---s--s--t 的所有三個權限,815  # 因此,就是 +7000 ~瞭乎?816817  範例八:將上個範例找到的檔案使用 ls -l 列出來~818  [root@linux ~]# find / -perm +7000 -exec ls -l {} /;819  # 注意到,那個 -exec 後面的 ls -l 就是額外的指令,820  # 而那個 {} 代表的是『由 find 找到的內容』的意思~所以, -exec ls -l {}821  # 就是將前面找到的那些檔案以 ls -l 列出長的資料!至於 /; 則是表示822  # -exec 的指令到此為止的意思~意思是說,整個指令其實只有在823  # -exec (裡面就是指令下達) /;824  # 也就是說,-exec 最後一定要以 /; 結束才行!這樣瞭解了嗎?!825826  範例九:找出系統中,大於 1MB 的檔案827  [root@linux ~]# find / -size +1000k828  # 雖然在 man page 提到可以使用 M 與 G 分別代表 MB 與 GB,829  # 不過,俺卻試不出來這個功能~所以,目前應該是僅支援到 c 與 k 吧!830831  --------------------------------------------------------832833  xargs ()834      当使用find时,参数过长时可能会产生内存不足的问题。而用xargs则不会,因为它只读一部分。835      man xargs可以看出:836      xargs从标准输入中读取数据,并以空白和换行符分割每个参数(引号中的空白不作为分割符)。837  然后执行指定的命令(并把分解后的参数附加到命令后面)。     如果没有指定具体的命令,默认使用/bin/echo命令。838  如果没有特别指定,xargs会把`_'当作结束标志。839  综上所述,xargs不适合用作文本处理,特别是重要的数据处理。840  xargs处理标准输入,然后把处理过后的内存传给后续的命令作为参数。841  使用xargs的主要理由是控制参数的个数和位置,避免命令行过长而出现错误。842843844  --------------------------------------------------------845  #这样的话出现了错误846  [zhengxh@hoverzg music]$ find /home/zhengxh/music  -print | xargs file847  xargs: unmatched 单 quote; by default quotes are special to xargs unless you848  use the -0 option849850  #请使用tr -d851  [zhengxh@hoverzg music]$ find .  -print | tr -d "/"'"  | xargs file852  .:                                       directory853  ./月牙泉.mp3:                            MPEG ADTS, layer III, v1, 160 kBits,854  44.1 kHz, JntStereo855  ./pub1195955560195.mp3:                  MP3 file with ID3 version 2.3.0 tag856857858  --------------------------------------------------------
原创粉丝点击