【Linux】基础特性与常见系统管理命令详解1
目錄
一、Linux基礎特性
1、Tab 命令補全
2、快捷鍵的使用
3、命令行歷史
4、命令別名
5、變量
變量種類
6、tee管道
7、分號;
? ? ?單引號''
? ? ?雙引號""
? ?? 反單引號``
8、Linux 輸入輸出重定向
9、重定向
①標準輸入(<? ? 與? ?<<)
②標準輸出
10、/dev/null與/dev/zero
二、Linux 常見系統管理命令詳解:
ls 命令
date 命令
時間格式化
時間戳轉換
一、Linux基礎特性
1、Tab 命令補全
? ? ? ??總的來說:輸入正確且唯一的字符按下Tab鍵會自動補全,正確但是不唯一會給出一個列表可供選擇,若輸入的部分字母在系統中沒有任何以它開頭的命令,則無論按多少次Tab鍵都沒有任何反應。例如:
*+Tab+Tab? 列出當前路徑下的子目錄但不包含隱藏目錄
~+Tab+Tab? 列出當前系統中的所有用戶
2、快捷鍵的使用
?-在控制臺下:
????????? 復制命令:Ctrl +?Insert? 組合鍵或用鼠標選中即是復制。
????????? 粘貼命令:Shift + Insert? 組合鍵或單擊鼠標滾輪即為粘貼。
? ? ? ? ? Ctrl+Y? ?將刪除的內容粘貼回來
? ? ? ? ? 鍵盤中的上下箭頭 可以逐一調用使用過歷史命令
? ? ? ? ? Ctrl+Z? ?掛起? 在文件編輯狀態下不想退出編輯狀態又想執行其他命令時可以使用;按輸入fg在按回車退回到編輯狀態
????????(Ctrl+S? ?鎖屏;Ctrl+Q? ?解除鎖屏,在Centos里可以,MobaXterm好像不可以)
? ? ? ? ?按 Ctrl的同時按左右鍵可以一個單詞一個單詞的移動,提升效率
3、命令行歷史
? ? ? 在命令提示符下使用過的命令的歷史記錄,使用過的命令會被存放于內存之中,當再次使用時可以從內存中再次調用,不需要再次輸入;
命令行歷史被寫在.bash_history中,它是個隱藏文件,想要查看可使用less -NM .bash_history,退出按Q;
并且它不是實時更新的,只有在退出登錄時才會將新寫入的命令更新在.bash_history中;
如果想讓它實時更新可以輸入history -a,
常用參數
history 5? ? ? ? ?顯示當前歷史命令最后5行
history -d 5? ??清除命令號為5的記錄
history -c? ? ? ? 清除內存中所有的命令,但是并沒有清除歷史命令文件中的命令;
history -a? ??????和history -w基本沒什么區別作用都是實時更新.bash_history文件;
history -r? ? ? ? 是把命令歷史文件中的內容讀取當前history記憶中
history -s ""? ? 偽造歷史
鍵盤中的上下鍵可以調用之前使用過的命令,!+數字可以調用指定行數的命令,!!調用并執行上一條命令;(基本不用)
history默認顯示所有的命令,HESTSIZE=10表示只顯示10條命令
tips:tail 加文件名查看的是文件的后十行,查看命令的后十行 history 10
HISTSIZE命令定義history命令輸出的記錄數,如果HISTSIZE=20,表示顯示20條命令,如果在這種情況下設置HISTSIZE=25表示從現在起只顯示25條命令;
HISTCONTROL
HISTCONTROL, 用于控制如何在歷史記錄列表中保存命令。 HISTCONTROL變量使我們可以更有效地存儲bash歷史記錄。它可用于忽略重復的命令或帶前導空格的命令, 或兩者都忽略。
HISTCONTROL=ignoredups執行此命令后的歷史記錄將不會存儲與最近使用的命令相同的命令。相當于如果連續執行多個pwd命令,執行history -a命令后將只會存儲一個pwd命令,但若是相同的命令之間不是連續的那么也會存儲進去,舉例:
執行以下命令:(相同的命令之間不是連續的)
如圖所示相同命令之間不是連續的也會存儲進去的
(操作時發現即使不使用該命令連續使用相同的命令也只會存儲一個)
HISTCONTROL=ignorespace?ignorespace:以空格字符開頭的行不包含在歷史記錄列表中。一般情況下包含空格的命令也會存儲進去;如果我們不希望命令包含在歷史記錄中, 則可以在命令之前使用空格字符, 以避免將其包含在歷史記錄列表中。舉例。
執行以下幾個命令:
如下圖所示只存儲了不以空格開頭的命令:
HISTCONTROL=ignoreboth?ignoreboth:歷史記錄將不包括帶有前導空格字符和重復項的命令。
執行如下命令
如下圖所示,使用了該命令后,
??
4、命令別名
暫時別名
例如:
[root@localhost ~]# alias violet='cd /root/Test'
[root@localhost ~]# violet取消暫時命名
[root@localhost Test]# unalias violet
[root@localhost Test]# violet
-bash: violet: command not found這種命令別名是暫時的,退出登錄后就不生效了;
永久別名
命令別名寫在用戶家目錄下的.bashrc文件中;
? ? ? ? 1.若是在.bashrc中進行命令別名,退出登錄后仍然有效,這種永久別名只對當前用戶有效;
? ? ? ? 2.寫入文件后要輸入source ~/.bashrc才能生效,
????????但是即使用一個命令永久別名了另一個命令,想使用命令本身也是在命令前面加\(譬如使用pwd命令命名了cd ./test 想使用pwd命令本身的話就在前面加個\)
如何對其它用戶也生效:在/etc/profile文件里進行命令別名。
刪除永久別名
使用vim .bashrc 命令進入.bashrc文件,刪除你想要刪除的命令別名,保存退出后進行重啟就可以了。
別名優先級:
別名的優先級高于命令,如果命令已經修改,想在使用命令本身的功能,則在命令之前加\,例如:
查看別名:
查看當前用戶定義的所有別名
5、變量
變量種類
環境級變量只在當前 shell 中生效, shell 關閉變量丟失
用戶級變量寫在用戶的骨文件(.bash_profile)中,只針對當前用戶生效,切換用戶后就不再生效
系統級變量被寫在系統的配置文件 /etc/profile 或者 /etc/profile.d/ 中,對于所有用戶都生效
(在https://mp.csdn.net/mdeditor/99946984#這個博客有詳解)
6、tee管道
①管道是用來過濾數據的,將輸入源數據根據一定規則過濾輸出到文件或終端
管道使用 | 實現數據的過濾 (過濾的是文件),例如:
②管道可以將輸入流同時輸出到終端和文件中,每次重新將輸入流同時輸出到終端和文件時,會覆蓋掉上一次輸入的內容,例如:
[root@localhost ~]# echo "hello" |tee 1.txt
hello
[root@localhost ~]# cat 1.txt
hello
[root@localhost ~]# echo "Linux" |tee 1.txt
Linux
[root@localhost ~]# cat 1.txt
Linux(若輸入源數據過濾輸出到文件時,文件并不存在,那么會自動創建一個文件并輸入內容)
7、分號;
? ? ?單引號''
? ? ?雙引號""
? ?? 反單引號``
在執行多條命令時,用;分開,彼此之間不管心是否會生效,所有命令都會執行,例如:
表示切換到Test目錄下后列出所有的目錄和文件;
如果有命令無法執行,則執行能夠執行的,例如:
"? "(雙引號),弱引用,可以做變量或者命令替換
保護特殊元字符和通配符不被shell解析,但是允許變量和命令替換,以及轉義符的解析。它會對一些被引起來的字符進行特殊處理,例如:
'? ?'(單引號),強引用,所見即所得
單引號''剝奪了所有字符的特殊含義,單引號內就變成了單純的字符;
單引號和雙引號的區別是:單引號里的內容僅僅表示字符,無任何特殊含義;而雙引號會對雙引號" "內的參數替換($)和命令替換(``),單引號,反斜杠是個例外。
變量替換:
$PWD是變量?(不需要定義)
命令替換:
?`? ?`(反單引號),命令替換
反單引號中的內容被當作命令執行;$(? )與它有一樣的效果:
8、Linux 輸入輸出重定向
Lnux 系統進程使用不同的文件描述符(FD file descriptors)來管理打開的文件 ;
Linux 系統提供如下三種I /O 設備:
①標準輸入 stdin 使用文件描述符 0 代替,? 0 代表來自鍵盤的輸入;
②標準輸出 stdout 使用文件描述符 1 代替,1 代表輸出到屏幕;
③標準錯誤 stderr 使用文件描述符 2 代替,2 默認也是輸出到終端窗口即屏幕;
9、重定向
重定向說白了就是不使用標準的輸入輸出端口,進行重新的指定,所以叫做重定向,也就是說是可以自行設定對應的設備。
①標準輸入(<? ? 與? ?<<)
使用< 來把文件導入到命令中,如下:
注意:雖然執行結果相同,但第一行代表是以鍵盤作為輸入設備,而第二行代碼是以 practice.txt?文件作為輸入設備。
[root@localhost ~]# cat << 0
> fdscf
> sdfsf
> dfdfdf0
> dfsf
> 0
fdscf
sdfsf
dfdfdf0
dfsf可以看到,當指定了 0 作為分界符之后,只要不輸入 0,就可以一直輸入數據并顯示出來。 輸入0后,執行cat命令。? ?表示從標準輸入設備(鍵盤)中讀入,直到遇到分界符才停止(讀入的數據可以包括分界符),這里的分界符可以為數字,字符,字母,也可以是他們的組合。
②標準輸出
使用> 或者>>來將標準輸入或者其他地方的輸入輸出到非終端窗口的設備,比如將一個命令的結果輸出到文件中,我們可以通過查看文件去看對應的內容,而屏幕或終端是看不到任何內容的。如下例子:
| 命令符號格式 | 作用 |
|---|---|
| 命令 > 文件 | 將命令執行的標準輸出結果重定向輸出到指定的文件中,如果該文件已包含數據,會清空原有數據,再寫入新數據。(如果指定文件不存在,會自行創建。) |
| 命令 2> 文件 | 將命令執行的錯誤輸出結果重定向到指定的文件中,如果該文件中已包含數據,會清空原有數據,再寫入新數據。如果是正確的命令則不寫入指定文件并且清空指定文件內容。(如果指定文件不存在,會自行創建。) |
| 命令 >> 文件 | 將命令執行的標準輸出結果重定向輸出到指定的文件中,如果該文件已包含數據,新數據將寫入到原有內容的后面。 |
| 命令 2>> 文件 | 將命令執行的錯誤輸出結果重定向到指定的文件中,如果該文件中已包含數據,新數據將寫入到原有內容的后面。 |
| 命令 >> 文件 2>&1 或者 命令 &>> 文件 |
2>&1 意思是把標準錯誤輸出重定向到標準輸出,寫入到指定文件,如果該文件中已包含數據,新數據將寫入到原有內容的后面。 注意,第一種格式中,最后的 2>&1 是一體的,可以認為是固定寫法。 第二種也是標準輸出的執行結果和錯誤輸出的執行結果追加寫入到指定文件 |
| 命令 2>> 文件?1>&2 | 1>&2 意思是把標準輸出重定向到標準錯誤,寫入到指定文件,如果該文件中已包含數據,新數據將寫入到原有內容的后面。 |
例子:
1、將正確的輸出和錯誤的輸出重定向到一個文件中:
該命令的意思列出/root和/aaa下的文件并輸出到pq.txt文件中;
而/aaa是不存在的,單獨使用??ls /root /aaa > p1.txt會報錯,顯示沒有/aaa這個目錄或文件,所以它是一個標準錯誤,而使用2>&1可以將標準輸出和標準錯誤都輸入進p1.txt文件中。
10、/dev/null與/dev/zero
/dev/null,或稱空設備,是一個特殊的設備文件,它丟棄一切寫入其中的數據(但報告寫入操作成功),讀取它則會立即得到一個EOF。
有時候我們的命令結果并不想讓其輸出,而是只想讓其執行,就可以將其重定向到/dev/null 設備中。例如:
ls /213 /etc &> /dev/null
/dev/null 設備是我們的空設備或者叫做位桶,有時也稱為黑洞,你可以向它輸出任何東西,而不用擔心會撐滿它;或作為用于輸入流的空文件。
/dev/zero 設備是我們的 0 設備,也是我們的輸入設備,無限制提供 0,用于向設備或文件中寫入無限制個數的字符串 0。
舉例:
dd if=/dev/zero of=/opt/test bs=10M count=10
[root@centos7 opt]# ls -lh -rw-r--r-- 1 root root 100M Jul 14 15:47 test
二、Linux 常見系統管理命令詳解:
ls 命令
ls 命令用來顯示指定工作目錄下的內容;
常用參數:
-a 列出目錄下的隱藏目錄
-A 列出除過.和..之外的所有文件和目錄
-d 列出目錄本身不包含目錄下的內容
-h 以人類易讀的方式顯示文件的大小,通常結合-l 參數使用
-l 是長格式化的列表顯示,包含文件的相關屬性,比如權限,時間,大小,所屬用戶用戶組等等
-t 以時間順序排序,通常最新的文件或目錄排在最前面,這個參數通常跟-l 一起使用
-r 是時間逆序排序(通常顯示文件時是正序排序,最新時間在第一行),通常跟-lt 結合可以實現按照時間順序從舊到新的順序排序,也就是說新文件在最后面
-S 按照文件大小排序,通常也是結合-l 參數使用,默認是從大到小排序
-i? 常與-l搭配使用,顯示文件inode號
date 命令
打印系統日期和時間
-d, --date=STRING?顯示時間根據你寫的字符串
[root@centos7 opt]# date -d "2022-6-12 19:20:10"Sun Jun 12 19:20:10 CST 2022?-s, --set=STRING? ? ??設置時間根據你寫的字符串
[root@centos7 opt]# date -s "2022-7-14 16:10:10"(日期和時間之間必須要有空格,不然格式不對)Thu Jul 14 16:10:10 CST 2022
時間格式化
% Y 年(例如:1970,2018等)?
% m 月(01..12)
% d 一個月的第幾天(01..31)%F ? full date; same as %Y-%m-%d
% H 小時(00..23)
% M 分(00..59)
% S 秒(00..59)?%T ? time; same as %H:%M:%S
?%I ? hour (01..12)
?%R ? 24小時?時?和?分; same as %H:%M
舉例:
1、獲得當天的日期
? ? ? date +%Y-%m-%d
2、獲取明天的日期
??????date -d next-day +%Y%m%d
3、獲取昨天的日期
??????date -d last-day +%Y%m%d
4、獲取上個月的年和月
??????date -d last-month +%Y%m
5、獲取下個月的年和月
??????date -d next-month +%Y%m6、獲取明年的年份
??????date -d next-year +%Y7.獲取第二天的時間
時間戳轉換
時間戳記錄的是 1970-1-1 以來到現在時間的總秒數,通常用在 linux 服務器中,如果需要將其轉化成具體的年月日時間格式,可以使用以下方法:
[root@centos7 opt]# date --date='@2147483647'
Tue Jan 19 11:14:07 CST 2038
當然也可以用在線的 unix 時間戳轉化工具實現,十分方便。
總結
以上是生活随笔為你收集整理的【Linux】基础特性与常见系统管理命令详解1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 免费博客空间服务评测、注册和申请
- 下一篇: 注册MSComm方法