操做系統操做系統爲你完成全部「硬件相關、應用無關」的工做,以給你方便、效率、安全。操做系統的功能我總結爲兩點:管家婆和服務生:html
你們都比較熟悉Windows操做系統,Linux也是一種操做系統。Linux的架構以下圖:node
若是使用GUI,Linux系統和Windows操做系統的使用沒有什麼大的區別,用鼠標能夠解決大部分問題。python
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
:中斷程序運行。登陸Linux後,咱們就能夠在#或$符後面去輸入命令,有的時候命令後面還會跟着選項
(options)或參數
(arguments)。即Linux中命令格式爲:web
command [options] [arguments] //中括號表明是可選的,即有些命令不須要選項也不須要參數
其中選項(option)
是調整命令執行行爲的開關,選項
不一樣決定了命令的顯示結果不一樣,參數(arugment)
是指命令的做用對象。正則表達式
如ls命令,ls
或ls .
是兩條等價的命令,顯示是當前目錄的內容,這裏「.」就是參數,表示當前目錄,這個參數缺省能夠省略。咱們能夠用ls -a .
顯示當前目錄中的全部內容,包括隱藏文件和目錄。其中「-a」 就是選項,改變了顯示的方式,以下圖所示:shell
以上簡要說明了Linux命令以及選項和參數的區別,但具體Linux中哪條命令有哪些選項及參數,以及如何使用,須要咱們靠經驗積累或者查看Linux的幫助文檔了。
不論學習編程仍是Linux命令,掌握幫助文檔的使用都是很重要的,是觸類旁通的重要途徑。
man
是manual的縮寫,咱們能夠經過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
.
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命令做弊是能夠的。:)
和查找相關的核心命令還有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
查查有沒有這個程序。
主動學習是學習方法中很是重要的一點,咱們能夠「問題驅動」,遇到問題用"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命令了:
上面的命令包括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 Linux、The Linux Cookbook和LinuxCommand。
除了這些文檔,當遇到不懂的命令時,也能夠到Explain Shell,讓它給解釋一下。
若是本身沒有Linux環境,結合上面講的搜索命令,能夠去實驗樓學習《Linux 基礎入門(新版)》課程實踐練習。
歡迎關注「rocedu」微信公衆號(手機上長按二維碼)
作中教,作中學,實踐中共同進步!
版權聲明:自由轉載-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0
若是你以爲本文對你有幫助,請點一下左下角的「好文要頂」和「收藏該文」