您的位置:首页 > 运维架构 > Linux

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

2008-06-21 10:36 561 查看
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 [选项]... [文件]...
100
101    -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                                 否则:根据访问时间排序
122
123    --full-time                显示完整的时间,包括年份
124    --color=[never,always,auto]   显示颜色的方式
125
126  --------------------------------------------------------
127  [zhengxh@hoverzg stdshell]$ ls -lF --full-time
128  总用量 1732
129  -rw-r--r--  1 zhengxh cvs         56 2008-06-04 13:51:35.000000000 +0800 22
130  -rw-r--r--  1 zhengxh cvs         30 2008-05-31 18:30:01.000000000 +0800 33
131  --------------------------------------------------------
132
133  cp, rm, mv (复制转移与删除)
134
135  cp (复制文件或目录)
136      将<来源>文件复制至<目的地>,或将多个<文件>复制至<目录>。
137      用法:cp [选项]... 来源 目的地
138          或:cp [选项]... 来源... 目录
139
140    -a, --archive                等於 -dpR
141    -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的效果一样,创建时要在目标目录下
152
153  --------------------------------------------------------
154  [zhengxh@hoverzg stdshell]$ ls -l
155  lrwxrwxrwx  1 zhengxh cvs          5  6月 14 10:44 md -> mydir
156
157  [zhengxh@hoverzg stdshell]$ cp -a md mytestdir/
158  [zhengxh@hoverzg stdshell]$ ls -F mytestdir/
159  md@
160
161  [zhengxh@hoverzg stdshell]$ cp -aL md mytestdir/
162  [zhengxh@hoverzg stdshell]$ cd mytestdir/
163  [zhengxh@hoverzg mytestdir]$ ls -F
164  md/
165
166  #可以看到开始没有加L参数之前,我们复制到mytestdir中的仅仅是一个符号链接。
167  而且一般这个符号链接由于路径改变所以已经没有意义。而加了L参数后,把整个
168  目录都复制过去了,目录名是符号链接的名字。
169
170  [zhengxh@hoverzg stdshell]$ ls -l
171  drwxrwxrw-  2 zhengxh cvs       4096  6月 14 11:20 ff
172  [zhengxh@hoverzg stdshell]$ cp -R ff mytestdir/
173  [zhengxh@hoverzg mytestdir]$ ls -l
174  drwxr-xr--  2 zhengxh cvs 4096  6月 15 10:20 ff
175
176  #请看上面的复制过来的目录时间和权限都改变了
177  #如果要保持它原来的属性,请加上-p选项。
178
179
180  #cp的其他用法
181  (1)cp /dev/cdrom xxxx.iso  将光盘做成iso文件
182
183  --------------------------------------------------------
184
185  rm (删除文件和目录)
186
187  用法:rm [选项]... 目录...
188    -f, --force           强制删除,不提示用户
189    -i, --interactive     在删除前要寻问用户
190    -r, -R, --recursive   轮训删除
191    -d, --directory       可以用来删除符号链接目录
192    --                    删除一个头是-的文件
193
194
195  --------------------------------------------------------
196  [zhengxh@hoverzg stdshell]$ rm -hh
197  rm:无效选项 -- h
198  请尝试执行‘rm --help’来获取更多信息。
199  [zhengxh@hoverzg stdshell]$ rm -- -hh
200  rm:是否删除一般文件‘-hh’? y
201
202  --------------------------------------------------------
203
204  mv (删除文件或更改目录/文件名)
205
206  用法:mv [选项]... 来源 目的地
207    或:mv [选项]... 来源... 目录
208
209    -f, --force           强制删除,不提示用户
210    -i, --interactive     在删除前要寻问用户
211    -u, --update          只在<来源>文件比目的地文件新,或目的地文件
212                                不存在时才会移动
213
214
215
216  rename  (批量文件名的更改)
217
218      rename [现有文件包含字符串] [更改后的字符串] [文件列表]
219
220  --------------------------------------------------------
221
222  #把所有.exe文件中的.exe的文件名字符串,改变成.out
223  [zhengxh@hoverzg stdshell]$ rename .exe .out *.exe
224
225  --------------------------------------------------------
226
227  .取得文件名或目录名
228
229  basename
230      basename [filename] [后缀字符串]
231
232  dirname
233
234      dirname [dirname] [取得父目录]
235
236
237  4, 文件内容查看
238
239      * cat  由第一行開始顯示檔案內容
240      * tac  從最後一行開始顯示,可以看出 tac 是 cat 的倒著寫!
241      * nl   顯示的時候,順道輸出行號!
242      * more 一頁一頁的顯示檔案內容
243      * less 與 more 類似,但是比 more 更好的是,他可以往前翻頁!
244      * head 只看頭幾行
245      * tail 只看尾巴幾行
246      * od   以二進位的方式讀取檔案內容!
247
248
249  cat (将文件内容或标准输入-,连续的输出到标准输出)
250
251  用法: cat [-AEnTv] [FILE]...
252
253    -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键为^I
260    -v, --show-nonprinting   显示非打印字符^和 M-, 除了LFD and TAB
261
262  --------------------------------------------------------
263
264  [zhengxh@hoverzg stdshell]$ cat -A file
265  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 file
278       1  rwxrwsrwx       gprs    512     GPRS
279       2  12345wxrwsrwx   gprs    512     zhengxh
280       3
281       4  adf
282       5  adf
283       6  a
284       7  fd
285       8
286       9  adfadsf
287      10
288  #可以看到多个空白行只显示了一个空白行
289
290  --------------------------------------------------------
291
292  tac (反向显示)
293
294    -r, --regex              按正则表达式作为分隔符,把内容反转
295    -s, --separator=STRING   使用STRING而不是默认的/n把内容反转
296
297
298  --------------------------------------------------------
299
300  [zhengxh@hoverzg stdshell]$ tac t
301  d
302  dfa
303  adfa
304  adf
305  this is a test
306  [zhengxh@hoverzg stdshell]$ cat t
307  this is a test
308  adf
309  adfa
310  dfa
311  d
312  --------------------------------------------------------
313
314  nl (给输出的文件内容加上行号)
315      nl 可以对行号进行比较多的样式的设计,包括:
316      (1) 行号的位数
317      (2) 行号的补零设计
318
319  參數:
320  -b  :指定行號指定的方式,主要有兩種:
321        -b a :表示不論是否為空行,也同樣列出行號;
322        -b t :(默认)如果有空行,空的那一行不要列出行号;
323  -n  :列出行號表示的方法,主要有三種:
324        -n ln :行號在螢幕的最左方顯示;
325        -n rn :行號在自己欄位的最右方顯示,且不加 0 ;
326        -n rz :行號在自己欄位的最右方顯示,且加 0 ;
327  -w  :行號欄位的佔用的位元數。
328
329  -----------------例子来自于鸟哥---------------------------
330
331  [root@linux ~]# nl -b a -n rz -w 3 /etc/issue
332  001     Fedora Core release 4 (Stentz)
333  002     Kernel /r on an /m
334  003
335  # 变成了仅有三位数的行号了...
336
337  nl 可以將輸出的檔案內容自動的加上行號!其結果與 cat -n 有點不太一樣,
338  nl 可以將行號做比較多的顯示設計,包括位數與是否自動補齊 0
339  等等的功能呢~
340
341  --------------------------------------------------------
342
343  .文件内容的翻页查看
344
345  more (一页一页的翻看文件)
346
347  常见的操作:
348      (回车键)Enter    向下翻一行
349      (空白键)space    向下翻一页
350      /               向下查找 n 向下查找下一处
351      q               退出
352
353
354  --------------------------------------------------------
355
356  less (可以上下翻动,功能强大的文件浏览器)
357
358      * 空白鍵    :向下翻動一頁;
359      * [pagedown]:向下翻動一頁;
360      * [pageup]  :向上翻動一頁;
361      * /字串     :向下搜尋『字串』的功能;
362      * ?字串     :向上搜尋『字串』的功能;
363      * n         :重複前一個搜尋 (與 / 或 ? 有關!)
364      * N         :反向的重複前一個搜尋 (與 / 或 ? 有關!)
365      * q         :離開 less 這個程式;
366
367  具体的功能请查看 man less 或 less -?/--help
368
369  --------------------------------------------------------
370
371  .取档案内容
372      head, tail, awk, sed, grep
373      后面的三种是专门的语言,会专门进行笔记。这里只是说明一下前两种的用法。
374
375  head (显示从文件头开始的前10行-默认)
376
377      用法:head [选项]... [文件]...
378
379      -c num      显示前<num>bytes的文件内容
380      -n num      显示前<num>行
381      -v/q        是否显示/不显示(默认)文件名
382
383  ------------------------例子------------------------------
384  [zhengxh@hoverzg stdshell]$ head -q -n 5 test.c
385  #include <stdio.h>
386  #include <unistd.h>
387
388  int
389  main(void)
390  [zhengxh@hoverzg stdshell]$ head -v -n 5 test.c | nl
391       1  ==> test.c <==
392       2  #include <stdio.h>
393       3  #include <unistd.h>
394
395       4  int
396       5  main(void)
397
398  --------------------------------------------------------
399
400  tail (显示文件的最后10行-默认)
401
402      用法:tail [选项]... [文件]...
403
404      -c num/+num     显示前<num>bytes的文件内容/从<num>行开始显示后面的内容
405      -n num/+num     显示前<num>行/从<num>开始显示后面的内容
406      -v/q            是否显示/不显示(默认)文件名
407
408  --------------------------------------------------------
409
410  [zhengxh@hoverzg stdshell]$ head -n 3 test.c | nl -b a
411       1  #include <stdio.h>
412       2  #include <unistd.h>
413       3
414
415  [zhengxh@hoverzg stdshell]$ tail -n +3 test.c | nl -b a
416       1
417       2  int
418       3  main(void)
419       4  {
420       5          int i;
421       6
422       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 a
429       1          }
430       2          return ;
431       3  }
432
433  --------------------------------------------------------
434
435  扩散:
436
437  .取第10行到20行的内容
438  --------------------------------------------------------
439
440  [zhengxh@hoverzg stdshell]$ head -n 20 abs.txt | tail -n 10 | nl -b a
441
442  --------------------------------------------------------
443
444
445  .按照不同编码显示文件内容
446      主要命令有: od , vim(也可以在编辑器里面转变), hexdump
447
448  od (把文件内容用2进制的编码形式显示出来)
449
450      用法: od [OPTION]... [FILE]...
451
452     -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 ;
459
460    -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 shorts
464    -f   same as -t fF, select floats
465    -h   same as -t x2, select hexadecimal shorts
466    -i   same as -t d2, select decimal shorts
467    -l   same as -t d4, select decimal longs
468    -o   same as -t o2, select octal shorts
469    -x   same as -t x2, select hexadecimal shorts
470
471  --------------------------------------------------------
472
473  .建立新文件和修改文件时间
474  touch (建立新文件和修改文件时间-mtime和atime)
475      .建立新文件
476      .修改文件的atime 和 mtime 两个时间
477
478  [root@linux ~]# touch [-acdmt] 檔案
479  参数:
480          -a  :仅仅修改 access time;
481          -c  :仅修改時間,而不创建文件;
482          -d  :后面可以接日期,也可以使用 --date="日期或时间"
483          -m  :仅修改 mtime ;
484          -t  :后面可以接时间,格式为[YYMMDDhhmm]
485
486  * modification time (mtime):该文件的内容最后的修改时间。
487  * status time (ctime):        该文件的状态(访问权限、用户ID、链接数等)的修改时间。
488  * access time (atime):        文件的最后访问时间。如 cat ~/.bashrc ,就更新 atime 了。
489
490  --------------------------------------------------------
491
492  [zhengxh@hoverzg stdshell]$ touch -t 200706151910 awkf
493  [zhengxh@hoverzg stdshell]$ ls -l awkf
494  -rw-r--r--  1 zhengxh cvs 95 2007-06-15  awkf
495
496  #注意我们系统默认显示的是mtime,也就是文件的内容最后改变的时间。
497  #但在复制文件时,我们却无法复制文件的ctime。
498
499  [root@linux ~]# ls -l /etc/man.config
500  -rw-r--r--  1 root root 4506 Apr  8 19:11 /etc/man.config
501  [root@linux ~]# ls -l --time=atime /etc/man.config
502  -rw-r--r--  1 root root 4506 Jul 19 17:53 /etc/man.config
503  [root@linux ~]# ls -l --time=ctime /etc/man.config
504  -rw-r--r--  1 root root 4506 Jun 25 08:28 /etc/man.config
505
506  --------------------------------------------------------
507
508  .文件和目录的权限操作
509  umask, chattr/lsattr, chown, chmod,
510
511  umask (目前建立文件或目录的预设值)
512      用法:   umask [-Sp]
513          -S      以字符的形式打印出预设权限
514          -p      以数字的形式打印出预设的权限
515                  没有参数时数值形式打印预值
516  注意:目录:预设的权限是777减去umask的值
517        文件:预设的权限是777减去umask的预设值和每组的可执行权限值,
518      即:每组的可执行位--x--x--x也就是文件的最大权限是666
519      计算时,对于文件要先挖掉文件的可执行权限,再相减
520       umask 為 003 ,所以拿掉的屬性為 --------wx,因此:
521       对于文件要先挖掉可执行权限即: 002: (-rw-rw-rw-) - (--------wx) = -rw-rw-r--
522       目錄: (drwxrwxrwx) - (--------wx) = drwxrwxr--
523
524  --------------------------------------------------------
525
526  #预设权限
527  [zhengxh@hoverzg stdshell]$ umask
528  0022
529  [zhengxh@hoverzg stdshell]$ cat > ee
530  adfa
531
532  #666和022(110-110-110)相减 (000-010-010)
533  [zhengxh@hoverzg stdshell]$ ls -l ee
534  -rw-r--r--  1 zhengxh cvs 5  6月 19 07:35 ee
535  [zhengxh@hoverzg stdshell]$ ls -l eee
536  -rw-rw-r--  1 zhengxh cvs 0  6月 19 07:36 eee
537
538  #重新设定预设值
539  [zhengxh@hoverzg stdshell]$ umask 0002
540  [zhengxh@hoverzg stdshell]$ mkdir ffff
541  [zhengxh@hoverzg stdshell]$ ls -l | grep ffff
542  drwxrwxr-x  2 zhengxh cvs       4096  6月 19 07:36 ffff
543
544  --------------------------------------------------------
545
546  chattr (修改文件的隐藏属性)
547      用法: chattr [-RV] [-+=AacDdijsSu] [-v version] files...
548      -R          改变其子目录的文件,符号文件会被忽略
549      -v          显示出修改过程
550      ---
551      參數:
552      +   :增加某一個特殊參數,其他原本存在參數則不動。
553      -   :移除某一個特殊參數,其他原本存在參數則不動。
554      =   :設定一定,且僅有後面接的參數
555
556      i  :对于一个文件:不能被刪除、改名、设定链接也无法写入或新添加内容
557           对于系统文件安全性有很大的益处。
558      a  :如果a属性被设定,这文件就只能增加内容,而不能刪除,只有 root
559           才能設定這個屬性。
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 才能夠設定的喔!
575
576  [root@linux ~]# cd /tmp
577  [root@linux tmp]# touch attrtest
578  [root@linux tmp]# chattr +i attrtest
579  [root@linux tmp]# rm attrtest
580  rm: remove write-protected regular empty file `attrtest'? y
581  rm: cannot remove `attrtest': Operation not permitted
582
583  --------------------------------------------------------
584
585  lsattr (显示文件的隐藏属性)
586      Usage: lsattr [-RVadlv] [files...]
587
588      -R      递归显示文件夹和子文件夹里的所有内容
589      -a      显示文件夹里的所有文件包括.
590      -d      显示目录,而不是显示内容
591
592
593  --------------------------------------------------------
594
595  [zhengxh@hoverzg aa]$ lsattr -a
596  ------------- ./cc.back
597  ------------- ./bb
598  ------------- ./bc.tar
599
600  [zhengxh@hoverzg aa]$ lsattr -R
601  ------------- ./cc.back
602  ------------- ./bb
603
604  ./bb:
605  ------------- ./bb/test1
606  ------------- ./bb/test2
607  ------------- ./bb/cc
608
609  ./bb/cc:
610  ------------- ./bb/cc/cc2
611
612  --------------------------------------------------------
613
614  chown (改变文件和目录的所有者)
615  chgrp (改变文件和目录的组)
616
617  用法:chown [选项]... 所有者[:[组]] 文件...
618    或:chown [选项]... :组 文件...
619    或:chown [选项]... --reference=参考文件 文件...
620
621    -c, --changes          当文件所有者改变了显示出详细信息
622    -f, --silent, --quiet  不输出错误消息
623        --reference=RFILE  使用RFILE文件的模式作为目标模式而不是OWNER:GROUP的值
624    -R                递归改变该目录及其子目录和这些目录下的文件的所有者和组所有者
625
626
627
628
629  chmod (改变文件的属性)
630
631  用法:chmod [-cfvR]... [ugoa][+-=][rwxXst] 文件...
632    或:chmod [-cfvR]... 八进制模式 文件...
633    或:chmod [-cfvR]... --reference=参考文件 文件...
634
635    -c, --changes           当文件模式改变了显示出详细信息
636    -f, --silent, --quiet   不输出错误信息
637    -v, --verbose           显示改变的详细信息
638        --reference=RFILE   使用RFILE文件的模式作为目标模式
639    -R, --recursive         递归的改变文件和目录的属性
640
641
642      * 4 为 SUID            :用户设置ID,把可执行文件的权限在执行时改成文件的所者
643      * 2 为 SGID            :组设置ID
644      * 1 为 Sticky bit      :对目录设置,只有对该目录有写权限的用户,并且(1),拥有该文件 (2),拥有此目录
645                          (3),是超级用户 满足这三者之一时才能更名或删除该文件。
646
647  --------------------------------------------------------
648
649  drwxrwxrwt  61 root root 57344  6月 19 18:32 tmp
650
651  #设置用户组ID位
652  [zhengxh@hoverzg stdshell]$ chmod u+s t1.sh
653  [zhengxh@hoverzg stdshell]$ ls -l t1.sh
654  -rwsrw-r--  1 zhengxh zhengxh 143  1月  6 11:02 t1.sh
655  #设置粘着位
656  [zhengxh@hoverzg stdshell]$ chmod a+t h1.sh
657  [zhengxh@hoverzg stdshell]$ ls -l h1.sh
658  -rwxrw-r-T  1 zhengxh zhengxh 75  4月 11 11:33 h1.sh
659
660  --------------------------------------------------------
661
662  .文件和目录查找命令
663      file, which, whereis, find, locate, xargs
664
665  file (查看文件的格式)
666      报告文件类型。
667
668  which (查看命令的位置)
669      用法:   which [-a] [程序文件名1] [程序文件名2] [...]
670              该指令会在PATH所列出的路径中,寻找后面列出的程序文件名。
671      -a      会寻找包括alias在内的程序名
672
673  --------------------------------------------------------
674
675  [zhengxh@hoverzg ~]$ which -a ls pwd whoami hh
676  alias ls='ls --color=tty'
677          /bin/ls
678  /bin/pwd
679  /usr/bin/whoami
680  /usr/bin/which: no hh in
681  (/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin)
682
683  --------------------------------------------------------
684
685  whereis (查看程序的位置)
686      用法:whereis [ -bmsu ] [ -BMS directory...  -f ] filename ...
687         -b     只搜索二进制文件
688         -m     只找在说明文件 manual路径下的文件
689         -s     只寻找sources来源文件
690         -u     没有说明文件的文件
691
692  --------------------------------------------------------
693  [zhengxh@hoverzg ~]$ whereis -b ls
694  ls: /bin/ls
695  [zhengxh@hoverzg ~]$ whereis ls
696  ls: /bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz
697  [zhengxh@hoverzg ~]$
698
699  --------------------------------------------------------
700
701  locate (查询和搜索文件)
702
703    搜索用法:     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]
709
710     -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>  - 使用标准正则表达式
721
722  --------------------------------------------------------
723
724  #使用正则表达式
725  [zhengxh@hoverzg writemybook]$ locate -r "上海"
726  /home/zhengxh/music/上海滩.mp3
727
728  #一次搜索多个文件
729  [zhengxh@hoverzg music]$ locate -q "上海" "天空"
730  /home/zhengxh/music/上海滩.mp3
731  /home/zhengxh/music/classic/天空之城.mp3
732  /home/zhengxh/music/hope/海阔天空.mp3
733
734
735  --------------------------------------------------------
736
737  find (查找文件的位置)
738      用法: find [PATH] [option] [-print -exec -ok]
739
740  选项[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 新的文件就输出
746
747  2. 与使用者或组名有关的参数:
748     -uid n :n 为数字,這個數字是使用者的帳號 ID,亦即 UID ,這個 UID 是記錄在 /etc/passwd
749     -gid n :n 为数字,這個數字是群組名稱的 ID,亦即 GID,這個 GID 記錄在 /etc/group
750     -user name :name 为使用者帐号名称!例如 dmtsai
751     -group name:name 为用户的组名,例如 users ;
752     -nouser    :选找文件的拥有者不存在 /etc/passwd 的人!
753     -nogroup   :选找文件的组名不存在 /etc/group 的文件!
754
755  3. 与文件权限及文件名有关的参数:
756     -name filename:查询文件名为 filename 的文件;
757     -size [+-]SIZE:查询比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有:
758                     c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB
759                     还要大的文件,就是『 -size +50k 』
760     -type TYPE    :寻找类型为TYPE 的文件,类型主要有:一般文件 (f),
761                     装置文件 (b, c), 目录 (d), 连接文件 (l), socket (s),
762                     及 FIFO (p) 等。
763     -perm mode  :查询文件的属性等于 mode 的文件,这个 mode 为类似 chmod
764                   的属性值,例如, -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        :將結果列印到螢幕上,這個動作是預設動作!
776
777  --------------------------------------------------------
778
779  範例:
780  範例一:將過去系統上面 24 小時內有更動過內容 (mtime) 的檔案列出
781  [root@linux ~]# find / -mtime 0
782  # 那個 0 是重點!0 代表目前的時間,所以,從現在開始到 24 小時前,
783  # 有變動過內容的檔案都會被列出來!那如果是三天前的 24 小時內?
784  # find / -mtime 3 ,意思是說今天之前的 3*24 ~ 4*24 小時之間
785  # 有變動過的檔案都被列出的意思!同時 -atime 與 -ctime 的用法相同。
786
787  範例二:尋找 /etc 底下的檔案,如果檔案日期比 /etc/passwd 新就列出
788  [root@linux ~]# find /etc -newer /etc/passwd
789  # -newer 用在分辨兩個檔案之間的新舊關係是很有用的!
790
791  範例三:搜尋 /home 底下屬於 dmtsai 的檔案
792  [root@linux ~]# find /home -user dmtsai
793  # 這個東西也很有用的~當我們要找出任何一個使用者在系統當中的所有檔案時,
794  # 就可以利用這個指令將屬於某個使用者的所有檔案都找出來喔!
795
796  範例四:搜尋系統中不屬於任何人的檔案
797  [root@linux ~]# find / -nouser
798  # 透過這個指令,可以輕易的就找出那些不太正常的檔案。
799  # 如果有找到不屬於系統任何人的檔案時,不要太緊張,
800  # 那有時候是正常的~尤其是您曾經以原始碼自行編譯軟體時。
801
802  範例五:找出檔名為 passwd 這個檔案
803  [root@linux ~]# find / -name passwd
804  # 利用這個 -name 可以搜尋檔名啊!
805
806  範例六:搜尋檔案屬性為 f (一般檔案) 的檔案
807  [root@linux ~]# find /home -type f
808  # 這個 -type 的屬性也很有幫助喔!尤其是要找出那些怪異的檔案,
809  # 例如 socket 與 FIFO 檔案,可以用 find /var -type p 或 -type s 來找!
810
811  範例七:搜尋檔案當中含有 SGID/SUID/SBIT 的屬性
812  [root@linux ~]# find / -perm +7000
813  # 所謂的 7000 就是 ---s--s--t ,那麼只要含有 s 或 t 的就列出,
814  # 所以當然要使用 +7000 ,使用 -7000 表示要含有 ---s--s--t 的所有三個權限,
815  # 因此,就是 +7000 ~瞭乎?
816
817  範例八:將上個範例找到的檔案使用 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 最後一定要以 /; 結束才行!這樣瞭解了嗎?!
825
826  範例九:找出系統中,大於 1MB 的檔案
827  [root@linux ~]# find / -size +1000k
828  # 雖然在 man page 提到可以使用 M 與 G 分別代表 MB 與 GB,
829  # 不過,俺卻試不出來這個功能~所以,目前應該是僅支援到 c 與 k 吧!
830
831  --------------------------------------------------------
832
833  xargs ()
834      当使用find时,参数过长时可能会产生内存不足的问题。而用xargs则不会,因为它只读一部分。
835      man xargs可以看出:
836      xargs从标准输入中读取数据,并以空白和换行符分割每个参数(引号中的空白不作为分割符)。
837  然后执行指定的命令(并把分解后的参数附加到命令后面)。
如果没有指定具体的命令,默认使用/bin/echo命令。
838  如果没有特别指定,xargs会把`_'当作结束标志。
839  综上所述,xargs不适合用作文本处理,特别是重要的数据处理。
840  xargs处理标准输入,然后把处理过后的内存传给后续的命令作为参数。
841  使用xargs的主要理由是控制参数的个数和位置,避免命令行过长而出现错误。
842
843
844  --------------------------------------------------------
845  #这样的话出现了错误
846  [zhengxh@hoverzg music]$ find /home/zhengxh/music  -print | xargs file
847  xargs: unmatched 单 quote; by default quotes are special to xargs unless you
848  use the -0 option
849
850  #请使用tr -d
851  [zhengxh@hoverzg music]$ find .  -print | tr -d "/"'"  | xargs file
852  .:                                       directory
853  ./月牙泉.mp3:                            MPEG ADTS, layer III, v1, 160 kBits,
854  44.1 kHz, JntStereo
855  ./pub1195955560195.mp3:                  MP3 file with ID3 version 2.3.0 tag
856
857
858  --------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: