@TOC
📝前言
該文章j將介紹Linux中的常用系統工具和命令,如用於分頁顯示文本的more和less、顯示時間的date、管理日曆的cal、文件搜索的find和grep、以及壓縮/解壓縮的zip/unzip和tar。文中詳細解釋了每個命令的語法、功能和常用選項,並提供了示例。
🌠 more
more 命令是一個分頁顯示文本文件內容的工具,它可以讓用户逐頁查看文件的內容。
基本語法:
more [選項] [文件名]
功能:more命令,功能類似 cat
常用選項:
-d: 顯示頁尾提示信息-s: 合併連續的空白行為一個空白行-c: 清屏後再顯示內容-p: 不滾屏,而是跳頁顯示- -n 對輸出的所有行編號
- q 退出more
例子: 我們要列出根目錄 / 下的所有文件和目錄的詳細信息。
ls -l / | more
當我們用more打開我們log.txt的10000行hello時,查看文檔數據,但是他沒有上下(前後)翻動功能,打印顯示篇幅就沒有了,因此less就具有更加方便查看功能:
🌉less指令
less 工具也是對文件或其它輸出進行分頁顯示的工具,應該説是linux正統查看文件內容的工具,功能極其強大。
less 的用法比起 more 更加的有彈性。在 more 的時候,我們並沒有辦法向前面翻, 只能往後面看 但若使用了 less 時,就可以使用 [pageup][pagedown] 等按鍵的功能來往前往後翻看文件,更容易用 來查看一個文件的內容!
除此之外,在 less 裏頭可以擁有更多的搜索功能,不止可以向下搜,也可以向上搜。 語法: less [參數] 文件 功能: less與more類似,但使用less可以隨意瀏覽文件,而more僅能向前移動,卻不能向後移動,而且less在查看之前 不會加載整個文件。
-i 忽略搜索時的大小寫 -N 顯示每行的行號 /字符串:向下搜索“字符串”的功能 ?字符串:向上搜索“字符串”的功能 n:重複前一個搜索(與 / 或 ? 有關) N:反向重複前一個搜索(與 / 或 ? 有關) q:quit
底部輸入 -N+Enter顯示左邊的行號
輸入
/+想查找的字符串+Enter顯示向下查找
其他選項類同
🌠時間相關的指令
date顯示 date 指定格式顯示時間: date +%Y:%m:%d date 用法:date [OPTION]... [+FORMAT] 1.在顯示方面,使用者可以設定欲顯示的格式,格式設定為一個加號後接數個標記,其中常用的標記列表如下
%H : 小時(00..23)%M : 分鐘(00..59) %S : 秒(00..61) %X : 相當於 %H:%M:%S %d : 日 (01..31) %m : 月份 (01..12) %Y : 完整年份 (0000..9999) %F : 相當於 %Y-%m-%d
為什麼要在 %H:%M:%S 前加上一個空格 \ ? 加\可以輸出間有空格,可以執行後一條指令。
2.在設定時間方面 date -s //設置當前時間,只有root權限才能設置,其他只能查看。 date -s 20080523 //設置成20080523,這樣會把具體時間設置成空00:00:00 date -s 01:01:01 //設置具體時間,不會對日期做更改 date -s “01:01:01 2008-05-23″ //這樣可以設置全部時間 date -s “01:01:01 20080523″ //這樣可以設置全部時間 date -s “2008-05-23 01:01:01″ //這樣可以設置全部時間 date -s “20080523 01:01:01″ //這樣可以設置全部時間
3.時間戳
時間->時間戳:date +%s +%s
時間戳->時間:date -d@1508749502 Unix時間戳(英文為Unix epoch, Unix time, POSIX time 或 Unix timestamp)是從1970年1月1日(UTC/GMT的午夜)開始所經過的秒數,不考慮閏秒。
解釋:為什麼是8時0分0秒? -d @0 指定了Unix時間戳 0。Unix時間戳 0 表示1970年1月1日00:00:00 UTC。默認情況下,date 命令使用本地時區來顯示時間。你看到的 1970-01-01 08:00:00 是因為你的系統時區設置在東八區(UTC+8),因此在UTC時間的基礎上加上了8小時。這個時間顯示是基於你當前時區的轉換結果。
🌉cal指令
cal命令可以用來顯示公曆(陽曆)日曆。公曆是現在國際通用的歷法,又稱格列歷,通稱陽曆。“陽曆”又名“太陽曆”,系以地球繞行太陽一週為一年,為西方各國所通用,故又名“西曆”。
命令格式: cal [參數][月份][年份]功能: 用於查看日曆等時間信息,如只有一個參數,則表示年份(1-9999),如有兩個參數,則表示月份和年份 常用選項:
-3 顯示系統前一個月,當前月,下一個月的月曆-j 顯示在當年中的第幾天(一年日期按天算,從1月1號算起,默認顯示當前月在一年中的天數) -y 顯示當前年份的日曆
舉例:
cal -y 2024
🌠find指令
find指令:-name
Linux下find命令在目錄結構中搜索文件,並執行指定的操作。Linux下find命令提供了相當多的查找條件,功能很強大。由於find具有強大的功能,所以它的選項也很 多,其中大部分選項都值得我們花時間來了解一下。 即使系統中含有網絡文件系統( NFS),find命令在該文件系統中同樣有效,只你具有相應的權限。 在運行一個非常消耗資源的find命令時,很多人都傾向於把它放在後台執行,因為遍歷一個大的文件系 統可能會花費很長的時間(這裏是指30G字節以上的文件系統)。
語法: find pathname -options功能: 用於在文件樹種查找文件,並作出相應的處理(可能訪問磁盤) 常用選項:
find -name 按照文件名查找文件。
find 命令是一個非常強大的文件搜索工具,它可以在指定的目錄及其子目錄中搜索滿足指定條件的文件或目錄。以下是一些常見的 find 命令用法:
- 在當前目錄及其子目錄中搜索指定名稱的文件或目錄:
find . -name "filename.txt"
例如:輸入:
find -name "log.txt"
即可找到log.txt文件路徑。
- 在指定目錄中搜索指定名稱的文件或目錄:
find /path/to/directory -name "filename.txt"
- 搜索指定類型的文件(如普通文件、目錄、符號鏈接等):
find /path/to/directory -type f # 搜索普通文件
find /path/to/directory -type d # 搜索目錄
find /path/to/directory -type l # 搜索符號鏈接
- 根據文件大小搜索:
find /path/to/directory -size +10M # 搜索大於 10MB 的文件
find /path/to/directory -size -1k # 搜索小於 1KB 的文件
- 根據文件訪問或修改時間搜索:
find /path/to/directory -atime +7 # 搜索 7 天前訪問過的文件
find /path/to/directory -mtime -1 # 搜索 1 天內修改過的文件
- 根據文件所有者和權限搜索:
find /path/to/directory -user username # 搜索指定用户擁有的文件
find /path/to/directory -perm 644 # 搜索權限為 644 的文件
- 組合多個條件進行搜索:
find /path/to/directory -name "*.txt" -size +10M -mtime -7
例如:我們要搜索 /var/log 目錄下所有 1 天內修改過的日誌文件:
find /var/log -type f -mtime -1
這將列出 /var/log 目錄及其子目錄中,所有類型為普通文件 -type f 且最近 1 天內有修改 -mtime -1 的文件。
再舉一個例子,搜索當前目錄及其子目錄中,所有大小超過 100b 的文件:
🌉grep
grep 命令是用於在文件中搜索指定的字符串或正則表達式模式的強大工具。
功能: 在文件中搜索字符串,將找到的行打印出來常用選項:
-i :忽略大小寫的不同,所以大小寫視為相同-n :順便輸出行號-v :反向選擇,亦即顯示出沒有 '搜尋字符串' 內容的那一行
基本語法:
grep [options] pattern [files]
grep [選項] 搜尋字符串 文件
[options]是可選的命令行選項,用於控制grep的行為。pattern是要搜索的模式,可以是字符串或正則表達式。[files]是要搜索的文件列表,如果不指定則默認搜索標準輸入。
常用的 grep 命令示例:
- 簡單文本搜索:
grep "hello" file.txt在file.txt文件中搜索包含 "hello" 的行。grep -i "HELLO" file.txt在file.txt文件中搜索包含 "hello" 或 "HELLO" 的行(忽略大小寫)。
- 使用正則表達式搜索:
grep -E "[0-9]{3}-[0-9]{3}-[0-9]{4}" file.txt在file.txt文件中搜索符合美國電話號碼格式的行。grep -o "[0-9]*" file.txt在file.txt文件中搜索所有數字,並只顯示匹配到的部分。
- 搜索多個文件:
grep "error" *.log在當前目錄下所有.log擴展名的文件中搜索包含 "error" 的行。grep -r "TODO" .在當前目錄及其所有子目錄中遞歸搜索包含 "TODO" 的行。
- 顯示行號和上下文:
grep -n "warning" file.txt在file.txt文件中搜索包含 "warning" 的行,並顯示行號。grep -C 2 "error" file.txt在file.txt文件中搜索包含 "error" 的行,並顯示包含該行在內的前後 2 行。
- 反向搜索:
grep -v "success" file.txt在file.txt文件中搜索不包含 "success" 的行。grep -L "error" *.log列出所有不包含 "error" 的.log文件。
例如:查找字符串“llo”,並順便輸出型號:
grep -n "llo" log.txt
在 Linux 中使用 grep 命令來查找未來的進程是。以下是一些常用的方法:
- 監視
/proc目錄:/proc目錄包含了系統中所有進程的信息,可以使用grep命令搜索該目錄來監視未來的進程。例如:
watch -n 1 'ls -l /proc | grep -E "^d" | grep -v "self|thread-self"'
這個命令會每隔 1 秒刷新並顯示 /proc 目錄下的所有進程目錄。
🌠zip/unzip指令:
語法: zip 壓縮文件.zip 目錄或文件功能: 將目錄或文件壓縮成zip格式常用選項:
-r 遞 歸處理,將指定目錄下的所有文件和子目錄一併處理
舉例:將目錄dir1壓縮,並解壓到dir2目錄中。
首先我創建了dir1和dir2
[root@hcss-ecs-ab43 ~]# zip dir1.zip dir1
adding: dir1/ (stored 0%)
[root@hcss-ecs-ab43 ~]# tree
.
├── dir1
│ ├── test
│ │ └── test2
│ │ └── log.txt
│ └── test1
│ └── test2
├── dir1.zip
└── dir2
6 directories, 2 files
[root@hcss-ecs-ab43 ~]# unzip dir1.zip -d dir2/
Archive: dir1.zip
creating: dir2/dir1/
解壓結果:發現的確解壓出了dir1到dir2中,但是dir1裏的內容並沒有解壓過來,與其説沒有沒有解壓過來,其實在zip壓縮時就沒有壓縮進去。
我們知道,文件是有文件屬性和文件內容構成的,我們zip壓縮壓過去的是文件dir1的文件屬性,而文件裏的內容數據沒有壓縮,因此,我們需要使用-r 遞 歸處理,將指定目錄下的所有文件和子目錄一併處理
我們重新來,還原:
將dir1目錄壓縮:
zip dir1.zip -r dir1/
解壓到dir2目錄::
unzip dir1.zip -d dir2/
🌉 tar指令
tar 命令是一個非常重要的 Linux 命令,用於打包和解壓縮文件。tar [-cxtzjvf] 文件與目錄 .... 參數:
-c :建立一個壓縮文件的參數指令(create 的意思);-x :解開一個壓縮文件的參數指令!-t :查看 tarfile 裏面的文件! -z :是否同時具有 gzip 的屬性?亦即是否需要用 gzip 壓縮? -j :是否同時具有 bzip2 的屬性?亦即是否需要用 bzip2 壓縮? -v :壓縮的過程中顯示文件!這個常用,但不建議用在背景執行過程! -f :使用檔名,請留意,在 f 之後要立即接檔名喔!不要再加參數! -C : 解壓到指定目錄 下面是 tar 命令的常用參數:
- 操作模式:
- c: 創建新的 tar 包
- x: 解壓縮 tar 包
- t: 列出 tar 包中的內容
- 壓縮/解壓縮模式:
- z: 使用 gzip 進行壓縮/解壓縮
- j: 使用 bzip2 進行壓縮/解壓縮
- 其他參數:
- v: 顯示詳細信息
- f: 指定 tar 包的文件名
使用示例:
- 創建 tar 包:
tar -cvf archive.tar file1.txt file2.txt directory/
這條命令將 file1.txt、file2.txt 和 directory/ 目錄打包成 archive.tar 文件。
- 解壓縮 tar 包:
tar -xvf archive.tar
這條命令將 archive.tar 文件解壓縮到當前目錄。
- 列出 tar 包的內容:
tar -tvf archive.tar
這條命令列出 archive.tar 文件中的所有文件和目錄。
- 使用 gzip 壓縮/解壓縮:
tar -czvf archive.tar.gz file1.txt file2.txt directory/
tar -xzvf archive.tar.gz
第一條命令使用 gzip 壓縮 file1.txt、file2.txt 和 directory/ 目錄,並將其打包成 archive.tar.gz 文件。第二條命令將 archive.tar.gz 文件解壓縮。
- 使用 bzip2 壓縮/解壓縮:
tar -cjvf archive.tar.bz2 file1.txt file2.txt directory/
tar -xjvf archive.tar.bz2
第一條命令使用 bzip2 壓縮 file1.txt、file2.txt 和 directory/ 目錄,並將其打包成 archive.tar.bz2 文件。第二條命令將 archive.tar.bz2 文件解壓縮。
範例一:將整個 /etc 目錄下的文件全部打包成為
/tmp/etc.tar[root@linux ~]# tar -cvf /tmp/etc.tar /etc<==僅打包,不壓縮![root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包後,以 gzip 壓縮 [root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包後,以 bzip2 壓縮 特別注意,在參數 f 之後的文件檔名是自己取的,我們習慣上都用 .tar 來作為辨識。 如果加 z 參數,則以 .tar.gz 或 .tgz 來代表 gzip 壓縮過的 tar file ~ 如果加 j 參數,則以 .tar.bz2 來作為附檔名啊~ 上述指令在執行的時候,會顯示一個警告訊息: 『`tar: Removing leading `/" from member names`』那是關於絕對路徑的特殊設定。範例二:查閲上述 /tmp/etc.tar.gz 文件內有哪些文件?[root@linux ~]# tar -ztvf /tmp/etc.tar.gz由於我們使用 gzip 壓縮,所以要查閲該 tar file 內的文件時,就得要加上 z 這個參數了!這很重要的!
範例三:將 /tmp/etc.tar.gz 文件解壓縮在 /usr/local/src 底下[root@linux ~]# cd /usr/local/src[root@linux src]# tar -zxvf /tmp/etc.tar.gz 在預設的情況下,我們可以將壓縮檔在任何地方解開的!以這個範例來説, 我先將工作目錄變換到 /usr/local/src 底下,並且解開 /tmp/etc.tar.gz , 則解開的目錄會在 /usr/local/src/etc 呢!另外,如果您進入 /usr/local/src/etc 則會發現,該目錄下的文件屬性與 /etc/ 可能會有所不同喔!
範例四:在 /tmp 底下,我只想要將 /tmp/etc.tar.gz 內的 etc/passwd 解開而已[root@linux ~]# cd /tmp[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd我可以透過 tar -ztvf 來查閲 tarfile 內的文件名稱,如果單隻要一個文件, 就可以透過這個方式來下達!注意到! etc.tar.gz 內的根目錄 / 是被拿掉了! 範例五:將 /etc/ 內的所有文件備份下來,並且保存其權限! [root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc 這個 -p 的屬性是很重要的,尤其是當您要保留原本文件的屬性時! 範例六:在 /home 當中,比 2005/06/01 新的文件才備份 [root@linux ~]# tar -N "2005/06/01" -zcvf home.tar.gz /home
範例七:我要備份 /home, /etc ,但不要 /home/dmtsai[root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc範例八:將 /etc/ 打包後直接解開在 /tmp 底下,而不產生文件! [root@linux ~]# cd /tmp [root@linux tmp]# tar -cvf - /etc | tar -xvf - 這個動作有點像是 cp -r /etc /tmp 啦~依舊是有其有用途的! 要注意的地方在於輸出檔變成 - 而輸入檔也變成 - ,又有一個 | 存在~ 這分別代表 standard output, standard input 與管線命令啦!
🚩總結
more和less命令可用於分頁顯示文本文件內容,less比more功能更強大。date命令可用於顯示和設置系統時間,支持多種時間格式和時間戳轉換。[root@hcss-ecs-ab43 ~]# date +%Y-%m-%d\%H:%M:%S2024-08-1019:56:52cal命令可顯示公曆日曆,包括當前月、前後月和整個年份。cal -y 2024find命令可在目錄結構中搜索文件,支持多種條件組合,如文件名、文件類型、大小和時間等。-
grep命令用於在文件中搜索指定的字符串或正則表達式,支持多種選項。grep -n "llo" log.txtzip/unzip和tar命令分別用於創建和解壓縮 ZIP 和 TAR 格式的文件,支持各種壓縮算法。
zip dir1.zip -r dir1/
unzip dir1.zip -d dir2/