【N25第二周作業】Linux文件管理命令以及文件名通配glob

1、Linux下的文件管理類命令使用方法和示例

Linux下的文件管理類命令有如下列舉的一些:

目錄管理命令:cd,pwd,ls,mkdir,rmdir,tree
文件管理命令:touch,cp,mv,rm,stat
查看:more,less,head,tail,cat,tac,lsattr,whereis,which
權限:chmod,chown,chattr,umask
其他:ln,tee,locate
編輯:vi,vim

cd:目錄切換命令

[root@localhost ~]# cd /etc    #切換到/etc目錄下
[root@localhost etc]#cd -      #返回切換到/etc之前所在的目錄
/root

[root@localhost ~]# cd ../     #返回上一層目錄
[root@localhost /]# 

[root@localhost /]# cd         #切換到用戶家目錄
[root@localhost ~]#
[root@localhost ~]# cd /       
[root@localhost /]# cd ~       #切換到用戶家目錄
[root@localhost ~]#

[root@localhost ~]# cd /etc/sysconfig/
[root@localhost sysconfig]# cd ../../   #返回上上層目錄
[root@localhost /]#

pwd:顯示當前目錄

-L, –logical:顯示當前目錄
-P, –physical:顯示當前目錄的實際物理地址
–help 幫助
–version 版本

準備環境:將/var/spool/mail 連接到/data/mail下

[root@localhost data]# ln -sv /var/spool/mail/ /data/mail  
‘/data/mail’ -> ‘/var/spool/mail/’
[root@localhost data]# ll
total 0
lrwxrwxrwx. 1 root root 16 Dec 10 07:32 mail -> /var/spool/mail/

[root@localhost data]# cd mail/
[root@localhost mail]# pwd          #顯示當前目錄
/data/mail
[root@localhost mail]# pwd -P       #目錄是軟連接,顯示實際的物理地址
/var/spool/mail
[root@localhost mail]# pwd -L       #-L顯示,邏輯地址
/data/mail

ls:顯示目錄下的文件信息

用法:ls [選項]… [文件]…

-a, –all 不隱藏任何以. 開始的項目
-A, –almost-all 列出除. 及.. 以外的任何項目
–author 與-l 同時使用時列出每個文件的作者
-b, –escape 以八進制溢出序列表示不可打印的字符
-C 每欄由上至下列出項目
-d, –directory 當遇到目錄時列出目錄本身而非目錄內的文件
-G, –no-group 以一個長列表的形式,不輸出組名
-i, –inode 顯示每個文件的inode 號
-l 使用較長格式列出信息
-h, –human-readable 與-l 一起,以易于閱讀的格式輸出文件大小 -r, –reverse 逆序排列
-R, –recursive 遞歸顯示子目錄
-s, –size 以塊數形式顯示每個文件分配的尺寸
-S 根據文件大小排序
-t 根據修改時間排序
-T, –tabsize=寬度 指定制表符(Tab)的寬度,而非8 個字符
-t sort by modification time, newest first
-T, –tabsize=COLS assume tab stops at each COLS instead of 8
-u 同-lt 一起使用:按照訪問時間排序并顯示
同-l一起使用:顯示訪問時間并按文件名排序
其他:按照訪問時間排序
-U 不進行排序;按照目錄順序列出項目
-v 在文本中進行數字(版本)的自然排序
-w, –width=COLS 自行指定螢幕寬度而不使用目前的數值
-x 逐行列出項目而不是逐欄列出
-X 根據擴展名排序
-1 每行只列出一個文件
–help 顯示此幫助信息并退出
–version 顯示版本信息并退出

[root@localhost data]# ls
a  mail
[root@localhost data]# ls -l    #顯示目錄下文件和目錄的詳細信息
total 0
-rw-r--r--. 1 root root  0 Nov  1 06:05 a
lrwxrwxrwx. 1 root root 16 Dec 10 07:32 mail -> /var/spool/mail/
[root@localhost data]# ll
total 0
-rw-r--r--. 1 root root  0 Nov  1 06:05 a
lrwxrwxrwx. 1 root root 16 Dec 10 07:32 mail -> /var/spool/mail/

[root@localhost data]# ls -a   #顯示所有文件包括隱藏文件和隱藏目錄
.  ..  a  .abc  mail  .ssh
[root@localhost data]# ls -A   #除去.和..不顯示的其他文件
a  .abc  mail  .ssh
[root@localhost data]# ls -A -1    #每行只顯示一個文件或者目錄
a
.abc
mail
.ssh
[root@localhost data]# ls -lh /etc/ssh/       #不以字節顯示
total 276K
-rw-r--r--. 1 root root     237K Nov 20  2015 moduli
-rw-r--r--. 1 root root     2.2K Nov 20  2015 ssh_config
-rw-------. 1 root root     4.3K Nov 20  2015 sshd_config
-rw-r-----. 1 root ssh_keys  227 Nov  1 03:53 ssh_host_ecdsa_key
-rw-r--r--. 1 root root      162 Nov  1 03:53 ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys  387 Nov  1 03:53 ssh_host_ed25519_key
-rw-r--r--. 1 root root       82 Nov  1 03:53 ssh_host_ed25519_key.pub
-rw-r-----. 1 root ssh_keys 1.7K Nov  1 03:53 ssh_host_rsa_key
-rw-r--r--. 1 root root      382 Nov  1 03:53 ssh_host_rsa_key.pub

mkdir:創建目錄

用法:mkdir [選項] 目錄名 (如不存在則創建)

長選項必須使用的參數對于短選項時也是必需使用的。
-m, –mode=模式 設置權限模式(類似chmod),而不是rwxrwxrwx 減umask
-p, –parents 遞歸創建目錄,但即使這些目錄已存在也不當作錯誤處理
-v, –verbose 每次創建新目錄都顯示信息
-Z, –context=CTX 將每個創建的目錄的SELinux 安全環境設置為CTX
–help 顯示此幫助信息并退出
–version 顯示版本信息并退出

[root@localhost test]# mkdir test         #創建test目錄
[root@localhost test]# ls
test
[root@localhost test]# mkdir test         #有test目錄再創建時會提示失敗
mkdir: cannot create directory ‘test’: File exists

[root@localhost test]# mkdir -v  test1    #顯示創建過程
mkdir: created directory ‘test1’

[root@localhost test]# ll
total 0
drwxr-xr-x. 2 root root 6 Dec 10 08:25 test
drwxr-xr-x. 2 root root 6 Dec 10 08:25 test1
[root@localhost test]# mkdir -m a=rw test2    #創建指定屬性的目錄
[root@localhost test]# ll
total 0
drwxr-xr-x. 2 root root 6 Dec 10 08:25 test
drwxr-xr-x. 2 root root 6 Dec 10 08:25 test1
drw-rw-rw-. 2 root root 6 Dec 10 08:26 test2

[root@localhost test]# mkdir -p test3/test4  #遞歸創建目錄
[root@localhost test]# tree test3
test3
└── test4
1 directory, 0 files

#遞歸創建,并且可以同時創建多個子目錄
[root@localhost test]# mkdir -pv test5/{test6,test7,test8}
mkdir: created directory ‘test5’
mkdir: created directory ‘test5/test6’
mkdir: created directory ‘test5/test7’
mkdir: created directory ‘test5/test8’

rmdir:刪除指定目錄

-p, –parents 遞歸刪除
-v, –verbose 輸出處理的目錄詳情
–help 顯示此幫助信息并退出
–version 顯示版本信息并退出

[root@localhost test]# tree ./
./
├── test
├── test1
├── test2
├── test3
│   └── test4
└── test5
    ├── test6
    ├── test7
    └── test8
9 directories, 0 files
[root@localhost test]# rmdir test     
[root@localhost test]# rmdir test3    #不能直接刪除目錄下包含文件的目錄
rmdir: failed to remove ‘test3’: Directory not empty
[root@localhost test]# rmdir -p test3
rmdir: failed to remove ‘test3’: Directory not empty
[root@localhost test]# rmdir -p test3/test4/

[root@localhost test]# rmdir -pv test5/*  遞歸刪除并顯示
rmdir: removing directory, ‘test5/test6’
rmdir: removing directory, ‘test5’
rmdir: failed to remove directory ‘test5’: Directory not empty
rmdir: removing directory, ‘test5/test7’
rmdir: removing directory, ‘test5’
rmdir: failed to remove directory ‘test5’: Directory not empty
rmdir: removing directory, ‘test5/test8’
rmdir: removing directory, ‘test5’

tree:列出目錄的層級結構

參數:

-a 顯示所有文件和目錄。
-A 使用ASNI繪圖字符顯示樹狀圖而非以ASCII字符組合。
-C 在文件和目錄清單加上色彩,便于區分各種類型。
-d 顯示目錄名稱而非內容。
-D 列出文件或目錄的更改時間。
-f 在每個文件或目錄之前,顯示完整的相對路徑名稱。
-F 在執行文件,目錄,Socket,符號連接,管道名稱名稱,各自加上"*","/","=","@","|"號。
-g 列出文件或目錄的所屬群組名稱,沒有對應的名稱時,則顯示群組識別碼。
-i 不以階梯狀列出文件或目錄名稱。
-I 不顯示符合范本樣式的文件或目錄名稱。
-l 如遇到性質為符號連接的目錄,直接列出該連接所指向的原始目錄。
-L 層級顯示
-n 不在文件和目錄清單加上色彩。
-N 直接列出文件和目錄名稱,包括控制字符。
-p 列出權限標示。
-P 只顯示符合范本樣式的文件或目錄名稱。
-q 用"?"號取代控制字符,列出文件和目錄名稱。
-s 列出文件或目錄大小。
-t 用文件和目錄的更改時間排序。
-u 列出文件或目錄的擁有者名稱,沒有對應的名稱時,則顯示用戶識別碼。
-x 將范圍局限在現行的文件系統中,若指定目錄下的某些子目錄,其存放于另一個文件系統上,則將該子目錄予以排除在尋找范圍外

[root@localhost test]# tree
.
├── test1
├── test2
└── test3
    ├── test4
    │?? └── test6.sh
    └── test5

5 directories, 1 file
[root@localhost test]# tree -a         #顯示所有文件和目錄
.
├── test1
├── test2
├── test3
│?? ├── test4
│?? │?? └── test6.sh
│?? └── test5
└── .test6

6 directories, 1 file
[root@localhost test]# tree -d      #只顯示文件
.
├── test1
├── test2
└── test3
    ├── test4
    └── test5

5 directories

touch:創建文件

用法:touch [選項]… 文件…
將每個文件的訪問時間和修改時間改為當前時間。
不存在的文件將會被創建為空文件,除非使用-c 或-h 選項。
如果文件名為"-"則特殊處理,更改與標準輸出相關的文件的訪問時間。

長選項必須使用的參數對于短選項時也是必需使用的。

-a 只更改訪問時間
-c, –no-create 不創建任何文件
-d, –date=字符串 使用指定字符串表示時間替代當前時間
-f (忽略)
-h, –no-dereference 會影響符號鏈接本身,替代符號鏈接所指示的目的地
(當系統支持更改符號鏈接的所有者時,此選項才有用)
-m 只更改修改時間
-r, –reference=文件 使用指定文件的時間屬性替代當前時間
-t STAMP 使用[[CC]YY]MMDDhhmm[.ss] 格式的時間替代當前時間
–time=WORD 使用WORD 指定的時間:access、atime、use 都等于-a
選項的效果,而modify、mtime 等于-m 選項的效果
–help 顯示此幫助信息并退出
–version 顯示版本信息并退出

請注意,-d 和-t 選項可接受不同的時間/日期格式。

[root@localhost test4]# date
Sun Dec 11 22:59:52 CST 2016
[root@localhost test4]# ll
total 0
-rw-r--r--. 1 root root 0 Dec 11 22:52 test6.sh
[root@localhost test4]# touch test6.sh      #修改最近訪問時間
[root@localhost test4]# ll
total 0
-rw-r--r--. 1 root root 0 Dec 11 22:59 test6.sh

[root@localhost test4]# touch -c -t 12011201 test6.sh    #修改到指定時間
[root@localhost test4]# ll
total 0
-rw-r--r--. 1 root root 0 Dec  1 12:01 test6.sh
[root@localhost test4]# touch -d "2 days ago" test6.sh 
[root@localhost test4]# ll
total 0
-rw-r--r--. 1 root root 0 Dec  9 23:01 test6.sh

stat:查看文件時間屬性

用法:stat [選項]… 文件…
顯示文件或文件系統的狀態。

 -L, --dereference     跟隨鏈接
  -f, --file-system     顯示文件系統狀態而非文件狀態
  -c --format=格式      使用指定輸出格式代替默認值,每用一次指定格式換一新行
      --printf=格式     類似 --format,但是會解釋反斜杠轉義符,不使用換行作
                                輸出結尾。如果您仍希望使用換行,可以在格式中
                                加入"\n"
  -t, --terse           使用簡潔格式輸出
      --help            顯示此幫助信息并退出
      --version         顯示版本信息并退出

有效的文件格式序列(不使用 --file-system):

  %a    八進制權限
  %A   用可讀性較好的方式輸出權限
  %b   計算已分配塊數(參見%B)
  %B   以字節為單位輸出%b 所報告的每個塊的大小
  %C   SELinux 安全環境字符串
  %d    十進制設備編號
  %D    十六進制設備編號
  %f    十六進制原始模式
  %F    文件類型
  %g    文件的屬組ID
  %G    文件的屬組組名
  %h    硬鏈接數量
  %i    Inode 編號
  %m    掛載點
  %n    文件名
  %N    如果對象是一個符號鏈接,顯示引用到的其它文件名
  %o    I/O 塊大小
  %s    總計大小,以字節為單位
  %t    十六進制主設備類型
  %T    十六進制子設備類型
  %u    文件的屬主ID
  %U    文件的屬主用戶名
  %w    文件創建時間,若未知則顯示"-"
  %W    從UNIX 元年起以秒計的文件創建時間,若未知則顯示"-"
  %x    上次訪問時間
  %X    從UNIX 元年起以秒計的上次訪問時間
  %y    上次修改時間
  %Y    從UNIX 元年起以秒計的上次修改時間
  %z    上次更改時間
  %Z    從UNIX 元年起以秒計的上次更改時間

有效的文件系統格式序列:

  %a    非超級用戶可用的剩余塊數
  %b    文件系統的總數據塊數
  %c    文件系統中文件節點總數
  %d    文件系統中空閑文件節點數
  %f    文件系統中空閑塊數
  %i    十六進制文件系統ID
  %I    允許的文件名最大長度
  %n    文件名
  %s    塊大小(用于快速傳輸)
  %S    基本塊大小(用于塊計數)
  %t    十六進制類型描述
  %T    可讀性較好的類型描述
[root@localhost test4]# stat test6.sh 
  File: ‘test6.sh’
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d	Inode: 202447740   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:default_t:s0
Access: 2016-12-09 23:01:40.693888081 +0800
Modify: 2016-12-09 23:01:40.693888081 +0800
Change: 2016-12-11 23:01:40.693032017 +0800
 Birth: -
[root@localhost test4]# touch test6.sh 
[root@localhost test4]# stat test6.sh 
  File: ‘test6.sh’
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d	Inode: 202447740   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:default_t:s0
Access: 2016-12-11 23:05:36.807039471 +0800
Modify: 2016-12-11 23:05:36.807039471 +0800
Change: 2016-12-11 23:05:36.807039471 +0800
 Birth: -
 
 [root@localhost test4]# cat test6.sh 
sdas
[root@localhost test4]# date
Sun Dec 11 23:10:19 CST 2016
[root@localhost test4]# stat test6.sh 
  File: ‘test6.sh’
  Size: 5         	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 202447743   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:default_t:s0
Access: 2016-12-11 23:10:16.635048305 +0800
Modify: 2016-12-11 23:09:05.377046056 +0800
Change: 2016-12-11 23:09:05.378046056 +0800
 Birth: -

cp:復制文件或者目錄

用法:cp [選項]… [-T] 源文件 目標文件
 或:cp [選項]… 源文件… 目錄
 或:cp [選項]… -t 目錄 源文件…
將源文件復制至目標文件,或將多個源文件復制至目標目錄。

長選項必須使用的參數對于短選項時也是必需使用的。
  -a, --archive			等于-dR --preserve=all
      --backup[=CONTROL		為每個已存在的目標文件創建備份
  -b				類似--backup 但不接受參數
      --copy-contents		在遞歸處理是復制特殊文件內容
  -d				等于--no-dereference --preserve=links
  -f, --force			如果目標文件無法打開則將其移除并重試(當 -n 選項
					存在時則不需再選此項)
  -i, --interactive		覆蓋前詢問(使前面的 -n 選項失效)
  -H				跟隨源文件中的命令行符號鏈接
  -l, --link			鏈接文件而不復制
  -L, --dereference		總是跟隨符號鏈接
  -n, --no-clobber		不要覆蓋已存在的文件(使前面的 -i 選項失效)
  -P, --no-dereference		不跟隨源文件中的符號鏈接
  -p				等于--preserve=模式,所有權,時間戳
      --preserve[=屬性列表	保持指定的屬性(默認:模式,所有權,時間戳),如果
					可能保持附加屬性:環境、鏈接、xattr 等
  -c                           same as --preserve=context
      --sno-preserve=屬性列表	不保留指定的文件屬性
      --parents			復制前在目標目錄創建來源文件路徑中的所有目錄
  -R, -r, --recursive		遞歸復制目錄及其子目錄內的所有內容
      --reflink[=WHEN]		控制克隆/CoW 副本。請查看下面的內如。
      --remove-destination	嘗試打開目標文件前先刪除已存在的目的地
					文件 (相對于 --force 選項)
      --sparse=WHEN		控制創建稀疏文件的方式
      --strip-trailing-slashes	刪除參數中所有源文件/目錄末端的斜杠
  -s, --symbolic-link		只創建符號鏈接而不復制文件
  -S, --suffix=后綴		自行指定備份文件的后綴
  -t,  --target-directory=目錄	將所有參數指定的源文件/目錄
                                           復制至目標目錄
  -T, --no-target-directory	將目標目錄視作普通文件
  -u, --update                 copy only when the SOURCE file is newer
                                 than the destination file or when the
                                 destination file is missing
  -v, --verbose                explain what is being done
  -x, --one-file-system        stay on this file system
  -Z, --context=CONTEXT        set security context of copy to CONTEXT
      --help		顯示此幫助信息并退出
      --version		顯示版本信息并退出
[root@localhost www]# cp -p test.rb /home/test   #將test.rb copy到test目錄,并且保留原文件的屬性

[root@localhost www]# cp -r Dir/ /home/test      #將Dir目錄copy到test目錄下

[root@localhost www]# cp -fr Dir/* /home/test    #將Dir下面的所有文件強制copy到test目錄下

[root@localhost www]# cp test.rb{,.bak}          #備份test.rb,并在尾部加上.bak后綴

mv:

用法:mv [選項]… [-T] 源文件 目標文件
 或:mv [選項]… 源文件… 目錄
 或:mv [選項]… -t 目錄 源文件…
將源文件重命名為目標文件,或將源文件移動至指定目錄。

長選項必須使用的參數對于短選項時也是必需使用的。
      --backup[=CONTROL]       為每個已存在的目標文件創建備份
  -b                           類似--backup 但不接受參數
  -f, --force                  覆蓋前不詢問
  -i, --interactive            覆蓋前詢問
  -n, --no-clobber             不覆蓋已存在文件
如果您指定了-i、-f、-n 中的多個,僅最后一個生效。
      --strip-trailing-slashes  去掉每個源文件參數尾部的斜線
  -S, --suffix=SUFFIX           替換常用的備份文件后綴
  -t, --target-directory=DIRECTORY      將所有參數指定的源文件或目錄
                                        移動至 指定目錄
  -T, --no-target-directory     將目標文件視作普通文件處理
  -u, --update                  只在源文件文件比目標文件新,或目標文件
                                不存在時才進行移動
  -v, --verbose         詳細顯示進行的步驟
      --help            顯示此幫助信息并退出
      --version         顯示版本信息并退出
[root@linux ~]# mv abc abc.php  #將abc移動成abc.php

[root@linux ~]# mv test.php{,.sh}  #將test.php增加后輟

[tank@localhost ~]$ mv -t ./database 1.sql    #將1.sql移動到database目錄下

[tank@localhost ~]$ mv aaa bbb  #將目錄或者文件重命名,如果存在bbb目錄,則是將aaa移到bbb目錄下

rm:刪除命令

用法:rm [選項]… 文件…
刪除 (unlink) 文件。

  -f, --force   強制刪除。忽略不存在的文件,不提示確認
  -i       在刪除前需要確認
  -r, -R, --recursive   遞歸刪除目錄及其內容
  -v, --verbose         詳細顯示進行的步驟
      --help            顯示此幫助信息并退出
      --version         顯示版本信息并退出

默認時,rm 不會刪除目錄。使用--recursive(-r 或-R)選項可刪除每個給定
的目錄,以及其下所有的內容。
[root@localhost ~]# rm test.php        #刪除文件需要確認

[root@localhost ~]# rm -f test.php     #強制刪除文件不確認

[root@localhost ~]# rm -rfv ./test     #強制刪除當前的test目錄,并顯示刪除的詳細過程

more:多屏顯示文本命令

下面介紹命令行選項.選項可以從環境變量MORE中獲取(要確保它們以短橫線開頭 (``-)),但是命令行選項能夠覆蓋它們.
-num 這個選項指定屏幕的行數(以整數表示). 
-d   讓more給用戶顯示提示信息"[Press space to continue,'q' to quit.]",當 用戶按下其他鍵時,顯示"[Press 'h' for instructions.]",而不是揚聲器鳴笛. 
-l   More在通常情況下把^L (form feed)當做特殊字符,遇到這個字符就會暫停.-l 選項可以阻止這種特性. 
-f   使 more 計數邏輯行,不是屏幕行 (就是說,長行不會斷到下一行). 
-p   不卷屏,而是清除整個屏幕,然后顯示文本. 
-c   不卷屏,而是從每一屏的頂部開始顯示文本, 每顯示完一行,就清除 這一行的 剩余部分. 
-s   把重復的空行壓縮成一個空行. 
-u   防止下劃線. 
+/   在顯示每個文件前,搜索+/選項指定的文本串. 
+num 從行號 num  開始顯示.
[[ ]] 
  命令 (COMMAND) 
-------------------------------------------------------------------------
more的交互命令基于vi(1). 有些命令以一個十進制數字開始,在下面的描述里 稱之為k. 后面的描述中, ^X指control-X.
h or ? 幫助:顯示這些命令的摘要.你如果忘掉所有其他的命令,請記住這個. 
SPACE 顯示接下來的 k 行文本. 缺省值是當前的屏幕大小. 
z 顯示接下來的 k 行文本. 缺省值是當前的屏幕大小. 參數成為新的缺省值. 
RETURN 顯示接下來的 k 行文本. 缺省值是 1. 參數成為新的缺省值. 
d or ^D 卷屏 k 行. 缺省值是當前的卷屏大小, 初始化為 11. 參數成為新的缺省值. 
q 或 Q 或 INTERRUPT 退出. 
s 向前跳過 k 行文本. 缺省值是 1. 
f 向前跳過 k 屏文本. 缺省值是 1. 
b or ^B 向后跳回 k 屏文本. 缺省值是 1. 
= 顯示當前行號. 
------------------------------------------------------------------------
/ pattern 搜索第 k 個符合 正則表達式的文本串. 缺省值是 1. 
n 搜索最后第 k 個符合正則表達式的文本串. 缺省值是 1. 
! or :! 在子shell中執行 . 
v 啟動 /usr/bin/vi, 指向當前行. 
^L 刷新屏幕. 
:n 跳到后面第 k 個文件. 缺省值是 1. 
:p 跳到前面第 k 個文件. 缺省值是 1. 
:f 顯示當前文件名 和 行號. 
. 重復上次命令.
[[ ]] 

  環境 (ENVIRONMENT)

less:

less 與more命令類似,但可以通過翻頁鍵查看上下頁的內容

-b<緩沖區大小> 設置緩沖區的大小
-e 當文件顯示結束后,自動離開
-f 強迫打開特殊文件,例如外圍設備代號、目錄和二進制文件
-g 只標志最后搜索的關鍵詞
-i 忽略搜索時的大小寫
-m 顯示類似more命令的百分比
-N 顯示每行的行號
-o<文件名> 將less 輸出的內容在指定文件中保存起來
-Q 不使用警告音
-s 顯示連續空行為一行
-S 行過長時間將超出部分舍棄
-x<數字> 將“tab”鍵顯示為規定的數字空格

命令內部操作

按鍵功能如下:
b 向后翻一頁
d 向后翻半頁
h 顯示幫助界面
Q 退出less 命令
u 向前滾動半頁
y 向前滾動一行
空格鍵 滾動一頁
回車鍵 滾動一行 

1) 向前搜索

    / : 使用一個模式進行搜索,并定位到下一個匹配的文本
    n : 向前查找下一個匹配的文本
    N : 向后查找前一個匹配的文本

2) 向后搜索

    ? : 使用模式進行搜索,并定位到前一個匹配的文本
    n : 向后查找下一個匹配的文本
    N : 向前查找前一個匹配的文本

2 全屏導航

    ctrl + F :向前移動一屏
    ctrl + B :向后移動一屏
    ctrl + D :向前移動半屏
    ctrl + U :向后移動半屏

3 單行導航

    j : 向前移動一行
    k : 向后移動一行

4 其它導航

    G : 移動到最后一行
    g : 移動到第一行
    q / ZZ : 退出 less 命令

5 編輯文件

    v : 進入編輯模式,使用配置的編輯器編輯當前文件

6 標記導航

    當使用 less 查看大文件時,可以在任何一個位置作標記,可以通過命令導航到標有特定標記的文本位置。

    ma : 使用 a 標記文本的當前位置
    'a : 導航到標記 a 處

7 瀏覽多個文件

    方式一,傳遞多個參數給 less,就能瀏覽多個文件。

    less file1 file2

    方式二,正在瀏覽一個文件時,使用 :e 打開另一個文件。

    less file1
    :e file2

     
    當打開多個文件時,使用如下命令在多個文件之間切換

    :n - 瀏覽下一個文件
    :p - 瀏覽前一個文件

head:輸出文件的前N(默認是10)行

用法:head [選項]... [文件]...
將每個指定文件的頭10 行顯示到標準輸出。
如果指定了多于一個文件,在每一段輸出前會給出文件名作為文件頭。
如果不指定文件,或者文件為"-",則從標準輸入讀取數據。

長選項必須使用的參數對于短選項時也是必需使用的。
  -c,  --bytes=[-]K     顯示每個文件的前K 字節內容;
                        如果附加"-"參數,則除了每個文件的最后K字節數據外
                        顯示剩余全部內容
  -n, --lines=[-]K      顯示每個文件的前K 行內容;
                        如果附加"-"參數,則除了每個文件的最后K 行外顯示
                        剩余全部內容
  -q, --quiet, --silent 不顯示包含給定文件名的文件頭
  -v, --verbose         總是顯示包含給定文件名的文件頭
      --help            顯示此幫助信息并退出
      --version         顯示版本信息并退出

tail:輸出文件的末尾N(默認是10)行

在標準輸出上顯示每個FILE的最后10行. 如果多于一個FILE,會一個接一個地顯示, 并在每個文件顯示的首部給出文件名. 如果沒有FILE,或者FILE是-,那么就從標準輸入上讀取.

--retry
    即使tail開始時就不能訪問 或者在tail運行后不能訪問,也仍然不停地嘗試打開文件. -- 只與-f合用時有用.
-c, --bytes=N
    輸出最后N個字節
-f, --follow[={name|descriptor}]
    當文件增長時,輸出后續添加的數據; -f, --follow以及 --follow=descriptor 都是相同的意思
-n, --lines=N
    輸出最后N行,而非默認的最后10行
--max-unchanged-stats=N
    參看texinfo文檔(默認為5)
--max-consecutive-size-changes=N
    參看texinfo文檔(默認為200)
--pid=PID
    與-f合用,表示在進程ID,PID死掉之后結束.
-q, --quiet, --silent
    從不輸出給出文件名的首部
-s, --sleep-interval=S
    與-f合用,表示在每次反復的間隔休眠S秒
-v, --verbose
    總是輸出給出文件名的首部
--help
    顯示幫助信息后退出
--version
    輸出版本信息后退出

cat:

用法:cat [選項] [文件]…
將[文件]或標準輸入組合輸出到標準輸出。

-A, --show-all           等價于 -vET
  -b, --number-nonblank    對非空輸出行編號
  -e                       等價于 -vE
  -E, --show-ends          在每行結束處顯示 $
  -n, --number             對輸出的所有行編號
  -s, --squeeze-blank      不輸出多行空行
  -t                       與 -vT 等價
  -T, --show-tabs          將跳格字符顯示為 ^I
  -u                       (被忽略)
  -v, --show-nonprinting   使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
      --help     顯示此幫助信息并退出
      --version  輸出版本信息并退出

如果[文件]缺省,或者[文件]為 - ,則讀取標準輸入。
[root@localhost ~]# cat test        #普通輸出
1111111111


2222222222

3333333333

[root@localhost ~]# cat -n test     #開頭顯示行號
     1  1111111111
     2
     3
     4  2222222222
     5
     6  3333333333
	 
[root@localhost ~]# cat -E test     #以$結束
1111111111$
$
$
2222222222$
$
3333333333$

[root@localhost ~]# cat -s test     #超過二個空行,合并成一個
1111111111

2222222222

3333333333

[root@localhost ~]# cat -ns test   #去空行,加行號
     1  1111111111
     2
     3  2222222222
     4
     5  3333333333
# cat > aa  #從鍵盤錄入內容到文件,回車是保存,退出Ctrl+z
4234234
234234
^Z
[4]+  Stopped                 cat > aa

# cat file1 file2 > file  #合并二個文件為一個

# cat > aa  #從鍵盤錄入內容到文件,回車是保存,退出Ctrl+z
4234234
234234
^Z
[4]+  Stopped                 cat > aa

# cat file1 file2 > file  #合并二個文件為一個

腳本做目錄時經常用到:

cat << EOF
......
EOF
示例:
cat  << EOF 
please choice your option:
cpu) show cpu info
mem) show mem info
disk) show disk info
quit) quit
EOF

tac:

用法:tac [選項]... [文件]...
將每個指定文件按行倒置并寫到標準輸出。
如果不指定文件,或文件為"-",則從標準輸入讀取數據。

長選項必須使用的參數對于短選項時也是必需使用的。
  -b, --before                  在行前而非行尾添加分隔標志
  -r, --regex                   將分隔標志視作正則表達式來解析
  -s, --separator=字符串        使用指定字符串代替換行作為分隔標志
      --help            顯示此幫助信息并退出
      --version         顯示版本信息并退出
[root@localhost www]# cat test
1234
abcd

[root@localhost www]# rev test
4321
dcba

[root@localhost www]# tac test
abcd
1234

chattr:修改特殊權限

chattr 修改文件在Linux第二擴展文件系統(E2fs)上的特有屬性
符號模式有+-=[ASacdisu]幾種格式.
操作符`+'用來在文件已有屬性的基礎上增加選定的屬性; `-'用來去掉文件上的選定的屬性;而`='用來指定該文件的唯一屬性.
字符`ASacdisu'用作文件新屬性的選項: 不更新atime(A),同步更新(S),只能添加(a), 壓縮(c),不可變(i),不可轉移(d),刪除保護(s)以及不可刪除(u).

-R
    遞歸地修改目錄以及其下內容的屬性. 如果在遞歸目錄時遇到了符號鏈接,遍歷將跳過.
-V
    詳盡地給出chattr的輸出信息并打印出程序的版本.
-vversion
    設置文件系統的版本.

當修改設置了'A'屬性的文件時,它的atime記錄不會改變. 這可以在筆記本電腦系統中避免某些磁盤I/O處理.
設置了`a'屬性的文件只能在添加模式下打開用于寫入. 只有超級用戶可以設置或清除該屬性.
設置了`c'屬性的文件在磁盤上由內核自動進行壓縮處理. 從該文件讀取時返回的是未壓縮的數據. 對該文件的一次寫入會在保存它們到磁盤之前進行數據壓縮.
設置了`d'屬性的文件不能對其運行 dump(8) 程序進行備份.
設置了`i'屬性的文件不能進行修改:你既不能刪除它, 也不能給它重新命名,你不能對該文件創建鏈接, 而且也不能對該文件寫入任何數據. 只有超級用戶可以設置或清除該屬性.
當刪除設置了`s'屬性的文件時,將對其數據塊清零 并寫回到磁盤上.
當修改設置了`S'屬性的文件時, 修改會同步寫入到磁盤上;這與應用 到文件子系統上的`sync'掛載選項有相同的效果.
當刪除設置了`u'屬性的文件時, 將會保存其內容. 這使得用戶可以請求恢復被刪除的文件.

lsattr:查看特殊權限

lsattr 顯示文件在Linux第二擴展文件系統上的特有屬性

-R
    遞歸地列出目錄以及其下內容的屬性.
-V
    顯示程序版本.
-a
    列出目錄中的所有文件,包括以`.'開頭的文件的屬性.
-d
    以列出其它文件的方式那樣列出目錄的屬性, 而不列出其下的內容.
-v
    顯示文件版本.
[root@localhost test]# lsattr nginx.conf       #查看特殊權限
---------------- nginx.conf
[root@localhost test]# chattr +i nginx.conf    #設置文件不能被修改
[root@localhost test]# lsattr nginx.conf 
----i----------- nginx.conf
[root@localhost test]# echo "abc" >nginx.conf 
-bash: nginx.conf: Permission denied

[root@localhost test]# chattr -i nginx.conf    #去掉-i權限
[root@localhost test]# lsattr nginx.conf 
---------------- nginx.conf
[root@localhost test]# echo "abc" >nginx.conf 
[root@localhost test]# cat nginx.conf 
abc

chacl:

chacl是用來更改文件或目錄的訪問控制列表的命令。其和chmod有異曲同工之妙。但是比chmod更為強大,更為精細。

chmod只能把權限分為三種:用戶,組,其它人。通過chmod你可以指定文件屬主的權限,文件所在組的用戶的權限,其它人的權限。

如果有這樣的需求,通過chmod能搞定嗎??如果A用戶的文件只想給B看。通過chmod能不能搞定。當然你可能講把A,B放到一個組里面就可以了。但是你這樣就會限制了別的用戶不能加入這個組。通過chacl可以輕松的搞定這個問題。

chacl命令的格式是: chacl acl filename1 filename2

acl的英文是 the access control list,我就直譯為存取控制列表吧。chacl就是一個改變文件存取控制列表的一個命令。

acl是一個可以被acl_from_text程序分析出各用戶權限的字符串。該字符串用逗號分隔成多個片段

每個片段的形式都如:tag:name:perm

tag可以是下面形式的一種:
    "user" (or "u")
        表示這是一個用戶的ACL條目。
    "group" (or "g")
        表示這是一個用戶組的ACL條目。
    "other" (or "o")
        表示這是其它的ACL條目。即沒有在ACL指定的用戶和組的ACL條目。
    "mask" (or "m")
        表示這是一個掩碼的ACL條目。在指定其它非用戶屬主的ACL權限時,這個掩碼條目必須被指定,否則執行chacl命令會出錯。
    
name可以是用戶名或組名。如果不指定,那么默認是給文件或目錄的屬主或用戶組指定acl權限。當然name也可以是用戶的uid或者組的gid。

perm是指該用戶或組所具有的權限,它是由"rwx"組成的一個字符串,什么意思當然大家都明白了。如果要使該用戶或組不具有某種權限,簡單的以"-"代替指定的字母就可以了。例如"r-x"是只具有讀,執行權限。

該命令具有的選項不多,就具體的介紹下每個選項的含義吧。
-b   表明這里有兩個acl需要修改,前一個acl是文件的acl,后一個是目錄的默認acl。
-d   設定目錄的默認acl,這個選項是比較有用的。如果指定了目錄的默認acl,在這個目錄下新建的文件或目錄都會繼承目錄的acl。
-R   只刪除文件的acl
-D   只刪除目錄的默認acl,是-d的反向操作。
-B   刪除文件和目錄默認的acl。是-b的反向操作。
-r   遞歸地修改文件和目錄的acl權限。
-l   列出文件和目錄的acl權限。

whereis:查找命令可執行文件和man文檔位置

whereis命令的語法:whereis [-bmsu] [BMS 目錄名 -f ] 文件名

whereis命令的各選項含義如下:

-b   定位可執行文件。
-m   定位幫助文件。
-s   定位源代碼文件。
-u   搜索默認路徑下除可執行文件、源代碼文件、幫助文件以外的其它文件。
-B   指定搜索可執行文件的路徑。
-M   指定搜索幫助文件的路徑。
-S   指定搜索源代碼文件的路徑。
[root@localhost test]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
[root@localhost test]# whereis -b ls
ls: /usr/bin/ls
[root@localhost test]# whereis -m ls
ls: /usr/share/man/man1/ls.1.gz
[root@localhost test]# whereis -s ls
ls:

which:查找命令環境變量中的文件

-a   查找全部內容,而非第一個文件-n   <文件名長度>  指定文件名長度,指定的長度必須大于或等于所有文件中最長的文件名。 
-p   <文件名長度>  與-n參數相同,但此處的<文件名長度>包括了文件的路徑。 
-w  指定輸出時欄位的寬度。 
-V  顯示版本信息。
[root@localhost test]# which ls
alias ls='ls --color=auto'
	/usr/bin/ls
[root@localhost test]# which find
/usr/bin/find

locate:超找文件

用法: locate [OPTION]… [PATTERN]… 在mlocate數據庫中搜索條目.

-i, --ignore-case 匹配模式時忽略大小寫區別
-b, --basename 匹配唯一的路徑名稱的基本文件名
-c, --count 只顯示找到條目的號碼
-d, --database DBPATH 用 DBPATH 替代默認的數據庫(/var/lib/mlocate/mlocate.db)
-e, --existing 只顯示當前存在的文件條目
-L, --follow 當文件存在時跟隨蔓延的符號鏈接 (默認)
-h, --help 顯示本幫助
-l, --limit, -n LIMIT 限制為 LIMIT項目的輸出 (或 計數) 
-m, --mmap 忽略向后兼容性
-P, --nofollow, -H 當檢查文件時不跟隨蔓延的符號鏈接
-0, --null 輸出時以 NUL 分隔項目
-S, --statistics 不搜索項目,顯示有關每個已用數據庫的統計信息
-q, --quiet 不報告關于讀取數據庫的錯誤消息
-r, --regexp REGEXP 搜索基本正則表達式 REGEXP 來代替模式
--regex 模式是擴展正則表達式
-s, --stdio 忽略向后兼容性
-V, --version 顯示版本信息
-w, --wholename 匹配完整路徑名 (默認)另外:locate不是內置命令,需要自己安裝mlocate,yum -y install mlocate
安裝后需要更新一下查找的數據庫updatedb,不然會報下面錯誤

[root@localhost test]# locate -i /etc/fuc 
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
[root@localhost test]# locate -i /data/te
/data/test
/data/test/.test6
/data/test/nginx.conf
/data/test/test1
/data/test/test2
/data/test/test3
/data/test/test3/test4
/data/test/test3/test5
/data/test/test3/test4/test6.sh

chmod:修改目錄權限

用法:chmod [選項]… 模式[,模式]… 文件…
 或:chmod [選項]… 八進制模式 文件…
 或:chmod [選項]… –reference=參考文件 文件…
將每個文件的模式更改為指定值。

 -c, --changes         類似 --verbose,但只在有更改時才顯示結果
      --no-preserve-root        不特殊對待根目錄(默認)
      --preserve-root           禁止對根目錄進行遞歸操作
  -f, --silent, --quiet 去除大部份的錯誤信息
  -v, --verbose         為處理的所有文件顯示診斷信息
      --reference=參考文件      使用指定參考文件的模式,而非自行指定權限模式
  -R, --recursive               以遞歸方式更改所有的文件及子目錄
      --help            顯示此幫助信息并退出
      --version         顯示版本信息并退出

每種 MODE 都應屬于這類形式"[ugoa]*([-+=]([rwxXst]*|[ugo]))+"。

操作對像

   u 文件屬主權限
   g 同組用戶權限
   o 其它用戶權限
   a 所有用戶(包括以上三種)

權限設定

   + 增加權限
   - 取消權限
   =  唯一設定權限

權限類別

   r 讀權限
   w 寫權限
   x 執行權限
   X 表示只有當該檔案是個子目錄或者該檔案已經被設定過為可執行。
   s 文件屬主和組id
   l 給文件加鎖,使其它用戶無法訪問

   r-->4
   w-->2
   x-->1
[root@localhost ~]# chmod ugo+r nginx_bak.conf #所有人皆可讀取
[root@localhost ~]# chmod a+r nginx_bak.conf #所有人皆可讀取
[root@localhost ~]# chmod ug+w,o-w nginx_bak.conf #設為該檔案擁有者,與其所屬同一個群體者可寫入,但其他以外的人則不可寫入
[root@localhost ~]# chmod u+x nginx_bak.conf #創建者擁有執行權限 
[root@localhost ~]# chmod -R a+r ./www/ #將www下的所有檔案與子目錄皆設為任何人可讀取
[root@localhost ~]# chmod a-x nginx_bak.conf #收回所有用戶的對nginx_bak.conf的執行權限
[root@localhost ~]# chmod 777 nginx_bak.conf #所有人可讀,寫,執行
# chmod a+s test.ppt    #chmod g+s ,為某個文件設置替代組標識

# ls -al |grep test.ppt
-rwSr-Sr--.  1 tank tank    2320384 11月 18 19:29 test.ppt

第一個S指示用戶替代標識(suid)已經被設置。
第二個S指示替代組標識(sgid)已經被設置。

這樣,每一個運行該程序的用戶將給予和程序擁有者同樣有效的用戶標識,和用戶所屬組同樣有效的組標識。

chown:修改文件和目錄的屬主和屬組

用法:chown [選項]… [所有者][:[組]] 文件…
 或:chown [選項]… –reference=參考文件 文件…
更改每個文件的所有者和/或所屬組。
當使用 –referebce 參數時,將文件的所有者和所屬組更改為與指定參考文件相同。

  -c, --changes      類似 verbose,但只在有更改時才顯示結果
      --dereference             受影響的是符號鏈接所指示的對象,而非符號鏈接本身
  -h, --no-dereference          會影響符號鏈接本身,而非符號鏈接所指示的目的地
                                (當系統支持更改符號鏈接的所有者時,此選項才有用)
      --from=當前所有者:當前所屬組
                                只當每個文件的所有者和組符合選項所指定時才更改所
                                有者和組。其中一個可以省略,這時已省略的屬性就不
                                需要符合原有的屬性。
      --no-preserve-root        不特殊對待"/"(默認值)
      --preserve-root           不允許在"/"上遞歸操作
  -f, --silent, --quiet 去除大部份的錯誤信息
      --reference=參考文件      使用參考文件的所屬組,而非指定值
  -R, --recursive               遞歸處理所有的文件及子目錄
  -v, --verbose                 為處理的所有文件顯示診斷信息

以下選項是在指定了 -R 選項時被用于設置如何穿越目錄結構體系。
如果您指定了多于一個選項,那么只有最后一個會生效。

  -H         如果命令行參數是一個通到目錄的符號鏈接,則遍歷符號鏈接
  -L         遍歷每一個遇到的通到目錄的符號鏈接
  -P         不遍歷任何符號鏈接(默認)

      --help            顯示此幫助信息并退出
      --version         顯示版本信息并退出

如果沒有指定所有者,則不會更改。 所屬組若沒有指定也不會更改,但當加上
":"時 GROUP 會更改為指定所有者的主要組。所有者和所屬組可以是數字或名稱。
[root@localhost test]# ll
total 4
-rw-r--r--. 1 root root  4 Dec 12 00:26 nginx.conf
drwxr-xr-x. 2 root root  6 Dec 10 08:25 test1
drw-rw-rw-. 2 root root  6 Dec 10 08:26 test2
drwxr-xr-x. 4 root root 30 Dec 11 22:49 test3
[root@localhost test]# chown huangh:huangh test1
[root@localhost test]# chown .huangh test3
[root@localhost test]# ll
total 4
-rw-r--r--. 1 root   root    4 Dec 12 00:26 nginx.conf
drwxr-xr-x. 2 huangh huangh  6 Dec 10 08:25 test1
drw-rw-rw-. 2 huangh huangh  6 Dec 10 08:26 test2
drwxr-xr-x. 4 root   huangh 30 Dec 11 22:49 test3

[root@localhost test]# mkdir test4
[root@localhost test]# ll
total 4
-rw-r--r--. 1 root   root    4 Dec 12 00:26 nginx.conf
drwxr-xr-x. 2 huangh huangh  6 Dec 10 08:25 test1
drw-rw-rw-. 2 huangh huangh  6 Dec 10 08:26 test2
drwxr-xr-x. 4 root   huangh 30 Dec 11 22:49 test3
drwxr-xr-x. 2 root   root    6 Dec 12 07:25 test4
[root@localhost test]# chown huangh. test4
[root@localhost test]# ll
total 4
-rw-r--r--. 1 root   root    4 Dec 12 00:26 nginx.conf
drwxr-xr-x. 2 huangh huangh  6 Dec 10 08:25 test1
drw-rw-rw-. 2 huangh huangh  6 Dec 10 08:26 test2
drwxr-xr-x. 4 root   huangh 30 Dec 11 22:49 test3
drwxr-xr-x. 2 huangh huangh  6 Dec 12 07:25 test4
[root@localhost test]# chown huangh.root test4
[root@localhost test]# ll
total 4
-rw-r--r--. 1 root   root    4 Dec 12 00:26 nginx.conf
drwxr-xr-x. 2 huangh huangh  6 Dec 10 08:25 test1
drw-rw-rw-. 2 huangh huangh  6 Dec 10 08:26 test2
drwxr-xr-x. 4 root   huangh 30 Dec 11 22:49 test3
drwxr-xr-x. 2 huangh root    6 Dec 12 07:25 test4

umask:

umask 命令用來設置限制新文件權限的掩碼。當新文件被創建時,其最初的權限由文件創建掩碼決定。用戶每次注冊進入系統時,umask命令都被執行,并自動設置掩碼改變默認值,新的權限將會把舊的覆蓋。

參數:
-S:以字符的形勢顯示當前的掩碼。
-p:帶umask開頭以數字的形勢顯示當前掩碼
umask是從權限中“拿走”相應的位,且文件創建時不能賦予執行權限
[root@localhost test]# umask
0022
[root@localhost test]# umask -S
u=rwx,g=rx,o=rx
[root@localhost test]# umask -p
umask 0022
[root@localhost test]# umask 755
[root@localhost test]# umask
0755
[root@localhost test]# touch test
[root@localhost test]# ll test
-----w--w-. 1 root root 0 Dec 12 07:33 test

ln:連接

ln -在文件之間建立連接

在Unix世界里有兩個'link'(連接)概念,一般稱之為硬連接和軟連接。一個硬連 接僅僅是一個文件名。(一個文件可以有好幾個文件名,只有將最后一個文件名從 磁盤上刪除,才能把這個文件刪掉。文件名的個數是由ls(1)來確定的。所有的文件 名都處于同一個狀態,也就沒有什么lq源名字rq 之說。通常文件系統里的一個 文件的所有名字包含著一樣的數據信息,不過這樣也不是必需的。)一個軟連接 (或符號連接)是完全不同的:它是一個包含了路徑信息的小小的指定文件。因此, 軟連接可以指向不同文件系統里的文件(比如由NFS裝載的不同機器文件系統上的文 件),甚至可以指向一個不一定確實存在的文件。在軟連接文件被訪問(系統調用 open(2) 或stat(2))的時候,操作系統用該文件所包含的路徑替換該文件的訪問介 入點,從而實現對所指文件的訪問。(用命令rm(1)和unlink(2)可以刪除連接,但 不是刪除該文件所指向的文件。系統指定調用lstat(2)和readlink(2) 來讀取連接 文件與其所指文件的狀態。到底是對軟連接文件操作,還是對被指向文件操作,由 于不同操作系統件存在不同的系統調用,而存在著差異。)

ln 在文件間產生連接。缺省時,產生硬連接,有-s選項,則產生符號(軟)連接。

如果僅僅只給出一個文件名,那么ln將在當前目錄里產生這個文件的連接, 也就是說,以該文件(的最后一個)名稱等同的名字在當前目錄里產生一個連接 (GNU范圍內); 如果最后一個參數是一個已存在的目錄名, ln 將在那個目錄里給每一個源文件用以與源文件相同的文件名產生連接, (不同情況見以下--no-dereference的描述); 如果只給出兩個文件名,ln將產生源文件的連接; 如果最后一個參數不是一個目錄名或多于兩個文件名,則報錯。

缺省時,ln不刪除已存在的文件或符號連接。 (因此,它可以被用來鎖定目標文件,即當dest已經不存在時) 但選項-f可以強制執行。

在已存在的實現中,只有超級用戶才能建立目錄的硬連接。 POSIX 禁止系統調用link(2)和ln建立目錄的硬連接 (但是允許在不同的文件系統間建立硬連接)。 

使用方式 : ln [options] source dist,其中 option 的格式為 :
[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}][--help] [--version] [--]

說明 : Linux/Unix 檔案系統中,有所謂的連結(link),我們可以將其視為檔案的別名,而連結又可分為兩種 : 硬連結(hard link)與軟連結(symbolic link),硬連結的意思是一個檔案可以有多個名稱,而軟連結的方式則是產生一個特殊的檔案,該檔案的內容是指向另一個檔案的位置。硬連結是存在同一個檔案系統中,而軟連結卻可以跨越不同的檔案系統。
ln source dist 是產生一個連結(dist)到 source,至于使用硬連結或軟鏈結則由參數決定。
不論是硬連結或軟鏈結都不會將原本的檔案復制一份,只會占用非常少量的磁碟空間。

-f : 鏈結時先將與 dist 同檔名的檔案刪除
-d : 允許系統管理者硬鏈結自己的目錄
-i : 在刪除與 dist 同檔名的檔案時先進行詢問
-n : 在進行軟連結時,將 dist 視為一般的檔案
-s : 進行軟鏈結(symbolic link)
-v : 在連結之前顯示其檔名
-b : 將在鏈結時會被覆寫或刪除的檔案進行備份
-S SUFFIX : 將備份的檔案都加上 SUFFIX 的字尾
-V METHOD : 指定備份的方式
--help : 顯示輔助說明
--version : 顯示版本
[root@localhost test]# ll /etc/ssh/ssh_config 
-rw-r--r--. 1 root root 2208 Nov 20  2015 /etc/ssh/ssh_config
[root@localhost test1]# ln /etc/ssh/ssh_config ./   #創建硬連接當當前目錄
[root@localhost test1]# ll
total 4
-rw-r--r--. 3 root root 2208 Nov 20  2015 ssh_config
[root@localhost test1]# ln -s /etc/ssh/sshd_config ./ #創建軟連接當當前目錄
[root@localhost test1]# ll
total 4
-rw-r--r--. 3 root root 2208 Nov 20  2015 ssh_config
lrwxrwxrwx. 1 root root   20 Dec 12 07:40 sshd_config -> /etc/ssh/sshd_config
[root@localhost test1]# ll /etc/ssh/sshd_config 
-rw-------. 1 root root 4361 Nov 20  2015 /etc/ssh/sshd_config

tee:

tee 命令:用來將標準輸入的內容輸出到標準輸出并可以保存為文件

參數
-a 附加到文件
-i 無視中斷
--help 顯示幫助信息
--version 顯示版本信息
[root@localhost test1]# tee test.sh
sad
sad
asd
asd
asda
asda
^C
[root@localhost test1]# cat test.sh 
sad
asd
asda

COMMAND | tee /PATH/TO/SOMEFILE
例如:將issue保存到a.txt,然后又輸出一份
cat /etc/issue |tee /tmp/a.txt |tr 'a-z' 'A-Z'

vi/vim:

VIM:編輯模式,命令模式,輸入模式,末行模式
編輯模式 快捷方式:
i:insert, 在光標所在處輸入;
a: append,在光標在處后方輸入;
o:在光標所在處的下方打開一個新行;
I:在光標所在行的行首輸入;
A:在光標所在行的行尾輸入;
O:在光標所在處的上方打開一個新行;
行首行尾跳轉:
	^:跳轉至行首的第一個非空白字符;
	0:跳轉至行首;
	$:跳轉至行尾;
行間跳轉:
	#G:跳轉至由#指定的行;
	1G, gg:第一行;
	G:最后一行;
翻屏:
	Ctrl+f:向文件尾翻一屏
	Ctrl+b:向文件首部翻一屏
	Ctrl+d:向文件尾部翻半屏
	Ctrl+u:向文件首部翻半屏
	Enter:按行向后翻
編輯操作:
yy:復制整行
#yy:復制#行
p:粘貼
撤銷操作:u
撤銷此前的撤銷:Ctrl+r

vim末行模式:內建的命令行接口		
(1) 地址定界
:start_pos[,end_pos]
#:特定的第#行,例如5即第5行;
.:當前行;
$:最后一行;
#,#:指定行范圍,左側為起始行,右側為結束行;
#,+#:指定行范圍,左側為起始行絕對編號,右側為相對左側行號的偏移量;例如:3,+7
.,$-1:當前行到倒數第一行
1,$:全文
%:全文 
/pattern/:從光標所在處起始向文件尾部第一次被模式所匹配到的行;
/first/,$
/pat1/,/pat2/:從光標所在處起始,第一次由pat1匹配到的行開始,至第一次由pat2匹配到的行結束之間的所有行;
可同編輯命令一同使用,實現編輯操作:
	d
	y
	c				
	w /PATH/TO/SOMEFILE:將范圍內的文本保存至指定的文件中;
	r  /PATH/FROM/SOMEFILE:將指定的文件中的文本讀取并插入至指定位置;
(2) 查找
	/PATTERN:從當前光標所在處向文件尾部查找能夠被當前模式匹配到的所有字符串;
	?PATTERN:從當前光標所在處向文件首部查找能夠被當前模式匹配到的所有字符串;
	n:下一個,與命令方向相同;
	N:上一個,與命令方向相反;
(3) 查找并替換
	s:末行模式的命令;使用格式:
	s/要查找的內容/替換為的內容/修飾符
	要查找的內容:可使用正則表達式;
	替換為的內容:不能使用下則表達式,但可以引用;
	如果“要查找的內容”部分在模式中使用分組符號:在“替換為的內容”中使用后向引用;
	直接引用查找模式匹配到的全部文本,要使用&符號;
	修飾符:
		i:忽略大小寫;
		g:全局替換,意味著一行中如果匹配到多次,則均替換;						
		可把分隔符替換為其它非常用字符:
			s@@@
			s###
末行模式示例:
	查找全文中以t開頭的單詞開頭換成T:%s@\<t\([[:alpha:]]\+\)\>@T\1@g
	查找全文中以t開頭的單詞在單詞后面加er:%s@\<t[[:alpha:]]\+\>@&er@g
加在字符前就是er&,加在后面&er
練習:
1、復制/etc/grub2.cfg文件至/tmp目錄中,用查找替換命令刪除/tmp/grub2.cfg文件中以空白字符開頭的行的行首的空白字符;
%s@^[[:space:]]\+@@
2、復制/etc/rc.d/init.d/functions文件至/tmp目錄中,用查找替換命令為/tmp/functions文件的每個以空白字符開頭的行的行首加上#;
%s@^[[:space:]]\+[^[:space:]]@#&@g
3、為/tmp/grub2.cfg文件的前三行的行首加上#號;
1,3s/^/#/g
4、將/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替換為enabled=1,所有gpgcheck=0替換為gpgcheck=1;
%s@\(enabled\|gpgcheck\)=0@\1=1@g
多文件:
	vim FILE1 FILE2 ...				
在文件間切換:
	:next  下一個
	:prev  上一個
	:first   第一個 
	:last   最后一個 					
退出所有文件:
	:wqall 保存所有文件并退出;
	:wall
	:qall					
多窗口:
	-o:水平分割窗口
	-O:垂直分割窗口			
	在窗口間切換:Ctrl+w, ARROW			
	注意:單個文件也可以分割為多個窗口進行查看:
		Ctrl+w, s:水平分割

定制vim的工作特性:	
		注意:在末行模式下的設定,僅對當前vim進程有效;
		永久有效:
			全局:/etc/vimrc
			用戶個人:~/.vimrc			
		1、行號
			顯示:set number, 簡寫為set nu
			取消顯示:set nomber, set nonu
		2、括號匹配高亮
			匹配:set showmatch, set sm
			取消:set nosm
		3、自動縮進
			啟用:set ai
			禁用:set noai
		4、高亮搜索
			啟用:set  hlsearch
			禁用:set nohlsearch
		5、語法高亮
			啟用:syntax on
			禁用:syntax off 
		6、忽略字符大小寫
			啟用:set ic
			禁用:set noic窗口
				Ctrl+w, v:垂直分割窗口
				
課外作業:如何設置tab鍵縮進4個字符;
在全局/etc/vimrc加入以下配置即可:
set smartindent  
set tabstop=4  
set shiftwidth=4  
set expandtab  
set softtabstop=4

2、bash的工作特性之命令返回值和命令行展開

  • 命令執行狀態返回值
    bash中一條命令的執行,會產生兩種返回結果:命令結果及命令執行狀態結果。一條命令成功執行,其執行狀態返回值為0。如果未能成功執行,其返回值為1-255。

[root@localhost test1]# ls
ssh_config  sshd_config  test.sh
[root@localhost test1]# echo $?
0
[root@localhost test1]# nidaye
-bash: nidaye: command not found
[root@localhost test1]# echo $?
127
  • 命令行展開: {}:可承載一個以逗號分隔的路徑列表,并能夠將其展開為多個路徑; 例如:/tmp/{a,b} 相當于 /tmp/a /tmp/b

3、練習:

  • 3.1、創建/tmp目錄下的a_c,a_d,b_c,b_d

mkdir -pv /tmp/{a,b}_{c,d}
  • 3.2、創建/tmp/mylinux目錄下的:

  • 1.jpg

mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}}

[root@localhost test1]# tree /tmp
/tmp
└── mylinux
    ├── bin
    ├── boot
    │   └── grub
    ├── dev
    ├── etc
    │   ├── rc.d
    │   │   └── init.d
    │   └── sysconfig
    │       └── network-scripts
    ├── lib
    │   └── modules
    ├── lib64
    ├── proc
    ├── sbin
    ├── sys
    ├── tmp
    ├── usr
    │   └── local
    │       ├── bin
    │       └── sbin
    └── var
        ├── lock
        ├── log
        └── run

4、文件元素信息詳解和修改文件時間戳信息詳解

上面touch命令和stat命令已經講解過

5、定義命令的別名,如何在命令中引用另一個命令的執行結果

功能說明:設置命令的別名。
語  法:alias[別名]=[指令名稱]
參  數 :若不加任何參數,則列出目前所有的別名設置。


說明:用戶可利用alias,自定指令的別名。若僅輸入alias,則可列出目前所有的別名設置?!lias的效力僅及于該次登入的操作。若要每次登入是即自動設好別名,可在/etc/profile或自己的~/.bashrc中設定指令的別名。

[root@localhost test1]# alias 
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

[root@localhost test1]# alias  ss='ss -tnl'
[root@localhost test1]# alias|grep ss 
alias ss='ss -tnl'
[root@localhost test1]# ss
State       Recv-Q Send-Q    Local Address:Port                   Peer Address:Port              
LISTEN      0      128                   *:22                                *:*                  
LISTEN      0      100           127.0.0.1:25                                *:*                  
LISTEN      0      128                  :::22                               :::*                  
LISTEN      0      100                 ::1:25                               :::*

6、顯示/var下以所有以l開頭,以一個小寫字母結尾,且中間至少出現一位數字或者字符的目錄或者文件

[root@localhost tmp]# ls -d /var/l*[0-9]*[[:lower:]]
/var/l123a  /var/ls123a  /var/ls123ca

7、顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄

globbing:文件名通配(整體文件名匹配,而非部分),通配符
		匹配模式:元字符
			*:匹配任意長度的任意字符
				pa*, *pa*, *pa, *p*a*
					pa, paa, passwd
			?:匹配任意單個字符
				pa?, ??pa, p?a, p?a?
					pa, paa, passwd
			[]:匹配指定范圍內的任意單個字符
				有幾種特殊格式:
					[a-z], [A-Z], [0-9], [a-z0-9]
					[[:upper:]]:所有大寫字母
					[[:lower:]]:所有小寫字母
					[[:alpha:]]:所有字母
					[[:digit:]]:所有數字
					[[:alnum:]]:所有的字母和數字
					[[:space:]]:所有空白字符
					[[:punct:]]:所有標點符號					
			[^]:匹配指定范圍外的任意單個字符
                	非大寫字母:[^[:upper:]]
                	非數字:[^0-9]
                	非數字和非字母[^[:alnum:]]
[root@localhost test1]# touch /etc/1aaa1
[root@localhost test1]# touch /etc/1aaa
[root@localhost test1]# mkdir /etc/1aaab
[root@localhost test1]# ls -d /etc/[0-9]*[^0-9]
/etc/1aaa  /etc/1aaab

8、顯示/etc目錄下,以非字母開頭,后面跟了一個字母以及其它任意長度任意字符的文件或者目錄

[root@localhost test1]# ls -d /etc/[^[:alpha:]][[:alpha:]]*
/etc/1aaa  /etc/1aaa1  /etc/1aaab

9、在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名如:tfile-2016-05-27-09-32-22

[root@localhost tmp]# ls
[root@localhost tmp]# date
2016年 12月 06日 星期二 04:04:33 CST
[root@localhost tmp]# mkdir tfile-`date +%F-%H-%M-%S`
[root@localhost tmp]# ls
tfile-2016-12-06-04-04-34

一般此用法用在日志切割上,做定時任務在每天晚上0點0分把前一天的日志和今天的日志分開,方便查看
[root@localhost tmp]# date
2016年 12月 06日 星期二 04:21:50 CST
[root@localhost tmp]# ls
[root@localhost tmp]# touch tomcat8080-$(date -d "yesterday" +%Y%m%d).log
[root@localhost tmp]# ls
tomcat8080-20161205.log

時間同步,一般服務器在上架后就需要對系統時間做同步,做定時任務
0 0 * * * /usr/sbin/ntpdate cn.pool.ntp.org >/dev/null

10、復制/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄

[root@localhost test1]# ls -d  /etc/p*[^0-9]
/etc/pam.d    /etc/pki       /etc/popt.d   /etc/prelink.conf.d  /etc/profile.d
/etc/passwd   /etc/plymouth  /etc/postfix  /etc/printcap        /etc/protocols
/etc/passwd-  /etc/pm        /etc/ppp      /etc/profile         /etc/python
[root@localhost test1]# cp -r /etc/p*[^0-9] /tmp/mytest1
[root@localhost test1]# ls /tmp/mytest1
pam.d   passwd-  plymouth  popt.d   ppp             printcap  profile.d  python
passwd  pki      pm        postfix  prelink.conf.d  profile   protocols

11、復制/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中

[root@localhost test1]# ls -d  /etc/*.d
/etc/bash_completion.d  /etc/grub.d          /etc/pam.d           /etc/rc3.d      /etc/statetab.d
/etc/binfmt.d           /etc/init.d          /etc/popt.d          /etc/rc4.d      /etc/sudoers.d
/etc/chkconfig.d        /etc/ld.so.conf.d    /etc/prelink.conf.d  /etc/rc5.d      /etc/sysctl.d
/etc/cron.d             /etc/logrotate.d     /etc/profile.d       /etc/rc6.d      /etc/tmpfiles.d
/etc/depmod.d           /etc/modprobe.d      /etc/rc0.d           /etc/rc.d       /etc/xinetd.d
/etc/dnsmasq.d          /etc/modules-load.d  /etc/rc1.d           /etc/rsyslog.d  /etc/yum.repos.d
/etc/dracut.conf.d      /etc/my.cnf.d        /etc/rc2.d           /etc/rwtab.d

[root@localhost test1]# cp -r  /etc/*.d /tmp/mytest2
[root@localhost test1]# ls /tmp/mytest2
bash_completion.d  dnsmasq.d      logrotate.d     popt.d          rc2.d  rc.d        sysctl.d
binfmt.d           dracut.conf.d  modprobe.d      prelink.conf.d  rc3.d  rsyslog.d   tmpfiles.d
chkconfig.d        grub.d         modules-load.d  profile.d       rc4.d  rwtab.d     xinetd.d
cron.d             init.d         my.cnf.d        rc0.d           rc5.d  statetab.d  yum.repos.d
depmod.d           ld.so.conf.d   pam.d           rc1.d           rc6.d  sudoers.d

12、復制/etc目錄下所有以l或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄

[root@localhost test1]# ls -d /etc/[lmn]*.conf
/etc/ld.so.conf     /etc/libuser.conf  /etc/logrotate.conf  /etc/mke2fs.conf
/etc/libaudit.conf  /etc/locale.conf   /etc/man_db.conf     /etc/nsswitch.conf
[root@localhost test1]# mkdir /etc/mytest3
[root@localhost test1]# cp -r /etc/[lmn]*.conf /etc/mytest3

原創文章,作者:sheng,如若轉載,請注明出處:http://www.www58058.com/63313

(0)
shengsheng
上一篇 2016-12-11
下一篇 2016-12-12

相關推薦

  • 馬哥Linux學習之查詢篇(命令查詢和文件查詢)

        Linux運維工作一般都使用命令完成,在如此多的各種命令中,要想全部記住顯然是不太可能也是不必要的,另外,文件的查找在日常操作中也是必不可少的。下面我就總結一下Linux中如何查找命令以及文件。     命令的運行文件路徑查詢。這個查找的方法是同樣是使用命令,這個命令叫w…

    Linux干貨 2015-04-13
  • 在centos6.9上實現軟RAID

    在centos6.9上實現軟RAID 什么是RAID?     RAID,全稱Redundant Arrays of Inexpensive(Independent)Disks。簡單翻譯叫磁盤陣列。    通俗一點講就是多個磁盤合成一個“陣列”來提供更好的性能、冗余,或者兩者都提…

    Linux干貨 2017-08-12
  • linux 用戶與組管理詳解

    ##用戶與組的分類 Linux系統對用戶分配如下: -系統管理員:root -普通用戶:普通用戶分為以下兩種           系統用戶:系統用戶通常是不可登陸的,執行某些服務及進程的帳號           登錄用戶:一般用戶,    …

    Linux干貨 2017-04-05
  • 解決Redis 延遲故障

    前一段時間redis客戶端在使用php connect 連接redis 的經常報一個redis server went away 等信息。 首先想到的想到的是reids超時設置的問題,timeout、tcp-keepalive、以及php的default_socket_timeout時間  127.0.0.1:6381> CONFI…

    Linux干貨 2016-02-14
  • lamp安裝配置詳細過程(把以前的筆記貼上來)

    準備; 首先進入/usr/local/目錄 #cd /usr/local 刪除所有安裝過的php mysql apache 以及libxml 首先查看目前 /usr/local目錄下面的內容 #ls –l 如果看到php5 php apache2 apache mysql mysql5 libxml libxml2字樣的目錄都將其刪除具體命令如下 #rm –…

    Linux干貨 2015-05-01
  • SElinux配置httpd

    一、啟用SELinux策略并安裝httpd服務,改變網站的默認主目錄為/website,添加SELinux文件標簽規則,使網站可訪問     1、修改selinux策略并重啟 [root@localhost ~]# vim /etc/selinux/config# This file controls the stat…

    Linux干貨 2016-09-19

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-12-16 23:11

    贊~總結的很詳細~繼續加油~

欧美性久久久久