學習Linux操作的第一步,你需要知道這些命令行!

2021-03-02 異步圖書

點擊關注 異步圖書,置頂公眾號

參與文末話題,得異步新書

Linux下的命令到底有多少?大部分人可能都不清楚。其中有一些命令是大多數系統中都包含的,這些命令基本上都包含在GNU Coreutils包中。

當然,還有一些命令不包含在Coreutils包中,而是存在於一些基本且實用的軟體中,如sed、awk和grep等。

很多用戶可能只用過其中的部分命令,而且可能只掌握了這部分命令的部分功能。

很多Linux初學者面對這麼多的命令往往不知道如何入手,於是就產生了如何學習Linux命令的疑問——到底哪些命令、哪些參數有用?

Linux系統指令目前有3000個左右,而且隨著作業系統版本的不斷升級,命令數量會越來越多。這樣規模龐大的命令群很容易造成Linux初學者手忙腳亂,甚至一些擁有多年Linux運維經驗的人員有時也需要到網絡上去查詢一些命令。

因此,作者就萌生了編寫本書的想法,將自己多年運維工作過程中學習和積累的非常實用的命令整理出來,希望對廣大的Linux初學者和有一定經驗的應用運維從業者有所幫助和助益。

一般所說的「命令行」是指Linux中直接操縱作業系統的底層命令,Linux命令是對Linux系統進行管理的命令。其實,命令行就是溝通的語言,就像人與人之間溝通使用的語言。

用戶和Linux內核之間溝通也需要一個雙方都可以明白的語言,這就是命令行,用戶輸入命令後,內核就會明白用戶要讓它做什麼。

如果一時無法理解這些概念性的東西,也沒有關係,因為隨著命令行知識的不斷積累,加上不斷的練習,讀者就會構建自己的知識體系,逐漸理解和掌握。

下面來解釋為什麼要熟練掌握命令行操作。

1.1.1 命令行執行速度快

命令行執行速度基於毫秒,非常之快。如此快的執行速度,意味著我們在使用腳本執行一般性的任務時,返回結果的速度同樣會非常快,這是命令行的優勢之一。

【實例1-1】命令行執行速度演示

[root@linux_command ~]# ping qq.com -c 3

PING qq.com (14.17.32.211) 56(84) bytes of data.

64 bytes from 14.17.32.211 (14.17.32.211): icmp_seq=1 ttl=53 time=33.8 ms

64 bytes from 14.17.32.211 (14.17.32.211): icmp_seq=2 ttl=53 time=33.5 ms

64 bytes from 14.17.32.211 (14.17.32.211): icmp_seq=3 ttl=53 time=33.6 ms

--- qq.com ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2003ms

rtt min/avg/max/mdev = 33.586/33.678/33.839/0.240 ms

[root@linux_command ~]# ping qq.com -c 3 -w 3

PING qq.com (14.17.32.211) 56(84) bytes of data.

64 bytes from 14.17.32.211 (14.17.32.211): icmp_seq=1 ttl=53 time=33.6 ms

64 bytes from 14.17.32.211 (14.17.32.211): icmp_seq=2 ttl=53 time=33.4 ms

64 bytes from 14.17.32.211 (14.17.32.211): icmp_seq=3 ttl=53 time=33.4 ms

--- qq.com ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2003ms

rtt min/avg/max/mdev = 33.459/33.541/33.686/0.234 ms

上述代碼中,ping命令返回的結果均在毫秒級別。

1.1.2 命令行針對結果

命令行界面沒有圖形界面煩瑣的「下一步」之類的操作,直接返回結果,乾淨利落。

下面的代碼演示了查看當前登錄伺服器主機用戶是誰,命令直接給出執行結果,即當前登錄的用戶是root,簡單明了。

【實例1-2】命令行返回結果精準演示

whoami

輸出當前作業系統的用戶名。

[root@linux_command ~]# whoami

root

實例1-3】列印伺服器CPU的信息

cat/proc/cpuinfo

用於列印伺服器CPU(中央處理器)的所有指標信息。

[root@linux_command ~]# cat /proc/cpuinfo

processor           : 0

vendor_id           : GenuineIntel

cpu family          : 6

model               : 61

model name          : Intel Core Processor (Broadwell)

stepping            : 2

microcode           : 0x1

cpu MHz             : 2099.996

cache size          : 4096 KB

physical id         : 0

siblings            : 1

core id             : 0

cpu cores           : 1

apicid              : 0

initial apicid      : 0

fpu                 : yes

fpu_exception       : yes

cpuid level         : 13

wp                  : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_  

tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic  

movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm  

3dnowprefetch fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt

bogomips            : 4199.99

clflush size        : 64

cache_alignment     : 64

address sizes       : 40 bits physical, 48 bits virtual

power management    :

processor           : 1

vendor_id           : GenuineIntel

cpu family          : 6

model               : 61

model name          : Intel Core Processor (Broadwell)

stepping            : 2

microcode           : 0x1

cpu MHz             : 2099.996

cache size          : 4096 KB

physical id         : 1

siblings            : 1

core id             : 0

cpu cores           : 1

apicid              : 1

initial apicid      : 1

fpu                 : yes

fpu_exception       : yes

cpuid level         : 13

wp                  : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat  

pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good  

nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt  

tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt

bogomips            : 4199.99

clflush size        : 64

cache_alignment     : 64

address sizes       : 40 bits physical, 48 bits virtual

power management:

從上述代碼中可以看到,中央處理器命令行返回(CPU)信息精準直觀。

1.1.3 命令行反饋信息明確

命令行在執行過程中如果出錯,就直接拋出錯誤;如果執行正確,那麼默認什麼都不返回。在信息的反饋力度和準確性方面毋庸置疑,非常乾脆,這正是系統維護人員應該具備的素質和技術素養。

下面的指令判斷/etc/passwd文件是否存在,如果存在,則列印「File Exists...」;如果不存在,則列印「File not Exists...」。

【實例1-4】判斷文件是否存在

[root@linux_command ~]# [ -f /etc/passwd ] && echo 'File Exists...' || echo 'File not exists...'

File Exists...

從上述例子中可以看出,信息反饋非常明確。

下面的命令執行成功後,會返回數字0,其中,seq 10指令表示列印1~10的數字序列。

【實例1-5】命令執行成功返回數字0

[root@linux_command ~]# seq 10

[root@linux_command ~]# echo $?

0

在下面的代碼演示中,命令執行失敗後,返回結果為非0數字。

【實例1-6】命令執行失敗返回非0數字

[root@linux_command ~]# seq abc

seq: invalid floating point argument: abc

Try 'seq --help' for more information.

[root@linux_command ~]# echo $?

1.1.4 命令行便於調試

命令行的報錯信息一般都是比較直觀的。另外,我們平時在編寫Shell腳本的時候,一般都是多個腳本獨立編寫,這樣的好處是便於調試,也符合Linux系統本身的設計特點,目的就是體現「組合單一專用命令,完成複雜任務」的思想。因此,這也是我們在學習Shell腳本編寫過程中非常重要的一個思想。

【實例1-7】for循環列印1~15的數字序列

[root@linux_command ~]# for num in $(seq 15);do echo $num;done  

也可以採用下面的寫法,和上面輸出的結果是一致的。

[root@www.ansible.com ~]# for num in {1..15};do echo -e "\033[32;40m${num}\033[0m";done

核心代碼解析:

echo {1..15}

和下面的代碼結果一致,表示1~15的數字序列。

echo `seq 15`

echo $(seq 15)

下面來看如果命令行寫錯了,該怎麼處理。

【實例1-8】命令執行失敗演示

[root@linux_command ~]# for num in $(seq 15);do echo $num;;done

-bash: syntax error near unexpected token `;;'

上述代碼中多了一個分號,從代碼的報錯提示中可以看到,信息提示非常準確,立刻就能識別是哪裡出了問題。

Windows作業系統更加側重圖形界面操作,更適合一般的用戶,而對於追求效率和功能性的Linux系統運維工程師而言,命令行是他們的明智之選。

何以見得?可以通過下文的例子進行說明。

1.2.1 快速文件操作

快速文件操作主要是指在日常運維過程中對文件的複製、粘貼和移動。下面分別介紹在圖形界面和命令行中操作文件的步驟。

1.圖形界面中的文件操作

圖1-1 源文件夾和目標文件夾準備文件夾

圖1-2 準備複製圖片文件

2.命令行中的文件操作

[root@linux_command ~]#cp  /path/filename  /path/dest

上述命令同樣可以完成文件的複製操作,而且只需要一步(一條指令即可完成文件複製操作)。

圖1-3 打開目標文件夾

圖1-4 複製到目標文件夾

【實例1-9】命令行文件操作演示

[root@linux_command ~]# cp -av /etc/passwd /tmp

'/etc/passwd_command ~]# cp -av[root@linux_command ~]# ls -la /tmp/passwd

-rw-r--r--. 1 root root 1444 Aug 23 20:48 /tmp/passwd

上述代碼複製/etc/passwd文件到/tmp目錄下。

1.2.2 快速操作軟體

Windows作業系統中安裝軟體通常需要經歷如下3個步驟。

而在Linux命令行中安裝軟體,只需要一個步驟即可完成。

【實例1-10】命令行中安裝httpd軟體操作演示

yum -y install httpd

上述代碼中,一條命令即可完成httpd軟體的安裝工作。

1.2.3 快速條件搜索

快速條件搜索在Windows作業系統中通常需要經歷下面3個步驟。

Windows作業系統本身的搜索能力有限,主要體現在搜索條件的匹配及搜索速度方面,如果需要更為強大的搜索功能,可能需要藉助圖1-5所示的第三方搜索軟體。

圖1-5所示的軟體功能很強大,例如搜索當前計算機中的所有以CentOS開頭,中間是任意字符結尾是ISO鏡像文件(*.iso為正則表達式的描述方法),如圖1-6所示。

圖1-5 搜索軟體 

圖1-6 查找ISO鏡像文件

而在Linux中,功能強大的find命令可以支持各種形式的搜索,其中包含尤其強大的正則表達式。

find /root -name [文件名]  根據文件名搜索(嚴格匹配)

find /root -iname [文件名] 不區分大小寫

find /root -user [所有者名] 根據所有者來搜索

find /root -size +100M  根據大小搜索

find /root -size +100k -a -size -50M 範圍搜索

find /root -size +100k -a -size -50M -exec ls -lh {} \;

上述代碼中,使用find命令可以針對文件名、文件所有者、權限、文件大小等進行快速搜索,可見命令行功能之強大。

通過一條find命令就可以達到搜索的目的,不僅快捷,而且功能比圖形界面更加強大。

這樣的例子其實還有很多,從開發的角度來說,命令行為Linux應用運維或者高級運維帶來了不少好處。下面以3個實例來說明命令行在速度及便捷性方面的優勢。

【實例1-11】查找根目錄下名為passwd的文件,不區分大小寫

find/-iname passwd

查找當前系統中根目錄下,不區分大小寫,名稱為passwd的文件。

[root@linux_command ~]# find / -iname passwd

/sys/fs/selinux/class/passwd

/sys/fs/selinux/class/passwd/perms/passwd

/etc/passwd

/etc/pam.d/passwd

/tmp/passwd

/tmp/PASSWD

/usr/bin/passwd

上述代碼中,「-iname」選項表示不區分大小寫。

【實例1-12】查找根目錄下名為passwd的文件

find/-iname passwd

查找當前系統中根目錄下,名稱為passwd的文件。

[root@linux_command ~]# find / -name passwd

/sys/fs/selinux/class/passwd

/sys/fs/selinux/class/passwd/perms/passwd

/etc/passwd

/etc/pam.d/passwd

/tmp/passwd

/usr/bin/passwd

上述代碼中,「-name」選項代表查找根目錄下名為passwd的文件。

【實例1-13】查找/data目錄下,以「*.log」作為結尾並且是20天以前的所有文件。

find /data/ -type f –name "*.log" –mtime +20

查找當前系統中/data/目錄下,名稱為「*.log」結尾,時間是20天以前的文件。

[root@linux_command ~]# find /data/ -type f -name "*.log" -mtime +20

/data/sh/shell/grep.log

/data/1.log

/data/2.log

/data/3.log

/data/4.log

/data/5.log

/data/6.log

/data/7.log

/data/8.log

/data/9.log

上述代碼中有以下幾個條件。


作者多年工作實踐經驗的總結,全方位系統地解讀Linux運維之道,帶你輕鬆從入門到精通。

本書特點

(1)模擬企業環境,實用至上。全書內容是作者近 10 年工作經驗的總結,耗時約 500個日夜完成。書中的每個章節都精選了近百個實例,作者對每個實例進行逐步分解、進化、升級修訂,讀者根據需要做簡單修改後,即可在企業級Linux運維生產環境部署應用。 

(2)結構合理,圖文並茂。每個章節採用循序漸進的方式進行講解,由淺入深、逐步引導,讓讀者更容易接受和吸收書中的知識。尤其對於初學者,入門學習時就能得到來自一線企業實戰的技術分享,想必是一件十分愉悅的事情吧!每章結尾都有總結和思維導圖,供讀者複習,在梳理知識的同時能夠明確每章的架構和層次,使讀者輕鬆入門Linux。 

(3)網絡及技術支持。讀者在遇到問題時,可以及時聯繫作者,作者會儘可能地給予讀者全方位的免費技術支持。 

相關焦點

  • 學習linux從哪開始
    成功歸功與它圖形界面,你會點滑鼠嗎你會敲鍵盤嗎?所以你就會上網會聊天會玩遊戲了。       第一步開始當然是選個linux系統,有環境才能玩,沒環境你說個啥?              現在發行的linux系統很多redhat,suse,CentOS,fedora,ubuntu還有等等。
  • Linux 新手必知必會的 10 條 Linux 基本命令
    幫助新手走出第一步的 10 個 Linux 基本命令當我們談論 Linux 命令時,實質上是在談論 Linux 系統本身。這短短的 10 個 Linux 基本命令不會讓你變成天才或者 Linux 專家,但是能幫助你輕鬆開始 Linux 之旅。使用這些基本命令會幫助新手們完成 Linux 的日常任務,由於它們的使用頻率如此至高,所以我更樂意稱他們為 Linux 命令之王!
  • 初識Linux,這些命令你需要了解
    但是既然進了Linux的大門,Linux那些優秀的功能,還是需要去了解。本文就介紹一些常見的Linux命令,通常這些命令在macOS也能用。下面的列表按字母順序顯示。命令在列表中的位置並不代表其有用或簡單。有關命令用法的詳細說明,可以使用man命令查看。
  • 通過 Linux 命令行連接 Wifi | Linux 中國
    作者 | Nick Congleton 譯者 | lujun9972目標:僅使用命令行工具來配置 WiFi發行版:適用主流的那些發行版要求:安裝了無線網卡的 Linux 並且擁有 root 權限。難度:簡單約定:◈ # - 需要使用 root 權限來執行指定命令,可以直接使用 root 用戶來執行,也可以使用 sudo 命令簡介許多人喜歡用圖形化的工具來管理電腦,但也有很多人不喜歡這樣做。如果你比較喜歡命令行工具,管理 WiFi 會是件很痛苦的事情。然而,事情本不該如此。
  • 20個命令行工具監控 Linux 系統性能
    我已經有5年 Linux 管理員的工作經歷,知道如何監控系統使其保持正常運行。為此,我們編寫了對於 Linux/Unix 系統管理員非常有用的並且最常用的20個命令行系統監視工具。這些命令可以在所有版本的 Linux 下使用去監控和查找系統性能的實際原因。這些監控命令足夠你選擇適合你的監控場景。
  • 如何用 Linux 命令行發電子郵件 | Linux 中國
    Linux 可以用多種方式通過命令行發送電子郵件。有一些方法十分簡單,有一些相對會複雜一些,不過仍舊提供了很多有用的特性。選擇哪一種方式取決於你想要什麼 —— 向同事快速發送消息,還是向一批人群髮帶有附件的更複雜的信息。接下來看一看幾種可行方案:mail發送一條簡單消息最便捷的 Linux 命令是 mail。
  • Yoda:您的 Linux 系統命令行個人助理 | Linux 中國
    不久前,我們介紹了一個名為 「Betty」[1] 的命令行虛擬助手。今天,我偶然發現了一個類似的實用程序,叫做 「Yoda」。Yoda 是一個命令行個人助理,可以幫助您在 Linux 中完成一些瑣碎的任務。它是用 Python 編寫的一個自由開源應用程式。在本指南中,我們將了解如何在 GNU/Linux 中安裝和使用 Yoda。安裝 Yoda,命令行私人助理。
  • 使用Grub命令行來營救Linux作業系統
    在採用Grub啟動的Linux系統中,當由於操作人員無意破壞/boot/grub/menu.lst文件後,Linux系統就無法通過grub界面啟動了,只能通過Grub命令行來引導、營救啟動作業系統。
  • 在 Linux 上安裝使用 VirtualBox 的命令行管理界面 VBoxManage
    VirtualBox 擁有一套命令行工具,你可以使用 VirtualBox 的命令行界面 (CLI) 對遠程無界面的伺服器上的虛擬機進行管理操作
  • 4 個 Linux 下最好的命令行下載管理器/加速器
    有很多可以加速下載的下載管理器和加速器可用(圖形化界面和命令行界面)。所有的下載工具做著同樣的任務,但它們的處理方式和功能是不同的,比如,單線程和多線程、交互和非交互。 在這裡,我們將列出 4 個最好的我們日常工作使用的命令行下載加速器。
  • 別再被叫linux小白了,你跟linux高手只差這8個快捷鍵命令?
    不管是運維、開發還是測試,熟悉linux命令已經是必備的技能了。但初學者往往都將學習停留在掌握基礎命令上,用來用去還是那幾個常見命令,卻不知道,真正的高手都是在尋找最短路徑解決問題。高手總是能用高效的方法完成任務,不是因為天賦高,而是因為他們踩過的坑比你多,最後總結出來了最高效的方法。今天就給大家羅列了幾個高手總結的快捷鍵命令,讓你的linux操作也能健步如飛。linux最常用的8個快捷鍵1.tab:
  • 你需要知道的SELinux入門學習
    如果你之前使用Linux的時候都禁用或者忽略了SELinux,那你的Linux可真是安全堪憂了,快讓我們把這種新功能學起來,將自己的資源牢牢抓在自己手中吧!了解了這些背景知識,現在讓我們來正式入門吧!SELinux概念我們都知道,傳統Linux系統中,默認權限是對文件/目錄所有者、所屬組、還有其他人的rwx權限進行管控,這種訪問控制系統稱為DAC,而在SELinux中則是使用MAC,那這二者到底有什麼區別呢?
  • 你不知道的PyCharm命令行用法
    ,PyCharm 實際上有一個命令行程序。通過這個命令行程序可以幫你做很多事情。PyCharm的命令行程序默認是關閉的,需要先打開才能使用。本文以macOS版本的PyCharm來演示。Windows與Linux的用戶請自行閱讀官方文檔(文末有地址)。
  • 在命令行用 sort 進行排序 | Linux 中國
    如果你曾經用過數據表應用程式,你就會知道可以按列的內容對行進行排序。例如,如果你有一個費用列表,你可能希望對它們進行按日期或價格升序抑或按類別進行排序。如果你熟悉終端的使用,你不會僅為了排序文本數據就去使用龐大的辦公軟體。這正是 sort 命令的用處。安裝你不必安裝 sort ,因為它向來都包含在 POSIX 系統裡。
  • 在 Linux 命令行下使用「原力」 | Linux 中國
    很多 Linux 命令都有 -f 選項,意思你現在肯定也知道了,原力(LCTT 譯註:force 選項原意是「強制」)!很多時候你先嘗試執行命令然後失敗了,或者提示你需要補充輸入更多選項。通常這都是為了保護你試著改變的文件,或者告訴用戶該設備正忙或文件已經存在之類的。如果你不想被這些提醒打擾或者壓根就不在乎,就使用原力吧!
  • Linux常用命令 & 實用命令萬字總結
    多個用戶可以在同一時間作業系統執行不同的任務,一個用戶也可以多個人登陸操作。一般來說root的權限最大,我們經常使用的資料庫一般會用一個mysql的用戶,網頁相關的我們可能用一個www的帳號,大家都是知道刪除跑路的故事,因此有一些操作權限是要交給一些專人管理的。為了系統的學習,我覺得有必要了解一下它的基本知識。
  • linux常用命令匯總
    ,操作的感覺和看的感覺是完全不一樣的,操作著操作著,你就入門了。添加多行注釋的方法:1.進入vi/vim編輯器,按CTRL+V進入可視化模式(VISUAL BLOCK)3.選擇完畢後,按大寫的的I鍵,此時下方會提示進入「insert」模式,輸入你要插入的注釋符,例如#4.最後按ESC鍵,你就會發現多行代碼已經被注釋了刪除多行注釋的方法:Ctrl+v 進入列選擇模式,移到光標把注釋符選中,按下d,注釋就被刪除了。
  • 在Linux命令行下令人驚嘆的驚嘆號(!)
    符號在Linux中不但可以用作否定符號,還可以用來從歷史命令記錄中取出命令或不加修改的執行之前運行的命令。下面的所有命令都已經在Bash Shell中經過確切地檢驗。儘管我沒有試過,但大多都不能在別的Shell中運行。這裡我們介紹下Linux命令行中符號'!'那驚人和奇妙的用法。1.
  • 用於提權的Linux命令,即「xxd」
    使用xxd跳過第n行:在轉換文件時,有許多數據可能是我們不需要的。因此,我們可以跳過這些內容。我們可以使用xxd跳過第n行,並在跳過的行後生成十六進位值。假設在我當前的情況下,我想要從第5行生成十六進位轉儲,那麼可以通過使用「-s」參數後跟xxd命令來實現。xxd -s 0x50 secret.txt將輸出限制為特定長度:以上我已經解釋了如何通過跳過行數來檢索數據。但是,如果你想要限制標準輸出的長度,那麼你可以使用「-l」參數。
  • 在命令行中管理 Wifi 連接
    Linux 發行系統,一般的建議都是讓您通過有線連接來接到網際網路的。這主要的原因有兩條:第一,您的無線網卡也許安裝的驅動不正確而不能用;第二,如果您是從命令行中來安裝系統的,管理 WiFi 就非常可怕。我總是試圖避免在命令行中處理 WiFi 。但 Linux 的世界,應具有無所畏懼的精神。如果您不知道怎樣操作,您需要繼續往下來學習之,這就是寫這篇文章的唯一原因。所以我迫使自己學習如何在命令行中管理 WiFi 連接。