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 --------------------------------------------------------