別出心裁的Linux命令學習法

別出心裁的Linux命令學習法

操做系統操做系統爲你完成全部「硬件相關、應用無關」的工做,以給你方便、效率、安全。操做系統的功能我總結爲兩點:管家婆服務生html

  • 管家婆:經過進程虛擬內存文件三個重要抽象管理計算機的CPU、內存、I/O設備。
  • 服務生:爲用戶提供shell,爲程序員提供系統調用

你們都比較熟悉Windows操做系統,Linux也是一種操做系統。Linux的架構以下圖:node

Linux 架構

若是使用GUI,Linux系統和Windows操做系統的使用沒有什麼大的區別,用鼠標能夠解決大部分問題。python

Linux學習應用的一個特色是經過命令行進行使用。學習使用Linux,實驗樓推薦的學習路徑以下:linux

Linux學習路徑

命令行的好處主要是能夠批處理並自動化,還有些功能GUI沒法完成,你們能夠慢慢學習體會。git

那麼多命令先學什麼,後學什麼是一個大問題,本文指望找一種方式,經過解決「Where」的問題,經過幾個核心命令的學習,讓你能夠觸類旁通經過實踐學習其餘命令,從而解決Linux命令的「what」問題。程序員

咱們使用的Linux發行版是Ubuntu,使用Ubuntu有幾個快捷鍵要掌握一下,能夠提升使用命令行的效率:github

  • CTRL+ALT+T:打開終端,每天使用終端,用鼠標打開過低效了;
  • CTRL+SHIFT+T:新建標籤頁,編程時有重要應用;
  • ALT+數字N:終端中切換到第N個標籤頁,編程時有重要應用;
  • Tab:終端中命令補全,當輸入某個命令的開頭的一部分後,按下Tab鍵就能夠獲得提示或者幫助完成;
  • 上下鍵盤:切換命令歷史,剛輸入一個很長的命令,按鍵就能夠恢復;
  • CTRL+C:中斷程序運行。

1 Linux命令

登陸Linux後,咱們就能夠在#或$符後面去輸入命令,有的時候命令後面還會跟着選項(options)或參數(arguments)。即Linux中命令格式爲:web

command [options] [arguments] //中括號表明是可選的,即有些命令不須要選項也不須要參數

其中選項(option)是調整命令執行行爲的開關,選項不一樣決定了命令的顯示結果不一樣,參數(arugment)是指命令的做用對象。正則表達式

如ls命令,lsls .是兩條等價的命令,顯示是當前目錄的內容,這裏「.」就是參數,表示當前目錄,這個參數缺省能夠省略。咱們能夠用ls -a .顯示當前目錄中的全部內容,包括隱藏文件和目錄。其中「-a」 就是選項,改變了顯示的方式,以下圖所示:shell

Linux Command Example

以上簡要說明了Linux命令以及選項和參數的區別,但具體Linux中哪條命令有哪些選項及參數,以及如何使用,須要咱們靠經驗積累或者查看Linux的幫助文檔了。

2 man命令

不論學習編程仍是Linux命令,掌握幫助文檔的使用都是很重要的,是觸類旁通的重要途徑。

man是manual的縮寫,咱們能夠經過man man來查看man的幫助,以下圖:

man man

man

幫助文檔包含:

1 Executable programs or shell commands(用戶命令幫助) 
    2 System calls (系統調用幫助)  
    3 Library calls (庫函數調用幫助)  
    4 Special files (usually found in /dev)  
    5 File formats and conventions eg /etc/passwd(配置文件幫助)  
    6 Games  
    7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)  
    8 System administration commands (usually only for root)  
    9 Kernel routines [Non standard]

解釋一下:

1是普通的Linux命令  
2是系統調用,操做系統的提供的服務接口 
3是庫函數,  C語言中的函數
5是指文件的格式,好比passwd, 就會說明這個文件中各個字段的含義  
6是給遊戲留的,由各個遊戲本身定義  
7是附件還有一些變量,好比向environ這種全局變量在這裏就有說明  
8是系統管理用的命令,這些命令只能由root使用,如ifconfig

其中1,2,3是初學時學習的重點,區別你們練習一下就知道了,好比printf是C語言的庫函數,也是一個Linux命令,你們嘗試一下man printf,man 1 printf,man 3 printf,體會一下區別。

知道printf 命令也好,printf函數也好,查找幫助文檔都很容易。man有一個-k 選項用起來很是好,這個選項讓你學習命令,編程時有了一個搜索引擎,能夠觸類旁通。

咱們經過一個例子來講明,好比數據結構中學過排序(sort),我不知道C語言中有沒有完成這個功能的函數,能夠經過「man -k sort」來搜索,由於是找C庫函數,咱們關注帶3的,qsort好像是個好選項,以下圖:

結合後面學習的grep 命令和管道,能夠多關鍵字查找:

man -k key1 | grep key2 | grep key3 | ...

例如使用man -k sort | grep 3,能夠更好的找到qsort,你能夠試試。

man -k 有個等價的命令apropos,你們能夠學習一下。

使用man -k找到命令後,能夠用man -f cmd查看命令的基本功能。man -f等價於whatis.

3 cheat 命令

man 雖然很重要,但有些命令看了幫助還不會用,初學者須要例子,cheat就是這個身邊的小抄。
cheat 命令不是Linux自帶的,你們參考這篇文章英文版)安裝,實驗樓課程實驗系統中已經安裝了。Ubuntu中已經默認安裝好了python,cheat安裝過程以下:

sudo apt-get install python-pip git
sudo pip install docopt pygments
git clone https://github.com/chrisallenlane/cheat.git
cd cheat
sudo python setup.py install

cheat是做弊,小抄的意思。

cheat命令是在GNU通用公共許可證下,爲Linux命令行用戶發行的交互式備忘單應用程序。它提供顯示Linux命令使用案例,包括該命令全部的選項和簡短但尚可理解的功能。好比強大的find命令,初學者看完幫助文檔後可能仍是一頭霧水,那麼咱們cheat find一下:

\*To find files by case-insensitive extension (ex: .jpg, .JPG, .jpG):

find . -iname "*.jpg"

\# To find directories:

find . -type d

\# To find files:

find . -type f

\# To find files by octal permission:

find . -type f -perm 777

\# To find files with setuid bit set:

find . -xdev \( -perm -4000 \) -type f -print0 | xargs -0 ls -l

\# To find files with extension '.txt' and remove them:

find ./path/ -name '*.txt' -exec rm '{}' \;

\# To find files with extension '.txt' and look for a string into them:

find ./path/ -name '*.txt' | xargs grep 'string'

\# To find files with size bigger than 5 Mb and sort them by size:

find . -size +5M -type f -print0 | xargs -0 ls -Ssh | sort -z

\# To find files bigger thank 2 MB and list them:

find . -type f -size +20000k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'

\# To find files modified more than 7 days ago and list file information

find . -type f -mtime +7d -ls

\# To find symlinks owned by a user and list file information

find . -type l --user=username -ls

\# To search for and delete empty directories

find . -type d -empty -exec rmdir {} \;

\# To search for directories named build at a max depth of 2 directories

find . -maxdepth 2 -name build -type d

\# To search all files who are not in .git directory

find . ! -iwholename '*.git*' -type f

\# Find all files that have the same node (hard link) as MY_FILE_HERE

find . -type f -samefile MY_FILE_HERE 2>/dev/null

經過實踐結合man命令把上面的例子理解了,find基本上就用的很不錯了。

使用cheat命令做弊是能夠的。:)

4 其餘核心命令

和查找相關的核心命令還有find,locate,grep,whereis,which等,其中:

  • find查找一個文件在系統中的什麼位置,locate是神速版本的find(Windows下有個神器Everything和locate功能相似)。能夠經過cheat find學習find命令。

  • grep 能夠對文件全文檢索,好比你接手一個C語言項目,裏面有上百個C源文件,想找找main函數在那個文件中,你能夠經過grep -n main *.c,快速找到main在哪一個C文件中並指出在第幾行。grep支持正則表達式正則表達式也是一個重要的元知識。能夠經過cheat grep學習grep命令。上面還提到,

  • whereis,which告訴你使用的命令工具裝在什麼地方。Linxu初學者會不習慣Linux的文件系統,C盤呢?D盤呢?用apt-get install安裝程序好象也不用咱們選擇安裝位置,程序裝在哪了?好比:咱們在Linux下上網使用firefox瀏覽器,你們可使用whereis firefox或更精確的使用which firefox來看看結果。

  • apt-cache能夠在使用apt-get install安裝一個程序時先找找軟件源的庫裏有沒有這個程序,有才能夠安裝。好比老師推薦了一個調試工具ddd,你能夠用apt-cache search ddd查查有沒有這個程序。

5 終端「每日提示」學習

主動學習是學習方法中很是重要的一點,咱們能夠「問題驅動」,遇到問題用"man -k key"搜索相關Linux命令,而後用"man cmd" 查看幫助文檔結合「chea cmd」來學習,開始學習時咱們也能夠每次打開終端就學習一個Linux命令,這樣日積月累,就能更好的掌握Linux命令了。

咱們可讓終端自動給咱們個每日提示,讓咱們的學習自動化:

更娛樂化一點,咱們先安裝cowsay。在Ubuntu下安裝cowsay:

sudo apt-get install cowsay

安裝cowsay後,在.bashrc中增長下面一行:

cowsay -f $(ls /usr/share/cowsay/cows | shuf -n 1 | cut -d. -f1) $(whatis $(ls /bin) 2> /dev/null | shuf -n 1)

每次打開終端,就會出現相似的界面,你就能夠了解一個Linux命令了:

6 小結

上面的命令包括man -k有一個共同特色就是基於「搜索」解決了學習方法問題,這些命令學好用熟後能夠觸類旁通,你們重點學習,掌握了他們,其餘命令就能夠自學了。特別是man(man -k)和cheat對Linux命令學習很是重要。

咱們課程涉及到的Linux命令在下面列出了,使用上面的搜索命令經過實踐學習吧:

ac,apt-get,apt-cache
bzip2,
cat,cd,chgrp,chmod,chown,clear,compress,cp,
dd,ddd,df,diff,du,dump,
env,
find,finger,free,
gcc,gdb,grep,gzip,
head,
kill,
less,ln,locate,l,ls,
make,man,mkdir,more,mount,mt,mv,
netstat,nslookup,
od,objdump
passwd,patch,ps,pstop,pwd,
rm,rmdir
shell,sort,ssh,stty,
tail,tar,telnet,touch,tree,
umask,uname,unzip,
vi,vim,
whereis,which,who,write
...

命令行的藝術(The Art of Command Line) 給出了一個由淺入深的學習路徑。

學習Linux命令,Linux命令大全是個很好參考,集合了man和cheat的功能,查閱起來很方便。

更多Linux命令的學習也能夠參考這裏(英文)還有這裏(中文),以及O'Reilly LinuxThe Linux CookbookLinuxCommand

除了這些文檔,當遇到不懂的命令時,也能夠到Explain Shell,讓它給解釋一下。

若是本身沒有Linux環境,結合上面講的搜索命令,能夠去實驗樓學習《Linux 基礎入門(新版)》課程實踐練習。

參考資料

  1. Linux命令速查手冊 (電子版,Linux Phrasebook)

  2. Unix/Linux編程實踐教程

  3. 操做系統教程

  4. Linux系統架構
  5. 打造高效的工做環境 – Shell 篇
  6. 自學Linux命令的四種方法


歡迎關注「rocedu」微信公衆號(手機上長按二維碼)

作中教,作中學,實踐中共同進步!

rocedu



若是你以爲本文對你有幫助,請點一下左下角的「好文要頂」和「收藏該文

相關文章
相關標籤/搜索