引言
圖形用戶界面(GUI)讓簡單的任務更容易完成,命令列界面(CLI)使完成復雜的任務成為可能,
第一部分:Shell
本部分包括命令列基本語言,命令組成結構,檔案系統瀏覽、撰寫命令列、查找命令幫助檔案,
基礎知識
基礎操作方式
在Linux中,在圖形界面中打開Terminal的快捷鍵是Ctrl+Alt+t,
在Terminal中,按鍵盤的上下箭頭,可以出現曾經輸入過的命令,默認500行,關閉Terminal后會保存,
按鍵盤的左右箭頭可以實作輸入字符時游標的切換,可以移動到用戶正在編輯部分的任意位置,
在Terminal中,滑鼠不可以制定游標位置,滑鼠左鍵可以用于選中文本,右鍵可以進行復制黏貼(有的系統是顯示選項卡,有的是直接復制黏貼操作),
命令列中,會出現一行短文字,格式類似于ebd@ubuntu:~$或[me@linuxbox ~]$,解釋一下,基本格式是"用戶名@主機名 當前作業目錄 權限符",~代表用戶的家目錄,普通用戶的權限符是$,如果變成超級用戶,用戶名變成root,權限符變成#
Linux基礎知識
在Linux中,一切皆檔案,檔案沒有后綴名,檔案名和命令名對大小寫敏感,檔案名以.開頭的檔案是隱藏檔案,
番外1:Ubuntu使用root登錄GUI系統
安裝Ubuntu后設定root密碼及開機使用root用戶登錄:
CentOS,openSUSE等系統在安裝系統程序中會有設定root密碼的步驟,而Ubuntu沒有此步驟,
在Ubuntu安裝完畢后,在Terminal中輸入sudo passwd -u root,按提示設定密碼后,切換為root用戶,輸入命令su,輸入密碼,用戶權限符由$變為#,
再安裝vim文本編輯器,輸入命令apt install vim,按提示安裝成功后,用vim打開vim /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf,按鍵盤INSERT鍵進行編輯,在下方加入代碼
greeter-show-manual-login=true
all-guest=false
按Esc解除編輯,按":wq"保存并退出,
接著用vim /etc/pam.d/gdm-autologin,用vim編輯,在auth required pam_succeed_if.so user != root quiet_success前加上#,備注起來;同理再用vim對vim /etc/pam.d/gdm-password在auth required pam_succeed_if.so user != root quiet_success前加上#,備注起來,
最后輸入reboot進行重啟,重啟后就可以使用root進行開機圖形用戶界面登錄了,開機用戶名處選擇未列出,用戶名輸出root,再輸入密碼即可,
番外2:Ubuntu搭建c++開發環境和vscode編輯器
教程鏈接
從零開始學命令
體驗命令列之使用date和cal,df和free
輸入date命令可以顯示系統當前的時間和日期;
輸入cal命令可以顯示當前月份的日歷,
輸入df命令可以查看磁盤剩余的數量;
輸入free命令可以查看當前記憶體空閑的情況,

exit
輸入exit命令,可以結束并關閉當前終端會話,
清屏
輸入clear命令進行向下翻頁;
輸入reset命令進行歷史內容清空;
輸入printf '\033c'命令進行歷史內容清空,
用戶操作概要
| reboot | 用于重啟機器 |
| poweroff | 用于關閉系統 |
| useradd xxxx | 用于添加用戶 |
| su xxx | 用戶將用戶切換為xxx |
| whoami | 查看當前用戶 |
在Linux系統中,普通用戶可以在沒有其他用戶時使用reboot進行重啟,使用poweroff可以關機,有其他用戶時可以按照提示操作,useradd命令可以進行新用戶的創建,需要切換用戶時,使用命令su NAME切換到NAME用戶,可以使用whoami命令來查看當前操作的用戶名(其實每行前面的提示符就有),
Q&A
Q:shutdown和poweroff和reboot的區別?
A:shutdown是poweroff和reboot的結合,引數-r表示reboot,-h表示poweroff
在root用戶下,使用shutdown -r +10表示在10分鐘后重新啟動系統,shutdown -h now表示立即關機,
網路入門之ifconfig和ping
- ifconfig —— 列出網路相關資訊
- ping IP/DNS —— 連接某個ip或網址
在Ubuntu系統中,如果提示沒有此命令,首先通過sudo apt install net-tools安裝網路工具,安裝完成后,可以使用ifconfig命令來查看網路相關資訊,可以使用ping命令了解網路之間的連接情況,
除了網路設備和狀態外,如果正確啟動了can驅動和can卡,can設備狀態也會列出,
虛擬機使用橋接網路后,利用Windows下的ipconfig和Linux下的ifconfig得到主機和虛擬機的ip地址,可以相互ping通,
檔案系統中跳轉
- ls —— 列出目錄中的內容
- cd —— 更改當前目錄
- pwd —— 列印出當前作業的目錄位置
Linux的檔案系統是一個樹形結構,樹根是根盤符(根節點),結點按照用戶的需求,具有不同的深度,任何時候,用戶都像置身迷宮之中,當用戶打開一個Terminal時,默認位置在用戶的家目錄(~)中,使用普通用戶登錄Linux系統時,家目錄及其子目錄是唯一允許普通用戶進行寫操作的地方,
可以鍵入pwd命令來顯示當前的作業目錄(絕對路徑);
可以用ls命令來列出當前目錄下的所有檔案和子目錄(相對路徑);
可以使用cd命令進行當前作業目錄的更改(可輸入絕對路徑或相對路徑),

在Linux中,可以在輸入命令后接上選項,一個相對完整的命令應該是這樣的:command -options arguments,
ls命令的選項如下表:
| ls常用選項一覽 | ||
| 選項 | 長選項 | 描述 |
| -a | --all | 展示包括隱藏檔案和隱藏目錄在內的所有檔案和目錄 |
| -d | --directory | |
| -l | 以串列形式詳細顯示 | |
| -h | --human-readable | 人性化展示 |
| -r | --reverse | 以相反的順序進行顯示 |
| -S | 按照檔案大小排序 | |
| -t | 按照修改時間排序 | |
| -F | ||
| -i | 列出檔案或目錄的索引號 | |
ls長輸出時的各欄位含義
如drwxr-xr-x,d表示此檔案名是一個目錄(d表示目錄,-表示檔案,l表示硬鏈接),后面9個字母是三組rwx,分別表示檔案屬主自己、檔案屬主所在用戶組、其他用戶是否能對此檔案或目錄進行讀(r)、寫(w)、運行(x),有字母表示有此權利,-表示沒有此權利,
路徑問題
路徑可以分為絕對路徑和相對路徑,絕對路徑始于根目錄,緊跟著一個一個的子目錄,直到達到所期望的目錄或檔案, 相對路徑始于當前作業目錄,表示目標檔案或目標目錄相對于當前作業目錄的路徑,
在相對路徑中,./表示當前目錄,../表示回到當前目錄的上一級(父)目錄,絕對路徑默認從根目錄開始,即第一個/表示根目錄,
研究作業系統
- ls —— 列出目錄中的內容
- file —— 確定檔案型別
- less —— 瀏覽檔案中文本內容
在Linux中,檔案是沒有擴展名的,很難通過一個名字知道這個檔案是個什么檔案,在windows中,.png檔案是一張圖片,.dll檔案是一個元件,那怎么知道在Linux下,一個檔案是什么型別的呢?
使用file命令,可以很清楚的知道檔案的型別,不論檔案名是否有后綴,都可以將檔案的型別正確的識別,
輸入命令less可以查看文本型檔案的內容,可以看出,上圖中的File_Rename是一段代碼,是文本格式的檔案,其他的一個是mp3檔案,一個是png矢量圖檔案,使用命令less File_Rename對此文本檔案進行查看,在顯示文本檔案內容后,使用b進行向上翻頁,使用空格進行向下翻頁,使用上下箭頭進行向上或向下一行的移動,使用q鍵進行退出,使用/鍵進行索引,使用n鍵進行/之后的下一次索引,使用G跳到最后一行,用g跳到第一行,
系統目錄一覽
| / | 根目錄,根盤符, |
| /boot | 系統啟動相關檔案, 包含內核,RMA磁盤映像和啟動加載程式, |
| /etc | 組態檔,包含一系列Shell腳本,系統啟動時腳本會運行每個系統服務,是可讀文本檔案, |
| /dev | 包含設備結點的目錄,內核維護著它支持的設備, |
| /home | 用戶的家目錄,用戶家目錄在/home/Username,普通用戶只能在自己的目錄下創建檔案, |
| /root | 管理員的家目錄, |
| /lib | 靜態庫檔案和動態庫檔案,/lib/modules是內核模塊檔案, |
| /lost+found | 當部分恢復了一個損壞的檔案才會用到的目錄, |
| /media | 移動設備的自動掛載點目錄,如光驅和USB驅動, |
| /mnt | 掛載點目錄,是一個額外的臨時檔案系統, |
| /opt | 可選目錄,第三方程式和軟體產品的安裝目錄, |
| /proc | 內核映射檔案,是一個偽檔案系統,是內核的窺視孔,是只讀的, |
| /sys | 跟硬體設備相關的屬性映射檔案,是一個偽檔案系統, |
| /tmp | 臨時檔案,每次重新啟動都會自動清空,還有/usr/tmp, |
| /var | 經常變化的檔案,如資料庫 假脫機檔案 郵件等,/var/log是日志檔案目錄, |
| /bin | 用戶命令,可執行檔案;用到的庫檔案可能在/lib,組態檔在/etc |
| /sbin | 管理命令,可執行檔案;用到的庫檔案可能在/lib,組態檔在/etc |
| /usr | 只讀檔案,其中/usr/local是第三方軟體, |
| /usr/bin | 系統安裝的可執行程式, |
| /usr/lib | 是/usr/bin目錄中程式所用的庫檔案, |
| /usr/local | 讓系統使用的程式的安裝目錄,默認為空,由原始碼編譯的程式會在./bin下, |
| /usr/sbin | 包含系統管理程式, |
| /usr/share | 是很多由/usr/bin目錄中程式使用的共享資料, |
| /usr/share/doc | 大多數系統中軟體的檔案所在地, |
操作檔案和目錄
- cp —— 復制檔案和目錄
- mv —— 移動/重命名檔案和目錄
- mkdir —— 創建目錄
- rm —— 洗掉檔案和目錄
- ln —— 創建硬鏈接和符號鏈接
在圖形檔案管理器中對上面列出的任務會更容易些,而命令列的程式優點在于對復雜檔案任務的操作,
可以輸入mkdir dir1在當前路徑下創建一個名為dir1的目錄,也可以在當前路徑下一次創建多個目錄,如mkdir dir1 dir2 dir3;
可以輸入 cp item1 item2將item1復制到item2,item要求是一個可以識別的路徑,可以使檔案或者目錄;
可以輸入 mv item1 item2將item1移動到item2,具體要求和cp命令類似;
可以輸入rm item,將當前目錄下的item進行洗掉;
(請注意:務必先用ls item將需要的item列出,正確后使用rm進行洗掉,以免錯刪造成麻煩!)
通配符
在Terminal中,可以按照名字,使用通配符進行匹配,通配符可以理解為另一個維度的正則運算式,利用通配符的規則,可以在指定的檔案范圍內正確匹配出滿足通配條件的檔案和目錄,
| 通配符 | 含義 | 示例 |
| * | 匹配任意長度的字符,包括0 1或多個 | a*.cpp 以a開頭的以.cpp結尾的檔案或目錄 |
| ? | 匹配任意的單個字符 | RT?123456 RT和123456中間有一個字母的檔案或目錄 |
| [ ] | 匹配括號中出現的單個字符 | |
| [:upper:] [A-Z] |
匹配一個大寫字母 | [:upper:]*[:digit:] 大寫字母開頭,數字結尾的檔案活目錄 |
| [:lower:] [a-z] |
匹配一個小寫字母 | |
| [:alpha:] [a-Z] |
匹配一個字母,大小寫均可 | |
| [:digit:] [0-9] |
匹配一個數字字符 | |
| [:alnum:] [A-Z,a-z,0-9] |
匹配一個數字或字母 | |
| [^…] | 匹配…之外的一個字符 | |
| [:blank:] | 匹配一個水平空白字符 | |
| [:space:] | 匹配一個水平或垂直空白字符 | |
| [:punct:] | 匹配一個標點 | |
| [:print:] | 匹配一個可列印字符 | |
| [:cntrl:] | 匹配一個不可列印字符 |
使用通配符,可以匹配出滿足用戶條件的檔案和目錄,
小技巧:多個命令順序執行
用戶可以通過;將多條命令放在一起一同執行,
使用命令
- type —— 說明怎樣解釋一個命令
- which —— 顯示會執行哪個可執行程式
- man —— 顯示命令手冊頁
- apropos —— 顯示一系列適合的命令
- info —— 顯示命令info
- whatis —— 顯示一個命令的簡潔描述
- alias —— 創建命令別名
一共可以分成4種命令:
- 可執行程式(file)
- shell的內建命令(builtin)
- shell函式(keyword)
- 命令別名(alias)
利用type command來顯示命令的型別,引數-t可以說明命令型別,-p可以知道可執行檔案的路徑,-P可以知道可執行檔案和別名命令的路徑,
利用命令help可以顯示shell內建命令的幫助檔案,對于內部命令,使用help command;對于外部命令,使用command --help,一般來說,builtin和keyword型別的命令使用help command,如help kill和help if; file和alias型別的命令使用 command --help,如vi --help和grep --help,
利用man命令可以查看所有檔案(命令)的相關幫助,man一共有9個章節的內容,如man 7 man就可以查看第七章中的man命令的相關解釋,一般使用man commandman加命令名就可以查看幫助了,另外,如果使用man加命令名找到了用戶不想要的東西(也就是發生重名),可以更改章節號進行進一步查看, 第一章是可以從Shell運行的命令(man命令的默認引數);第二章是必須由內核完成的功能(系統呼叫);第三章是庫呼叫;第四章是dev中的檔案;第五章是組態檔的格式;第六章是游戲;第七章是宏;第八章是管理命令;第九章是廢棄章節,另外,如果不知道這命令是什么型別或屬于哪個章節,可以使用man -a command進行章節一覽,看看哪些章節中有這個命令,按照指示執行即可,
利用info命令可以得到比help更為詳細的幫助檔案,
利用alias命令可以創建別名,如alias fooo='cd ~ ; ls'就是把等號后面的命令創建一個新的別名,以后每次使用fooo,就會回到用戶家目錄并列出所有項,當然,在用戶不想使用自定義別名后可以使用unalias命令將之前定義的別名命令進行取消,如unalias fooo之后就不再能使用fooo命令了,
利用whatis命令可以得到一個簡潔的命令介紹,
重定向
- cat —— 連接檔案
- sort —— 排序文本行
- uniq —— 報道或省略重復行
- grep —— 列印匹配行
- wc —— 列印檔案的行數、單詞數和位元組個數
- head —— 輸出檔案第一部分
- tail —— 輸出檔案的最后一部分
在默認情況下的Terminal中,標準輸入是鍵盤,標準輸出和標準錯誤會直接顯示在螢屏上,根據Linux一切皆檔案的思想, 實際上的輸入輸出是在叫做STDIN、STDOUT或STDERR的特殊檔案中,所謂的重定向,就是更改輸出走向和輸入來向,將輸入輸出和磁盤檔案進行掛鉤,而不僅僅是使用STDIN、STDOUT或STDERR這些特殊檔案,
| 檔案種類 | 英文簡稱 | 標示符 |
| 標準輸入設備 | STDIN | 0 |
| 標準輸出設備 | STDOUT | 1 |
| 標準錯誤輸出 | STDERR | 2 |
重定向標準輸出
I/O重定向允許我們重新定義標準輸出送到哪里,使用">"或">>"進行輸出重定向,>表示覆寫輸出,>>表示追加輸出,ls -l /usr/bin > ls_output.txt表示將bin中的檔案列出,保存在當前作業目錄的ls_output.txt檔案中,如果只用覆寫輸出">"重定向符號,會導致檔案被覆寫,只能保留最新的一次重定向指令的結果;如果要保留多次的重定向結果,建議使用">>"符號,
重定向標準錯誤輸出
如果命令輸入錯誤,進行重定向標準輸出符">"或">>",就會得到一個空檔案,因為像ls之類的指令,錯誤的位置不會得到任何標準輸出,這可以作為清空檔案的一個命令,但是如果你想在檔案中得到這個錯誤資訊,就必須進行重定向,使用"2>"和"2>>"來進行標準錯誤重定向,
注:">"和">>"默認為重定向標準輸出,如果需要重定向標準錯誤輸出,應使用"2>"和"2>>",

重定向STDOUT和STDERR到同一檔案
上文注釋到,STDOUT和STDERR的重定向符是不同的,那如何通過一條命令,可以同時重定向STDOUT和STDERR兩種輸出,到同一個檔案中呢?
可以在原命令最后添加2>&1在STDOUT重定向(1)的功能上增加STDSTDERR(2)功能,

將不需要的輸出重定向到/dev/null
可以將不需要的資料進行重定向,位置是/dev/null,這個操作相當于沒有存盤、沒有顯示任何資料,
連接命令cat
cat命令讀取一個或多個檔案,然后復制他們到標準輸出,換而言之,cat file.txt可以把文本型別的檔案直接輸出在命令列中,
利用cat命令和>重定向符也可以對簡單文本進行輸入,使用cat > file可以進行檔案輸入作業,
要記得,使用cat命令輸入完畢后,是使用鍵盤的Ctrl+D鍵進行結束操作的,

管道線 |
如果在命令列中,有command1 | command2形式出現,則表示先執行command1再執行command2,且command2的輸入是command1的輸出,|表示管道線,利用管道線,可以運行多個命令,最終輸出一個結果,例如:ls -l / | less就是將根目錄中的詳細項利用less文本查看器進行輸出,
將若干跟管道線結合在一起使用,形成一個復雜的操作,就被稱作過濾器,在過濾器中常見的命令有sort、uniq等,sort命令可以進行排序,uniq命令可以進行去重,wc命令可以查看文本大小,例如,使用ls /usr/bin /bin會將兩個檔案分別排序后輸出,使用ls /usr/bin /bin | sort | less會將兩個檔案合并排序后輸出,使用ls /usr/bin /bin | sort | uniq | less會將兩個檔案合并排序并去重后輸出,wc命令輸出的三個數字分別是檔案總行數,總單詞數,總位元組數,
Q&A
Q:Linux中的";"和"|"都可以進行執行,區別是什么?
A:";"是依次執行,不論成功失敗,都會執行每一條陳述句,而"|"是管道,需要符合后一個引數的輸入是前一個引數的輸出,相當于執行一條復雜的陳述句,
列印匹配行grep
使用grep pattern file可以將文本檔案中和通配符pattern的匹配行進行列印,例如:ls /usr/bin /bin | sort | uniq | grep zip可以將名字中含有zip的行進行列印, grep的常用引數主要有-i(忽略大小寫)和-v(列印不包含字符),
列印并保存tee
在Linux中,結果要么被顯示出來,要么被列印出來,將tee命令安裝在管道上可以在列印的同時保存檔案,例如ls /bin | tee file1.txt | grep zip,這個命令將/bin中的檔案名都保存在file1.txt中,并在這些檔案名中找出帶有zip的進行輸出,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/200243.html
標籤:其他
下一篇:sed洗掉連續兩個空行
