1. 程式人生 > >Linux學習之檔案管理命令

Linux學習之檔案管理命令

1、ls命令:- list directory contents

ls命令用於列出目標目錄下所有子目錄和檔案

(1)使用格式:

 ls [OPTION]... [FILE]...

(2)option:

ls -a:顯示所有檔案,包括隱藏檔案

[[email protected] /]# ls -a /recover
.  ..  cptest  temp  test

ls -A:顯示除了 · 和 · · 之外的所有檔案

[[email protected] /]# ls -A /recover
cptest  temp  test

ls -a /path

:顯示指定路徑下的檔案
ls -l:long-長格式列表,顯示檔案的詳細屬性資訊

[[email protected] /]# ls -l 
lrwxrwxrwx.   1 root root     7 Oct 11 08:36 bin -> usr/bin
dr-xr-xr-x.   5 root root  1024 Oct 11 09:43 boot

ls -h:將檔案大小轉換為易識別的單位——轉換後為非精確數值

[[email protected] /]# ls -l /recover
total 12
drwxr-xr-x.  4 root root 4096 Nov 24 23:20 cptest
drwxr-xr-x. 11 root root 4096 Nov 24 23:17 temp
drwxr-xr-x.  2 root root 4096 Nov 25 02:05 test
[
[email protected]
/]# ls -hl /recover total 12K drwxr-xr-x. 4 root root 4.0K Nov 24 23:20 cptest drwxr-xr-x. 11 root root 4.0K Nov 24 23:17 temp drwxr-xr-x. 2 root root 4.0K Nov 25 02:05 test

ls -d:將目錄像檔案一樣顯示,而非顯示此目錄下的檔案
ls -ld:檢視目錄的詳細資訊,而非目錄下檔案的詳細資訊
ls -r:逆序顯示檔案——reverse

[[email protected] /]# ls -l /recover
total 12
drwxr-xr-x.  4 root root 4096 Nov 24 23:20 cptest
drwxr-xr-x. 11 root root 4096 Nov 24 23:17 temp
drwxr-xr-x.  2 root root 4096 Nov 25 02:05 test
[
[email protected]
/]# ls -rl /recover total 12 drwxr-xr-x. 2 root root 4096 Nov 25 02:05 test drwxr-xr-x. 11 root root 4096 Nov 24 23:17 temp drwxr-xr-x. 4 root root 4096 Nov 24 23:20 cptest

ls -R:遞迴顯示目錄下所有的檔案和子目錄

補充:

1、查詢結果說明
	d r-x r-x r-x.   5 root root  1024 Oct 11 09:43 boot
	1  2    3   4    5  6     7     8        9       10
	1——d:表示檔案型別
	2——rwx:表示檔案屬主許可權
	3——rwx:表示檔案屬組許可權
	4——rwx:表示檔案其他使用者許可權(非屬主、屬組)
	5——5:表示檔案被硬連結次數
	6——root:表示檔案屬主
	7——root:表示檔案屬組
	8——1025:表示檔案大小(以位元組為單位(用-h選項換算單位))
	9——oct 11  09:43——表示檔案最後一次修改時間(過去的時間)
	10——boot:表示檔名
2、硬連結與軟連線概念:
	(1)inode號:元資料中的 inode 號(inode 是檔案元資料的一部分但其並不包含檔名,inode 號即索引節點號)才是檔案的唯一標識而非檔名。
	(2)硬連結:若一個 inode 號對應多個檔名,則稱這些檔案為硬連結。
		硬連結的特點:
			檔案有相同的 inode 及 data block;
			只能對已存在的檔案進行建立;
			不能交叉檔案系統進行硬連結的建立;
			不能對目錄進行建立,只可對檔案建立;
			刪除一個硬連結檔案並不影響其他有相同 inode 號的檔案(只有刪除最後一連結時才會刪除檔案本身)
	
	(3)軟連結:若檔案使用者資料塊中存放的內容是另一檔案的路徑名的指向,則該檔案就是軟連線。(軟連結就是一個普通檔案,只是資料塊內容有點特殊。軟連結有著自己的 inode 號以及使用者資料塊)
		軟連結特點:
		軟連結有自己的檔案屬性及許可權等;
			可對不存在的檔案或目錄建立軟連結;
			軟連結可交叉檔案系統;
			軟連結可對檔案或目錄建立;
			建立軟連結時,連結計數 i_nlink 不會增加;
			刪除軟連結並不影響被指向的檔案,但若被指向的原檔案被刪除,則相關軟連線被稱為死連結(即 dangling link,若被指向路徑檔案被重新建立,死連結可恢復為正常的軟連結)。

	(4)連結的特點:連結為 Linux 系統解決了檔案的共享使用,還帶來了隱藏檔案路徑、增加許可權安全及節省儲存等好處
3、路徑表示
	· :表示當前路徑
	·· :表示當前路徑的上一級目錄路徑
4、變數檢視——使用echo $name進行檢視
	echo $PWD:表示當前工作目錄
	echo $OLDPWD:表示上一次的工作目錄
檔案型別分為以下幾種:
“-”:表示常規檔案——即f
“d”:directory——目錄檔案(完成路徑對映)
“b”:block device——塊裝置檔案(支援以block為單位進行隨機訪問)
“c”:character device——字元裝置(支援以character為單位進行線性訪問)
	Major number:主裝置號,用於標識裝置型別,進而確定載入的驅動程式
	major number:次裝置號,用於標識同一型別中的不同裝置(裝置號之前使用8位二進位制表示)
“l”:symbolic link——符號連結檔案(如:Windows快捷方式或軟連線)
“s”:socker——套接字檔案
“p”:pipe——命名管道

2、pwd命令:- print name of current/working directory

pwd命令用於顯示當前路徑的完整路徑

(1)使用格式:

pwd [OPTION]...

(2)option:
pwd -l:目錄連線連結時,輸出連線路徑
pwd -p:顯示出實際路徑,而非使用連線(link)路徑;pwd顯示的是連線路徑

3、cd命令:- Change the shell working directory.

cd命令用於切換當前工作目錄到指定的工作目錄。

(1)使用格式:

cd [option]  

(2)option:
cd ~:表示切換到自己的家目錄
cd ~ name:表示切換到指定使用者名稱的家目錄
cd -:表示在上一次所在目錄與當前目錄來回切換
注意:bash中‘~’表示家目錄;cd可用於相對路徑也可用於絕對路徑

補充:

1、相對路徑和絕對路徑
	(1)檔案路徑:就是檔案在電腦中的位置
	(2)相對路徑:相對路徑是以你當前的目錄為起點,以你到達的目錄為終點的路徑。比如:usr/local/bin這裡假設當前目錄為根目錄。
		 注意:表示相對路徑時我們並沒有加上表示當前目錄的那個.,而是直接以目錄名usr開頭,因為這個usr目錄是在根目錄“/”下,可以省略那個.
	(3)絕對路徑:絕對路徑就是以根“/”目錄為起點,以你所到達的目錄為終點,表現形式為/usr/local/bin。

4、cat命令- concatenate files and print on the standard output

cat命令用於連線檔案或標準輸入並列印。這個命令常用來顯示檔案內容,或者將幾個檔案連線起來顯示,或者從標準輸入讀取內容並顯示,它常與重定向符號配合使用。

(1)使用格式:

cat [OPTION]... [FILE]...

(2)option:
cat -n:表示顯示每行的行號——即對每行編號

[[email protected] recover]# cat -n ./temp/test.txt
     1	sdfwag
     2	w
     3	eg
     4	sd

cat -E:表示在每行末尾顯示$——即在每行末尾顯示結束符

[[email protected] recover]# cat -E ./temp/test.txt
sdfwag$
w$
eg$
sd$

5、tac命令:- concatenate and print files in reverse

tac命令用於文字檢視的工具,與cat相同,但是顯示順序與cat相反

(1)使用格式:

 tac [OPTION]... [FILE]...

(2)option:
tac -b:表示在行前面非行尾新增分隔標誌

wsdfwag[[email protected] recover]# tac ./temp/test.txt    ==>表示不換行

tac -r:表示將分隔標誌視作正則表示式來解析
tac -s<字元>:表示 使用指定字串代替換行作為分隔標誌

6、file命令:— determine file type

file命令用於探測給定檔案的型別。file命令對檔案的檢查分為檔案系統、魔法幻數檢查和語言檢查3個過程

(1)使用格式:

file [option][FILE] 

(2)option:

file -b:表示不顯示檔名稱

[[email protected] ~]# file -b install.log 
UTF-8 Unicode text

7、echo命令:- display a line of text

echo命令用於顯示文字(一般只起提示作用)

(1)使用格式:

	echo [SHORT-OPTION]... [STRING]...
	echo LONG-OPTION

(2)option:
echo -n:表示不自動進行換行
echo -e:表示讓轉義字元生效
echo -e:也可以用來控制顏色顯示

[[email protected] recover]# echo -e "test\\ test1\ntest\t"
test\ test1
test

[[email protected] recover]# echo -e  "\033[31mhello.my bestfriend\033[0m test one"
hello.my bestfriend test one

echo ‘string’(“string”):表示引用

補充:

1、轉義字元:
	 \a 發出警告聲;
   	 \b 刪除前一個字元;
  	 \c 最後不加上換行符號;
  	 \f 換行但游標仍舊停留在原來的位置;
  	 \n 換行且游標移至行首;
  	 \r 游標移至行首,但不換行;
  	 \t 插入tab;
  	 \v 與\f相同;
  	 \\ 插入\字元;
   	 \nnn 插入nnn(八進位制)所代表的ASCII字元;
2、強引用與弱引用
	(1)強引用:變數引用不執行替換—— ‘’ 單引號表示
	(2)弱引用:變數引用會被替換—— “” 雙引號表示
3、變數引用正規符號:${name}
	    也可以使用:$name

8、date命令:- print or set the system date and time

date命令用於顯示或設定系統的日期與時間。

(1)使用格式:

    date [OPTION]... [+FORMAT]
    date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

(2)option:
date:顯示日期和時間
date -u [MMDDhhmm[[CC]YY][.ss]]
date [MMDDhhmm[[CC]YY][.ss]]:設定時間日期

[[email protected] recover]# date 112713142018.10
Tue Nov 27 13:14:10 EST 2018
[[email protected] recover]# date -u 112713142018.10
Tue Nov 27 13:14:10 EST 2018

date -d “string”:根據指定的string時間顯示

[[email protected] recover]# date -d tomorrow
Wed Nov 28 13:21:57 EST 2018

date +%F:根據自定義格式顯示時間

[[email protected] recover]# date +%m-%d
11-27

補充:

1、string有以下幾種
	yesterday:顯示昨天這個時刻的時間
	today:顯示今天這個時刻的時間
	tomorrow:顯明天這個時刻的時間
2、時間格式有以下幾種
	%H 小時(以00-23來表示)。 
	%I 小時(以01-12來表示)。 
	%K 小時(以0-23來表示)。 
	%l 小時(以0-12來表示)。 
	%M 分鐘(以00-59來表示)。 
	%P AM或PM。 
	%r 時間(含時分秒,小時以12小時AM/PM來表示)。 
	%s 總秒數。起算時間為1970-01-01 00:00:00 UTC。 
	%S 秒(以本地的慣用法來表示)。 
	%T 時間(含時分秒,小時以24小時制來表示)。 
	%X 時間(以本地的慣用法來表示)。 
	%Z 市區。 
	%a 星期的縮寫。 
	%A 星期的完整名稱。 
	%b 月份英文名的縮寫。 
	%B 月份的完整英文名稱。 
	%c 日期與時間。只輸入date指令也會顯示同樣的結果。 
	%d 日期(以01-31來表示)。 
	%D 日期(含年月日)。 
	%j 該年中的第幾天。 
	%m 月份(以01-12來表示)。 
	%U 該年中的週數。 
	%w 該周的天數,0代表週日,1代表週一,異詞類推。 
	%x 日期(以本地的慣用法來表示)。 
	%y 年份(以00-99來表示)。 
	%Y 年份(以四位數來表示)。 
	%n 在顯示時,插入新的一行。 
	%t 在顯示時,插入tab。 
	MM 月份(必要) 
	DD 日期(必要) 
	hh 小時(必要) 
	mm 分鐘(必要)
	ss 秒(選擇性) 

9、clock命令:- query or set the hardware clock (RTC)

clock命令用於查詢或設定硬體的時鐘

(1)使用格式:

hwclock [function] [option...]

(2)option:
clock -s:以硬體為準,將系統時間改為與硬體時間相同
clock -w:以系統為準,將硬體時間調為與系統時間相同

[[email protected] recover]# clock
	Tue 27 Nov 2018 12:37:45 AM EST  -0.924185 seconds
[[email protected] recover]# date
	Tue Nov 27 13:36:09 EST 2018
[[email protected] recover]# clock -w
[[email protected] recover]# date
	Tue Nov 27 13:36:32 EST 2018
[[email protected] recover]# clock
	Tue 27 Nov 2018 01:36:37 PM EST  -0.248309 seconds

注意:Linux有兩套時鐘
系統時鐘:啟動時從硬體讀取日期和時間,之後不再聯絡,由Linux核心通過CPU工作平率計時。
硬體時鐘:由Bios主機板上的鈕釦電池提供電源的時鐘。

10、cal命令:- display a calendar

cal命令用於顯示當前日曆,或者指定日期的日曆。

(1)使用格式:

	cal [options] [[[day] month] year]

(2)option:
cal -1:顯示當前單月輸出——或任意指定的月份或年的日曆顯示;

[[email protected] recover]# cal -1
    November 2018   
Su Mo Tu We Th Fr Sa
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

cal -3:顯示臨近三個月的日曆;
cal -s:將星期日作為月的第一天;
cal -m:將星期一作為月的第一天;
cal -j:顯示“julian”日期;
cal -y:顯示當前年的日曆。
11、which命令:- shows the full path of (shell) commands.

which命令用於檢視命令的完整路徑

(1)使用格式:

	which [options] [--] programname [...]

(2)option

which --skip-alias:查詢時忽略別名

	[[email protected] lib]# which ls
	alias ls='ls --color=auto'
		/bin/ls
	[[email protected] lib]# which --skip-alias ls
	/bin/ls

12、whereis命令:- locate the binary, source, and manual page files for a command

whereis命令用於顯示二進位制檔案路徑,原始碼檔案路徑,手冊頁路徑。

(1)使用格式:

	whereis [options] [-BMS directory... -f] name...

(2)option
whereis -b:只顯示we進位制檔案路徑
whereis -m:只顯示手冊檔案路徑
whereis -s:只顯示原始碼檔案路徑

	[[email protected] lib]# whereis -b ls
	ls: /usr/bin/ls
	[[email protected] lib]# whereis -m ls
	ls: /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz
	[[email protected] lib]# whereis -s ls

13、who命令:- show who is logged on

who命令用於檢視登入使用者資訊

(1)使用格式

	who [OPTION]... [ FILE | ARG1 ARG2 ]

(2)option
who -b:顯示最近一次系統啟動時間
who -d:顯示死程序
who -l:顯示登入程序
who -u:顯示登入的使用者
who -r:顯示執行級別

	[[email protected] lib]# who -b
         	system boot  2018-11-26 05:08
	[[email protected] lib]# who -d
	[[email protected] lib]# who -l
	[[email protected] lib]# who -u
	root     :0           2018-11-26 05:09   ?          2825 (:0)
	root     pts/0        2018-11-26 05:10  old         3389 (:0)
	root     pts/1        2018-11-26 05:13   .          4507 (192.168.1.103)
	root     pts/2        2018-11-26 05:14 00:11        4545 (192.168.1.103)
	[[email protected] lib]# who -r
         	run-level 5  2018-11-26 05:09

14、w命令:- Show who is logged on and what they are doing.

w命令用於顯示登入的使用者以及這些使用者在做什麼

(1)使用格式

	w [options] user [...]

(2)option
w -s:以短格式顯示,不顯示登入時間,jcpu、pcpu

	[[email protected] lib]# w
 	20:39:05 up 1 day,  2:31,  4 users,  load average: 0.00, 0.01, 0.05
	USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
	root     :0       :0               Mon05   ?xdm?  10:35   0.56s gdm-session-worker [pam/gdm-password]
	root     pts/0    :0               Mon05   39:25m  0.04s  0.04s /bin/bash
	root     pts/1    192.168.1.103    Mon05    1.00s  0.54s  0.04s w
	root     pts/2    192.168.1.103    Mon05    2:57   0.26s  0.00s less -s
	[[email protected] lib]# w -s
	 20:41:13 up 1 day,  2:33,  4 users,  load average: 0.00, 0.01, 0.05
	USER     TTY      FROM              IDLE WHAT
	root     :0       :0               ?xdm?  gdm-session-worker [pam/gdm-password]
	root     pts/0    :0               39:28m /bin/bash
	root     pts/1    192.168.1.103     1.00s w -s
	root     pts/2    192.168.1.103     5:05  less -s

15、mkdir命令:- make directories

mkdir命令用於建立目錄

(1)使用格式

	mkdir [OPTION]... DIRECTORY...
		mkdir命令是對基名的操作
		basename /path/filename
		filename就是基名
	注意:(mkdir沒有使用option時)路徑基名為mkdir的作用物件,若基名前路徑不存在則報錯。

(2)option
mkdir -p:自動按需建立父目錄
mkdir -v:(verbose)顯示詳細過程

[[email protected] test]# mkdir -pv ./test12/testa/testv
mkdir: created directory ‘./test12’
mkdir: created directory ‘./test12/testa’
mkdir: created directory ‘./test12/testa/testv’

mkdir -m mode:直接給定許可權;否則建立的檔案為預設模式

	[[email protected] test]# mkdir -m 777 test2
	[[email protected] test]# ls -ll
	total 8
	-rw-r--r--. 1 root root   81 Nov 25 02:05 mvtest
	drwxrwxrwx. 2 root root 4096 Nov 27 21:52 test2

16、rmdir命令:- remove empty directories

rmdir命令用於刪除空目錄

注意:若目錄為非空目錄使用rmdir會報錯

(1)使用格式

	rmdir [OPTION]... DIRECTORY...

(2)option
rmdir -p:刪除某目錄後,若父目錄為空則一併刪除
rmdir -v:顯示執行過程

	[[email protected] test]# rmdir -pv ./test12/testa/testv
	rmdir: removing directory, ‘./test12/testa/testv’
	rmdir: removing directory, ‘./test12/testa’
	rmdir: removing directory, ‘./test12’
	rmdir: removing directory, ‘.’
	rmdir: failed to remove directory ‘.’: Invalid argument

17、tree命令:- list contents of directories in a tree-like format.

以樹狀結構顯示目錄層級結構

(1)使用格式

tree directory

(2)option
tree:顯示當前所有層的層級結構
tree -L n directory:顯示指定目錄的n層的層級結構

[[email protected] recover]# tree -L 2
.
├── a_c
├── a_d
├── b_c
├── b_d
├── cptest
│   ├── etc
│   ├── home
│   └── testcp
├── temp
│   ├── etc
│   ├── q_y
│   ├── q_z
│   ├── system-release -> centos-release
│   ├── te

18、more命令:- file perusal filter for crt viewing

more命令用於檢視檔案——翻屏至檔案尾部後自動退出

(1)使用格式

	more [options] file [...]

(2)option

	[[email protected] /]# more /etc/profile.d/welcome.sh
	echo "歡迎進入Linux世界,盡情期待!"

19、less命令:- opposite of more

less命令用於檢視檔案——man命令就是呼叫的less命令

(1)使用格式

	less FILE

(2)option

[[email protected] /]#less /etc/profile.d/welcome.sh
echo "歡迎進入Linux世界,盡情期待!"

20、head命令:- output the first part of files

head命令用於檢視文字——預設檢視檔案前10行

(1)使用格式

head [OPTION]... [FILE]...

(2)option
head -n x:指定檢視檔案前x行

[[email protected] test]# head -n 3 mvtest
sdfwag
w
eg

21、tail命令:- output the last part of files

tail命令用於顯示檔案後10行

(1)使用格式

	tail [OPTION]... [FILE]...

(2)option
tail -n x:指定顯示後x行內容

	[[email protected] test]# tail -n 5 mvtest
	s
	dg
	a
	dga

tail -f:顯示檔案尾部並不退出,可以追加輸入進來的新行值,直接顯示。

	[[email protected] test]# tail -n 2 -f  mvtest
	dga

	testwe es
	sgd
	sgs
	dg
	sgwe

22、stat命令:- display file or file system status

stat命令用於顯示檔案或檔案系統狀態

(1)使用格式

	stat [OPTION]... FILE...

(2)option
注意:檔案分兩類資料:第一類就是元資料——metdate檔案的屬性;第二類就是真資料——date真正的資料。
stat看到的都是元資料,而cat、tail等檔案看到的是真正的資料流

[[email protected] test]# stat mvtest
  File: ‘mvtest’
  Size: 81        	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 266993      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:default_t:s0
Access: 2018-11-27 19:49:16.726183451 -0500
Modify: 2018-11-25 02:05:42.105665019 -0500
Change: 2018-11-25 02:05:42.107665045 -0500
 Birth: -
 
1、 File:檔名
2、 Size:檔案大小
3、Blocks:檔案佔用的資料塊
4、IO Block:檔案所佔資料塊的塊大小
5、Device: 硬體,既說明該檔案在硬碟的那個柱面
6、Inode: 節點號
7、Links:連結次數
8、Access:檔案的總許可權
9、Uid:檔案的屬主許可權
10、Gid:檔案的屬組許可權
11、Context:安全上下文
12、Access:最近一次被訪問的時間
13、Modify:檔案內容最近一次更改的時間
14、Change: 檔案屬性最近一次更改的時間
15、Birth:建立的時間

23、touch命令:- change file timestamps

touch命令用於改變時間截

(1)使用格式

touch [OPTION]... FILE...

(2)option
touch -a:僅改變Access時間
touch -c:當filename不存在時,也不會建立新檔案或路徑——預設時要建立和安裝
touch -m:僅改變modify時間
touch -t [[CC]YY]MMDDhhmm[.ss]:用於自定義更改時間

[[email protected] test]# touch -t 201811231225.03 mvtest
[[email protected] test]# stat mvtest
  File: ‘mvtest’
  Size: 81        	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 266993      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:default_t:s0
Access: 2018-11-23 12:25:03.000000000 -0500
Modify: 2018-11-23 12:25:03.000000000 -0500
Change: 2018-11-27 20:31:10.365772990 -0500
 Birth: -

24、cp命令:- copy files and directories

cp命令用於將原始檔複製到目的地的目標檔案中

(1)使用格式

cp [OPTION]... [-T] SOURCE DEST
單個檔案複製;目標檔案可以是一個檔案也可是目錄
	a、若目標檔案不存在,則事先建立此目標檔案,並將原始檔資料流複製到目標檔案中
	b、若目標檔案存在,若目標檔案是非目錄檔案——則複製原始檔資料流覆蓋目標檔案
					    若目標檔案時目錄檔案——則先在目標檔案下建立一個與原始檔名相同的檔案,並將原始檔資料複製到目標檔案中。
cp [OPTION]... SOURCE... DIRECTORY
多個檔案複製,目標檔案必須是一個目錄
cp [OPTION]... -t DIRECTORY SOURCE...
多個檔案複製,只不過目標檔案和原始檔相反
	a、若目標檔案不存在:則報錯
	b、若目標檔案存在,若目標檔案是非目錄檔案——則報錯
					     若目標檔案是目錄——分別複製每個檔案至目標檔案中,並保持原名
	c、複製時需要加上-r引數才能複製目錄,不然會報錯				

補充:

	A、原始檔:要複製的檔案
	B、目標檔案:將檔案複製到目標地點中的檔案
	C、複製主要針對資料而言(非元資料),稱為流式資料(一個位元組一個位元組)

(2)option
cp -i:互動式,提醒使用者確認
cp -f:強制覆蓋目標檔案
cp -r:遞迴複製目錄
cp -d:複製符號連結檔案本身,而非複製其指向的原始檔

[[email protected] test]# cp -d /etc/redhat-release /recover
[[email protected] recover]# ll
total 28
drwxr-xr-x.  2 root root 4096 Nov 27  2018 a_c
drwxr-xr-x.  2 root root 4096 Nov 27  2018 a_d
drwxr-xr-x.  2 root root 4096 Nov 27  2018 b_c
drwxr-xr-x.  2 root root 4096 Nov 27  2018 b_d
drwxr-xr-x.  4 root root 4096 Nov 24 23:20 cptest
lrwxrwxrwx.  1 root root   14 Nov 27 21:46 redhat-release -> centos-release
此時redhat-release -> centos-release只是連結檔案而不是檔案本身。

cp -a:複製時保留檔案所有屬性,用於實現歸檔
cp -p:-p (保持) – 對於每個原檔案(或目錄),在複製時也複製下述特性:

  • 最後一次修訂時間與最後一次訪問時間。
  • 所屬使用者ID和所屬組ID(僅在有許可權如此做時)。
  • 檔案許可權位以及SUID和SGID許可權位。
    –preserve
    mode:許可權
    owership:從屬關係
    timestamps:時間截
    context:安全上下文
    xattr:擴充套件屬性
    links:符號連結
    all:上訴所有屬性

25、mv命令: - move (rename) files

mv命令用於對檔案或目錄重新命名,或者將檔案從一個目錄移到另一個目錄中。

(1)使用格式

mv [OPTION]... [-T] SOURCE DEST
單檔案移動若沒有建立指定則建立一個自定的目標名,再將資料流移動到目標檔案中
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
多檔案移動時不需要像cp一樣加-r選項

(2)option
mv -i:互動式刪除,提醒使用者確認
mv -f:強制移動檔案

更改檔名
[[email protected] recover]# ls
cptest  test  ttp
[[email protected] recover]# mv ttp temp
[[email protected] recover]# ls
cptest  temp  test

26、rm命令:- remove files or directories

rm命令用於刪除一個目錄中的一個或多個檔案或目錄,如果沒有使用- r選項,則rm不會刪除目錄。如果使用 rm 來刪除檔案,通常仍可以將該檔案恢復原狀。

(1)使用格式

rm [OPTION]... FILE...

(2)option
rm -r:遞迴刪除檔案
rm -f:強制刪除檔案

[[email protected] recover]# rm -rfv ./cptest/home
removed directory: ‘./cptest/home/hu/Music’
removed ‘./cptest/home/hu/.bash_profile’
removed ‘./cptest/home/hu/.bash_logout’

注意:自建回收站——所有檔案建議不要直接刪除,而是移動到自建回收站中,確認好了以後再刪除

27、set命令:- Set or unset values of shell options and positional parameters.

set命令用於設定或撤銷shell選項的值和位置引數。

(1)使用格式

	set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]

(2)option
set +C:撤銷防覆蓋重定向特性
set -C:開啟防覆蓋重定向特性

A、設定重定向防覆蓋已存在資料夾

	[[email protected] io]# set -C						==>開啟防覆蓋重定向
	[[email protected] io]# cat test1.txt > test.txt
	-bash: test.txt: cannot overwrite existing file
	[[email protected] io]# set +C						==>取消防覆蓋重定向
	[[email protected] io]# cat test1.txt > test.txt

B、若在開啟防覆蓋設定後,任然確定要重定向覆蓋,可以使用 | 來強制重定向覆蓋

	[[email protected] io]# cat test1.txt > test.txt
	-bash: test.txt: cannot overwrite existing file
	[[email protected] io]# cat test1.txt >| test.txt

28、tr命令:- translate or delete characters

tr命令用於將輸入資料當中的字元,凡是在SET1定義範圍內出現的,全部對位轉換為SET2出現的字元。

(1)使用格式

	tr [OPTION]... SET1 [SET2]

(2)option
tr -d:刪除SET1中指定的字元,並不做轉換
tr -c:取代所有不屬於第一字符集的字元

[[email protected] io]# tr -d [a-e] < ./test.txt     //指定刪除文中a到e的字母
sfsjgkfjgklfsgs
fg

fg
s
[[email protected] io]# cat test.txt
dsdfasdjgdkfjgdklfsgsd
fg
d
fg
sd

29、tee命令:- read from standard input and write to standard output and files

tee命令用於從標準輸入讀取資料的同時寫入標準輸出檔案中

(1)使用格式

tee [OPTION]... [FILE]...

(2)option

[[email protected] io]# tee test.txt   //單獨使用時就是將鍵盤輸入字字元儲存到檔案test1.txt中
test1
test1
test2
test2
^C
[[email protected] io]# cat test.txt
test1
test2

[[email protected] io]# cat test1.txt | tee test.txt |tr [a-z] [A-Z]     //將test1.txt中的資料讀出來通過管道送給test.txt檔案中,再通過管道將資料送給tr修改指定字元大小寫。
TEST1
TEST112
TEST23
TEST5443

30、chmod命令:- change file mode bits

chmod命令用於更改檔案的許可權

(1)使用格式

chmod [OPTION]... MODE[,MODE]... FILE...
	a、修改檔案以指定許可權定義,三類使用者用逗號隔開——每一個檔案都定義了三類許可權
	b、三類使用者:
		u——>屬主
		g——>屬組
		o——>其他
		a——>所有—all
	c、模式表示方法
		賦權表示法——直接操作一類使用者的所有許可權位
		如:u=rwx;g=rw;o=r;ug=rx;ugo=rw等後面的rwx自定義
			例:
				[[email protected] recover]# ll
				-rw-r--r--. 1 root root    7 Nov 29 01:12 test.txt		==>修改前
				[[email protected] recover]# chmod ogu=x test.txt
				---x--x--x. 1 root root    7 Nov 29 01:12 test.txt		==>修改後
		授權表示法——直接操作一類使用者的一個許可權位
		如:u+(rwx):表示額外多一位許可權
			g和o同樣;a+(rwx)可以直接寫成+(rwx)
			例:
				[[email protected] recover]# chmod ogu=x test.txt
				---x--x--x. 1 root root    7 Nov 29 01:12 test.txt		==>修改前
				[[email protected] recover]# chmod u+rw test.txt
				[[email protected] recover]# chmod g+r test.txt
				[[email protected] recover]# ll
				-rwxr-x--x. 1 root root    7 Nov 29 01:12 test.txt		==>修改後
		注意:chmod +w test.txt此時僅對屬組更改生效
		
chmod [OPTION]... OCTAL-MODE FILE...
	使用八進位制一併修改許可權
	例:
		[[email protected] recover]# ll
		-rwxr-x--x. 1 root root    7 Nov 29 01:12 test.txt		==>修改前
		[[email protected] recover]# chmod 624 test.txt
		[[email protected] recover]# ll
		-rw--w-r--. 1 root root    7 Nov 29 01:12 test.txt
		
chmod [OPTION]... --reference=RFILE FILE...
	使用參考檔案許可權修改當前檔案許可權使之與參考檔案許可權相同
	例:
		[[email protected] recover]# ll
		----------. 1 root root    0 Nov 29 07:12 cp.txt		==>被修改檔案修改前
		-rw--w-r--. 1 root root    7 Nov 29 01:12 test.txt		==>許可權參考檔案
		[[email protected] recover]# chmod --reference=./test.txt cp.txt
												 參考檔案   被修改檔案
		[[email protected] recover]# ll
		-rw--w-r--. 1 root root    0 Nov 29 07:12 cp.txt		==>被修改檔案修改後
		-rw--w-r--. 1 root root    7 Nov 29 01:12 test.txt		==>許可權參考檔案

(2)option
chmod -R:遞迴修改許可權——此option僅在授權表示法中實用

[[email protected] recover]# ll
drwxr-xr-x. 2 root root 4096 Nov 28 05:07 io		==>遞迴修改前
[[email protected] recover]# chmod -R 754 io
[[email protected] recover]# ll
drwxr-xr--. 2 root root 4096 Nov 28 05:07 io		==>遞迴修改後
[[email protected] recover]# ll io
-rwxr-xr--. 1 root root  0 Nov 28 05:13 test1.txt		==>遞迴修改後子檔案許可權
-rwxr-xr--. 1 root root 12 Nov 28 05:13 test.txt

注意:使用者只能修改屬主為自己的檔案的那些許可權
31、chown命令:- change file owner and group

chown命令用於修改檔案的屬主和屬組

(1)使用格式

	chown [OPTION]... [OWNER][:[GROUP]] FILE...	:此條格式可以僅用來修改屬主或屬組
	chown [OPTION]... --reference=RFILE FILE...		:使用參考檔案來更改檔案屬主和屬組

(2)option
chown -R :遞迴修改

-rw--w-r--. 1 root root    0 Nov 29 07:12 cp.txt		==>修改前
[[email protected] recover]# chown hu:jack cp.txt				==>修改檔案的屬主和屬組
[[email protected] recover]# ll
-rw--w-r--. 1 hu   jack    0 Nov 29 07:12 cp.txt

[[email protected] recover]# chown hu cp.txt
[[email protected] recover]# ll
-rw--w-r--. 1 hu   root    0 Nov 29 07:12 cp.txt		==>僅修改屬主

[[email protected] recover]# chown :hu cp.txt
[[email protected] recover]# ll
-rw--w-r--. 1 root   hu    0 Nov 29 07:12 cp.txt		==>僅修改屬組

32、chgrp命令:- change group ownership

chgrp命令可採用群組名稱或群組識別碼的方式改變檔案或目錄的所屬群組。使用許可權是超級使用者。——要被改變的組名必須要在/etc/group檔案記憶體在才行

(1)使用格式

兩種格式用法同chown命令
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...

注意:當用戶對目錄有寫許可權時,但對目錄下檔案沒有寫許可權時,不能修改檔案中內容,但是可以刪除檔案。

33、umask命令:

umask命令用來設定限制新建檔案許可權的發向掩碼——遮罩碼

A、生成檔案時預設許可權:666 - umask
B、生成目錄時預設許可權:777 - umask
注:檔案因為預設就沒有執行許可權,所以運用666 - umask時;若要減得的結果中有執行許可權則需要+1
	例:
	[[email protected] recover]# umask								==>查詢本機的掩碼
	0022
	檔案許可權=666-022(umask)=644——>無執行許可權
	644+1=645——>有執行許可權
C、修改umask
	例:
	[[email protected] recover]# umask 0024
	[[email protected] recover]# umask
	0024

注意:用命令設定的僅對當前shell有效
僅管理員能修改檔案的屬主和屬組

34、install命令:- copy files and set attributes

install命令的作用是安裝或升級軟體或備份資料,它的使用許可權是所有使用者。install命令和cp命令類似,都可以將檔案/目錄拷貝到指定的地點。但是,install允許你控制目標檔案的屬性。install通常用於程式的makefile,使用它來將程式拷貝到目標(安裝)目錄。

(1)使用格式

install [OPTION]... [-T] SOURCE DEST			==>單檔案或目錄複製
例:
	[[email protected] recover]# install -m 644 cp.txt cptest
	[[email protected] recover]# ll ./cptest
	total 0
	-rw-r--r--. 1 root root 0 Nov 29 08:45 cp.txt
	
install [OPTION]... SOURCE... DIRECTORY		==>將多問價複製到指定目錄
install [OPTION]... -t DIRECTORY SOURCE...	==>將檔案複製到指定目錄
例:
	[[email protected] recover]# install -m 644 cp.txt test.txt cptest
	[[email protected] recover]# ll ./cptest
	total 4
	-rw-r--r--. 1 root root  0 Nov 29 08:46 cp.txt
	-rw-r--r--. 1 root root 39 Nov 29 08:46 test.txt
	
install [OPTION]... -d DIRECTORY...			==>建立空目錄
例:
	[[email protected] recover]# install -d tt
	[[email protected] recover]# ls
	cptest  cp.txt  io  test.txt  tt

(2)option
install -m:設定檔案許可權,預設為775
install -o:設定目標檔案屬主
install -g:設定目標檔案屬組
install -d:建立空目錄

35、mktemp命令:- create a temporary file or directory

mktemp命令用於建立臨時檔案或目錄

(1)使用格式

mktemp [OPTION]... [TEMPLATE]

(2)option
mktemp -d:建立目錄而不建立檔案
mktemp -u:並不建立檔案,只是用於測試

[[email protected] ~]# mktemp /tmp/mytest.XXXX		——>. XXXX表示隨機字元至少三個
/tmp/mytest.TyTf
注意:mktemp會將建立的臨時檔名直接返回,因此可直接通過命令引用儲存起來
	且在tmp中建立的臨時檔案過段時間一般會自動刪除
例:[[email protected] recover]#  test=$(mktemp /tmp/mytest.XXXX)

36、grep命令: grep, egrep, fgrep - print lines matching a pattern

grep命令用於列印輸出使用者給定的模式內容——即搜尋整個檔案的每一行,使用使用者給定的模式—過濾條件,若某行匹配此模式則顯示出來。

注意:模式——即由正則表示式的元字元及文字所編寫出的過濾條件(預設顯示只要此行中有匹配的字元則全行顯示——貪婪模式顯示)

補充:

1、Linux上文字處理工具
	1)、grep:文字過濾工具(pattern—模式)工具——grep、egrep、fgrep
	2)、sed—stream editor:流編輯器,文字編輯工具
	3)、awk:Linux上實現為gawk,文字報告生成器——格式化文字
	
2、正則表示式——Regual Expression —RE/Regexp
	1)、正則表示式使用單個字串來描述、匹配一系列某個句法規則的字串,在很多文字編輯器裡面,正則表示式通常用來檢索、替換那些匹配某模式的文字。
	2)、正則表示式分類:
		A、基本正則表示式:Basic Regual Expression——BRE
		B、擴充套件正則表示式:Extend Regual Expression——ERE
	3)、基本正則表示式元字元
	第一類:字元匹配
		A、· :匹配任意單個字元
		例:
			[[email protected] recover]# grep "r..t" /etc/passwd
			root:x:0:0:root:/root:/bin/bash
			operator:x:11:0:operator:/root:/sbin/nologin
			ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
		B、[ ]:匹配指定範圍內任意單個字元
		例:
			[[email protected] recover]# grep "s[[:alpha:]]in" /etc/passwd
			bin:x:1:1:bin:/bin:/sbin/nologin
			daemon:x:2:2:daemon:/sbin:/sbin/nologin
			adm:x:3:4:adm:/var/adm:/sbin/nologin
		C、[^]:匹配指定範圍外的任意單個字元
	第二類:匹配次數——用在要指定其出現的次數的字元後,用於限定字元出現的次數,預設有多長匹配多長
		A、*:匹配其前面字元任意次
		例:
			[[email protected] recover]# grep "a*" cp.txt
			aaaddsdfsdfsdf
			aaaaaaasdjdsdfgd
		B、·*:匹配任意長度字元
		例:
			[[email protected] recover]# grep "a.*" cp.txt
			aaaddsdfsdfsdf
			aaaaaaasdjdsdfgd
			aaxxx
		C、\?:匹配其前面的字元0次或1次,其前面字元可有可無
		例:
			[[email protected] recover]# grep "a\?" cp.txt
			aaaddsdfsdfsdf
			aaaaaaasdjdsdfgd
			aaxxx
			xxxxvdfgf
		D、\+:匹配其前面的字元1次或多次,其前面字元出現至少一次
		例: 
			[[email protected] recover]# grep "a\+" cp.txt
			aaaddsdfsdfsdf
			aaaaaaasdjdsdfgd
			aaxxx
		E、\{m\}:匹配其前面的字元m次
		例:
			[[email protected] recover]# grep "a\{6\}" cp.txt
			aaaaaaasdjdsdfgd
		F、\{m,n\}:匹配其前面的字元至少m次,最多n次
		G、\{0,n\}:匹配最多n次
		H、\{m,\}:匹配最少m次
	第三類:位置錨定——即搜尋指定位置
		A、^:行首錨定——用於模式最左側
		例:
			[[email protected] recover]# grep "^root" /etc/passwd
			root:x:0:0:root:/root:/bin/bash
		B、$:行尾錨定——用於模式最右側
		例:
			[[email protected] recover]# grep "bash$" /etc/passwd
			root:x:0:0:root:/root:/bin/bash
			hu:x:1000:1000:hu:/home/hu:/bin/bash
		C、^pattern$:用PATTERN來匹配整行
		例:
			[[email protected] recover]# grep '^r.*n$' /etc/passwd
			rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
			rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
		D、^$:表示空白行——不能有空格
		E、^[[:space:]]$:表示顯示空白行——可以有空格
		F、\<或\b:詞首錨定,用於單詞模式的左側
		G、\>或\b:詞尾錨定,用於單詞模式的右側
		H、\<word>\:用於精確錨定單詞
		例:
			[[email protected] recover]# grep '\<root\>' /etc/passwd
			root:x:0:0:root:/root:/bin/bash
			operator:x:11:0:operator:/root:/sbin/nologin
	注意:單詞——指的是非特殊字元組成的連續字元(字串)都稱為單詞
	4)、分組以及引用
		A、\( \):將一個或多個字元捆在一起,當做一個整體進行處理
		例:
			[[email protected] recover]# grep '\<\(bin\/bash\)\>' /etc/passwd
			root:x:0:0:root:/root:/bin/bash
			hu:x:1000:1000:hu:/home/hu:/bin/bash
		B、Note:分組括號中的模式或匹配到的內容會被正則表示式引擎自動記錄於內部的變數中,這些變數為
		\1:模式從左側起,第一個左括號以及與之匹配的右括號之間的模式所匹配到的字元
		\2:模式從左側起,第二個左括號以及與之匹配的右括號之間的模式所匹配到的字元
		\3:模式從左側起,第三個左括號以及與之匹配的右括號之間的模式所匹配到的字元
		……
		例:
			ifconfig  | grep -o '\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}'
		C、後向引用:引用前面的分組括號中的模式所匹配到的字元
	注意:括號能巢狀,不能交叉

(1)使用格式

	grep [OPTIONS] PATTERN [FILE...]
	grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
	例:
		[[email protected] ~]# grep "UUID" /etc/fstab
		UUID=c6c99019-d41a-4376-8448-364787b4ae54 /boot     ext4    defaults   1 2

(2)option
grep -l:ignorecase——忽略字元大小寫
grep -o:僅顯示匹配到的字串本身
grep -v:invert-match——顯示不能被模式匹配到的行
grep -E:支援使用擴充套件的正則表示式元字元
grep -F:搜尋固定字串——不支援正則表示式
grep -G:支援基本正則表示式或元字元
grep -q:靜默模式,不輸出任何資訊
grep -A #:顯示匹配的行和此行的後 # 行—after
grep -B #:顯示匹配的行和此行的前 # 行——before
grep -C #:顯示匹配的行和此行前 # 行和後 # 行—context

	[[email protected] recover]# grep -A 2 "ur1" test.sh
	useradd ur1 && useradd ur2 && useradd ur3
	a=$(id -u ur1 | grep -o "^[0-9]\{1,4\}")
	b=$(id -u ur2 | grep -o "^[0-9]\{1,4\}")

	[[email protected] recover]# grep -B 2 "c" test.sh
	b=$(id -u ur2 | grep -o "^[0-9]\{1,4\}")
	c=$(id -u ur3 | grep -o "^[0-9]\{1,4\}")
	echo ${sum=$[$a+$b+$c]}

	[[email protected] recover]# grep -C 2 "\-o" test.sh
	useradd ur1 && useradd ur2 && useradd ur3
	a=$(id -u ur1 | grep -o "^[0-9]\{1,4\}")
	b=$(id -u ur2 | grep -o "^[0-9]\{1,4\}")
	c=$(id -u ur3 | grep -o "^[0-9]\{1,4\}")
	echo ${sum=$[$a+$b+$c]}

grep --color:對匹配到的文字著色後高亮顯示

37、egrep命令:

egrep命令用於支援擴充套件的正則表示式實現類似於grep文字過濾功能——grep -E

(1)使用格式——與grep使用格式相同
(2)支援的正則表示式元字元與grep相同

38、fgrep命令:

不支援正則表示式元字元——當無需要用到元字元去編寫模式時,使用fgrep必能更好

39、wc命令:- print newline, word, and byte counts for each file

wc命令用於單詞、字元、位元組的統計

(1)使用格式

 wc [OPTION]... [FILE]...
 wc [OPTION]... --files0-from=F

(2)option
wc -l:僅顯示行數

[[email protected] recover]# wc -l test.sh
8 test.sh

wc -w:僅顯示單詞

[[email protected] recover]# wc -w test.sh
31 test.sh

wc -c::僅顯示位元組數

[[email protected] recover]# wc -c test.sh
192 test.sh

40、cut命令:- remove sections from each line of files

cut命令用於從每一行去移除片段

(1)使用格式

cut OPTION... [FILE]...

(2)option
cut -d char:以char為分隔符,進行移除
cut -f #/#-#/#,#:移除挑選出的欄位或列

#:表示指定的單個欄位

[[email protected] recover]# cat /etc/passwd|cut -d: -f 1		==>表示以:為分隔符,只顯示第一個欄位
root
bin

#-#:表示連續的欄位

[[email protected] recover]# cat /etc/passwd|cut -d: -f 1-3	==>表示以:為分隔符,只顯示第一個欄位到第三個欄位
root:x:0
bin:x:1

#,#:表示離散的欄位

[[email protected] recover]# cat /etc/passwd|cut -d: -f 1,3	==>表示以:為分隔符,只顯示第一個欄位和第三個欄位
root:0
bin:1

41、sort命令:- sort lines of text files

sort命令用於對文字檔案排序,並不會對內部檔案進行修改

(1)使用格式

sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F

(2)option
sort -t char:指定分隔符
sort -k #:用於排序比較的欄位
sort -n:基於數值大小進行排列而非字元進行排列

[[email protected] recover]# sort -t: -k3 -n /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sort -r:逆序排序
sort -f:忽略字元大小寫
sort -u:移除或重複的行只保留一份——重複的行:連續且相同

42、uniq命令:- report or omit repeated lines

uniq命令用於報告或移除重複的行

(1)使用格式

uniq [OPTION]... [INPUT [OUTPUT]]

(2)option
uniq -c:對每行重複的計數
uniq -d:僅顯示未曾重複過的行
uniq -u:僅顯示重複過的行

43、diff命令:- compare files line by line

diff命令用於逐行比較檔案中的內容

(1)使用格式

diff [OPTION]... FILES