Linux命令學習

原文地址:http://www.cnblogs.com/rocedu/p/4902411.html

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

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

大家都比較熟悉Windows操作系統,Linux也是一種操作系統。Linux的架構如下圖:

Linux 架構

如果使用GUI,Linux系統和Windows操作系統的使用沒有什麼大的區別,用鼠標可以解決大部分問題。

Linux學習應用的一個特點是通過命令行進行使用。學習使用Linux,實驗樓推薦的學習路徑如下:

Linux學習路徑

命令行的好處主要是可以批處理並自動化,還有些功能GUI無法完成,大家可以慢慢學習體會。

那麼多命令先學什麼,後學什麼是一個大問題,本文期望找一種方式,通過解決“Where”的問題,通過幾個核心命令的學習,讓你可以舉一反三通過實踐學習其他命令,從而解決Linux命令的“what”問題。

我們使用的Linux發行版是Ubuntu,使用Ubuntu有幾個快捷鍵要掌握一下,可以提高使用命令行的效率:

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

1 Linux命令

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

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

其中選項(option)是調整命令執行行爲的開關,選項不同決定了命令的顯示結果不同,參數(arugment)是指命令的作用對象。

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

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好像是個好選項,如下圖:

man-k

結合後面學習的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有一個共同特點就是基於“搜索”解決了學習方法問題,這些命令學好用熟後可以舉一反三,大家重點學習,掌握了他們,其他命令就可以自學了。特別是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系統架構

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章