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 显示前bytes的文件内容
380 -n num 显示前行
381 -v/q 是否显示/不显示(默认)文件名
382
383 ------------------------例子------------------------------
384 [zhengxh@hoverzg stdshell]$ head -q -n 5 test.c
385 #include
386 #include
387
388 int
389 main(void)
390 [zhengxh@hoverzg stdshell]$ head -v -n 5 test.c | nl
391 1 ==> test.c <==
392 2 #include
393 3 #include
394
395 4 int
396 5 main(void)
397
398 --------------------------------------------------------
399
400 tail (显示文件的最后10行-默认)
401
402 用法:tail [选项]... [文件]...
403
404 -c num/+num 显示前bytes的文件内容/从行开始显示后面的内容
405 -n num/+num 显示前行/从开始显示后面的内容
406 -v/q 是否显示/不显示(默认)文件名
407
408 --------------------------------------------------------
409
410 [zhengxh@hoverzg stdshell]$ head -n 3 test.c | nl -b a
411 1 #include
412 2 #include
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 ] [--database=] ...
704 locate [-r ] [--regexp=]
705 数据库用法: locate [-qv] [-o ] [--output=]
706 locate [-e ] [-f ] [-l ]
707 [-c] ] [-u]>
708 一般用法: locate [-Vh] [--version] [--help]
709
710 -q - 不输出错误信息
711 -i - 大小写敏感.
712 -d - 说明locate数据库建立的路径
713 -u - 创建从/开始的索引数据库
714 -U
715 -c - 解析原来locate的配置文件 '/etc/updatedb.conf'
716 当使用-u or -U 选项时,如果'updatedb'链接到locate则会自动使用该文件
717 -e - 使用-u和-U选项时从locate数据库中排除目录
718 -f - 使用-u和-U选项时从locate数据库中排除文件系统类型(ie. NFS, etc)
719 -r - 使用基本的正则表达式查询
720 --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 --------------------------------------------------------