(因爲個人電腦是Mac,Linux安裝省略)html
操做系統的功能:linux
博客中對於這兩個詞含義的解釋爲程序員
- 管家婆:經過進程、虛擬內存和文件三個重要抽象管理計算機的CPU、內存、I/O設備。
- 服務生:爲用戶提供shell,爲程序員提供系統調用。
命令行的好處shell
主要是能夠批處理並自動化,還有些功能GUI沒法完成數據庫
因爲個人電腦操做系統爲MacOS,因此我本身總結出了快捷鍵的使用:瀏覽器
Alt+Ctrl+T
:打開終端(因爲Mac沒有打開終端的快捷鍵,因此我本身設置爲與Ubuntu統一的快捷鍵。Mac如何設置打開終端的快捷鍵 )Command+T
:新建標籤頁Command + { 或 Command + Shift + [
:切換標籤頁Tab
:命令、文件名等自動補全功能。Ctrl+R
:快速檢索使用過的歷史命令Ctrl+C
:中斷終端中正在執行的任務。Linux是什麼?bash
Linux 就是一個操做系統。Linux 主要是系統調用和內核那兩層。固然直觀地看,咱們使用的操做系統還包含一些在其上運行的應用程序,好比文本編輯器、瀏覽器、電子郵件等。less
Shell是什麼?iphone
命令行解釋器。編輯器
Terminal是什麼?
終端模擬器的程序。
Shell的詳細解釋
能夠接受用戶輸入命令的程序。
輸入和輸出
輸入:
touch file
建立一個名爲file的文件
cd /etc/
進入一個目錄
pwd
查看當前所在目錄
輸出:
輸出會返回你想要的結果,好比你要看什麼文件,就會返回文件的內容。若是隻是執行,執行失敗會告訴你哪裏錯了,若是施行成功那麼會沒有輸出,由於linux的哲學就是:沒有結果就是最好的結果
$ tail
,爲何接下來輸入什麼都沒有任何反應?$ find /
,爲何會不停地跳出不少亂七八糟的東西?按鍵 | 做用 |
Ctrl+d |
鍵盤輸入結束或退出終端 |
Ctrl+s |
暫停當前程序,暫停後按下任意鍵恢復運行 |
Ctrl+z |
將當前程序放到後臺運行,恢復到前臺爲命令fg |
Ctrl+a |
將光標移至輸入行頭,至關於Home 鍵 |
Ctrl+e |
將光標移至輸入行末,至關於End 鍵 |
Ctrl+k |
刪除從光標所在位置到行末 |
Alt+Backspace |
向前刪除一個單詞 |
Shift+PgUp |
將終端顯示向上滾動 |
Shift+PgDn |
將終端顯示向下滾動 |
通配符: 指星號(*)和問號(?)
當查找文件夾時,可使用它來代替一個或多個真正字符;當不知道真正字符或者懶得輸入完整名字時,經常使用通配符代替一個或多個真正字符。
Shell經常使用通配符
字符 | 含義 |
* |
匹配 0 或多個字符 |
? |
匹配任意一個字符 |
[list] |
匹配 list 中的任意單一字符 |
[!list] |
匹配 除list 中的任意單一字符之外的字符 |
[c1-c2] |
匹配 c1-c2 中的任意單一字符 如:[0-9] [a-z] |
{string1,string2,...} |
匹配 string1 或 string2 (或更多)其一字符串 |
{c1..c2} |
匹配 c1-c2 中所有字符 如{1..10} |
問題3: ls
的具體用法是什麼?
(在教材中有時寫在一個命令詞之前,有時寫在以後,有些混淆)
解答:經過實驗3的學習,瞭解了ls
的用法:
一、用它列出並顯示當前目錄下的文件
二、查看文件權限。ls -l
:使用較長格式列出文件。ls -A
:顯示除了 .(當前目錄)和 ..(上一級目錄)以外的全部文件,包括隱藏文件(Linux 下以 . 開頭的文件爲隱藏文件)。ls -dl<目錄名>
:查看某一個目錄的完整屬性,而不是顯示目錄裏面的文件屬性.ls -AsSh
:顯示全部文件大小,並以普通人類能看懂的方式呈現。其中小 s 爲顯示文件大小,大 S 爲按文件大小排序。-w
參數指定打印寬度,由於咱們的環境在屏幕中顯示比較小,必需要加上寬度限制。例:$ printerbanner -w 50 A
,"50"是上限寬度限制。
$ who -r
以後,沒有輸出任何內容,並無輸出運行等級?運行等級又是什麼?| sort
表示將讀取的文本進行一個字典排序再輸出關於文件類型,這裏有一句話必須牢記:
Linux裏面一切皆文件
文件中的軟連接文件至關於Windows中的快捷方式。
修改文件權限,每一個文件的三組權限(擁有者,所屬用戶組,其餘用戶,記住這個順序是必定的)
方法一:二進制數字表示
chomd 700 iphone6
中7
指擁有者,即我本身能夠、寫、執行權限,0
和0
指所屬用戶組和其餘用戶無任何權限。
方法二:加減賦值操做
g、o 還有 u 分別表示 group、others 和 user,+ 和 - 分別表示增長和去掉相應的權限。
chmod go-rw iphone6
指所屬用戶組和其餘用戶去掉讀、寫權限。
adduser 和 useradd 的區別是什麼?
答:useradd 只建立用戶,建立完了用 passwd lilei 去設置新用戶的密碼。adduser 會建立用戶,建立目錄,建立密碼(提示你設置),作這一系列的操做。其實 useradd、userdel 這類操做更像是一種命令,執行完了就返回。而 adduser 更像是一種程序,須要你輸入、肯定等一系列操做。
FHS標準
目錄的四種交互做用的形態
路徑
絕對路徑:
以根" / "目錄爲起點的完整路徑,以你所要到的目錄爲終點,表現形式如:
/usr/local/bin
,表示根目錄下的usr
目錄中的local
目錄中的bin
目錄。
相對路徑:以當前目錄.
爲起點,以你所要到的目錄爲終點
usr/local/bin
(這裏假設你當前目錄爲根目錄)。你可能注意到,咱們表示相對路徑實際並無加上表示當前目錄的那個 . ,而是直接以目錄名開頭,由於這個usr
目錄爲/
目錄下的子目錄,是能夠省略這個 . 的(之後會講到一個相似不能省略的狀況);若是是當前目錄的上一級目錄,則須要使用..
,好比你當前目錄爲home
目錄,根目錄就應該表示爲../../
,表示上一級目錄(home
目錄)的上一級目錄( / 目錄)。
新建空白文件使用touch
新建目錄使用mkdir
,若要新建多級目錄則須在mkdir
以後添加-p
複製文件到目錄,使用cp
複製目錄,則須在cp
後加-r
刪除文件使用rm
,但若是刪除一些只讀權限的文件時,會有刪除提示,若想強制刪除,則在rm
以後添加-f
刪除目錄在rm
以後添加-r
-移動文件使用mv 源文件目錄 目的目錄
重命名文件使用mv 舊文件名 新文件名
批量重命名使用rename
查看文件
一、使用cat
快速查看文件
二、使用nl
命令查看文件
-b : 指定添加行號的方式,主要有兩種:
-b a:表示不管是否爲空行,一樣列出行號("cat -n"就是這種方式) -b t:只列出非空行的編號並列出(默認爲這種方式)
-n : 設置行號的樣式,主要有三種:
-n ln:在行號字段最左端顯示 -n rn:在行號字段最右邊顯示,且不加 0 -n rz:在行號字段最右邊顯示,且加 0
-w : 行號字段佔用的位數(默認爲 6 位)
三、使用more
命令分頁查看文件
可使用 Enter 鍵向下滾動一行,使用 Space 鍵向下滾動一屏。
四、使用tail
命令查看文件
- 由於系統新增長一個用戶,會將用戶的信息添加到 `passwd`文件的最後,那麼這時候咱們就可使用 `tail` 命令了。 - 若想只看一行,在`tail`以後加上`-n`再加上數字`1`就是查看一行文件。 - `-f`能夠不停的讀取某個文件的內容,實現動態查看,達到監視的目的。
與Windows不一樣的是,Linux中的文件不是經過看後綴來查看文件類型的,而是利用file
命令。
變量
tmp
:$ declare tmp環境變量
環境變量的做用域比自定義變量的要大。如 Shell 的環境變量做用於自身和它的子進程。
關於哪些變量是環境變量,能夠簡單地理解成在當前進程的子進程有效則爲環境變量,不然不是。
export
命令來體會一下,先在Shell
中設置一個變量 temp=shiyanlou
,而後再新建立一個子 Shell
查看temp
變量的值:添加自定義路徑到PATH
環境變量
以:
做爲分割符;經過"$ PATH=$path:/自定義路徑"
注意:這裏的路徑必須爲絕對路徑
>>
表示將標準輸出以追加的方式重定向到一個文件中,注意前面用到的
>
是以覆蓋的方式重定向到一個文件中
-變量修改
變量設置方式 | 說明 |
\({變量名#匹配字串}| 從頭向後開始匹配,刪除符合匹配字串的最短數據| |\){變量名##匹配字串} | 從頭向後開始匹配,刪除符合匹配字串的最長數據 |
\({變量名%匹配字串} |從尾向前開始匹配,刪除符合匹配字串的最短數據| |\){變量名%%匹配字串} | 從尾向前開始匹配,刪除符合匹配字串的最長數據 |
\({變量名/舊的字串/新的字串} |將符合舊字串的第一個字串替換爲新的字串| |\){變量名//舊的字串/新的字串} | 將符合舊字串的所有字串替換爲新的字串 |
變量刪除:$ unset
如何讓環境變量當即生效?
$ source .zshrc
(zsh的配置文件home目錄下的.zshrc)
搜索文件
whereis
簡單快速
locate
快而全
$ locate /etc/sh
$ locate /usr/share/\*.jpg
.注意要添加*
號前面的反斜槓轉義,不然會沒法找到.-c
參數,-i
參數能夠忽略大小寫進行查找,whereis
的-b
、-m
、-s
一樣可使用。which
小而精
which
來肯定是否安裝了某個指定的軟件,由於它只從PATH
環境變量指定的路徑中去搜索命令$ sudo find /etc/ -name interfaces
: 這條命令表示去/etc/
目錄下面 ,搜索名字叫作interfaces
的文件或者目錄。這是find
命令最多見的格式,千萬記住find
的第一個參數是要搜索的地方.格式
基本命令格式爲 find [path] [option] [action]
使用 zip 打包文件夾:
$ zip -r -q -o shiyanlou.zip /home/shiyanlou
-r
參數表示遞歸打包包含子目錄的所有內容,-q
參數表示爲安靜模式,即不向屏幕輸出信息,-o
,表示輸出文件,需在其後緊跟打包輸出文件名。
設置壓縮級別爲 9 和 1(9 最大,1 最小),從新打包:
$ zip -r -9 -q -o shiyanlou_9.zip /home/shiyanlou -x ~/*.zip
這裏添加了一個參數用於設置壓縮級別 -[1-9],1 表示最快壓縮但體積大,9 表示體積最小但耗時最久。最後那個-x
是爲了排除咱們上一次建立的 zip 文件,不然又會被打包進這一次的壓縮文件中,注意:這裏只能使用絕對路徑,不然不起做用。
在-r
以後加-e
,便達到給zip文件加密的目的。
$ du -h shiyanlou.zip
du
命令查看打包後文件的大小
$ du -h -d 0 *.zip ~ | sort
-h
表示將信息變爲可讀的,-d
表示查看文件深度
$ file shiyanlou.zip
$ unzip shiyanlou.zip
將 shiyanlou.zip 解壓到當前目錄
$ unzip -q shiyanlou.zip -d ziptest
使用安靜模式,將文件解壓到指定目錄
$ unzip -l shiyanlou.zip
不解壓只查看壓縮包的內容可使用-l
參數
unzip -O GBK 中文壓縮文件.zip
使用 -O(英文字母,大寫 o)參數指定編碼類型。經過此命令行來解決不兼容可能出現的中文變爲亂碼的狀況。
$ tar -cf shiyanlou.tar ~
-c
表示建立一個 tar 包文件,-f
用於指定建立的文件名,注意文件名必須緊跟在 -f
參數以後,好比不能寫成tar -fc shiyanlou.tar
,能夠寫成tar -f shiyanlou.tar -c ~
。你還能夠加上-v
參數以可視的的方式輸出打包的文件。上面會自動去掉表示絕對路徑的/
,你也可使用 -P
保留絕對路徑符。
-x
參數)到指定路徑的已存在目錄(-C
參數):$ mkdir tardir
$ tar -xf shiyanlou.tar -C tardir
zip:
打包 :zip something.zip something (目錄請加 -r 參數)
解包:unzip something.zip
指定路徑:-d 參數
tar:
打包:tar -zcvf something.tar something
解包:tar -zxvf something.tar
指定路徑:-C 參數
問題6:
zip打包的時候,文件後跟的目錄必定須要有麼?若是打包跟解包的目錄位置重複了怎麼辦?
解:能夠寫文件的名字也能夠寫目錄的名字;位置重複時,會跳出提示:是否替換以前同名的文件,能夠選擇是或否或重命名。
$ df -h
(-h
增長可讀性,以K,M,G爲單位)
$ du -h
只查看一級目錄
$ du -d -h 0 ~
(-d
表示查看目錄深度)
其餘經常使用參數:
$ du -a
(顯示目錄中全部文件的大小)
$ du -s
(顯示最後加總的值)
簡單的磁盤管理
建立虛擬磁盤
dd
命令從標準輸入讀入用戶輸入到標準輸出或者一個文件:
$ dd of=test bs=10 count=1
或 $ dd if=/dev/stdin of=test bs=10 count=1
(bs
是指定塊的大小;count
是指定塊的數量)
使用dd
命令建立虛擬鏡像文件
從/dev/zero
設備建立一個容量爲 256M 的空文件:
$ dd if=/dev/zero of=virtual.img bs=1M count=256
使用 mkfs 命令格式化磁盤
$ sudo mkfs.ext4 virtual.img
使用 mount 命令掛載磁盤到目錄樹
知識回顧:掛載是指將一個設備掛接到一個已存在的目錄上。咱們要訪問存儲設備中的文件,必須將文件所在的分區掛載到一個已存在的目錄上,而後經過訪問這個目錄來訪問存儲設備。mount [options] [source] [directory]
mount [-o [操做選項]] [-t 文件系統類型] [-w|--rw|--ro] [文件系統源] [掛載點]
使用 fdisk 爲磁盤分區
查看硬盤分區表信息
$ sudo fdisk -l
進入磁盤分區模式
$ sudo fdisk virtual.img
使用 losetup 命令創建鏡像與迴環設備的關聯
$ sudo losetup /dev/loop0 virtual.img
(若是提示設備忙你也可使用其它的迴環設備,"ls /dev/loop*"參看全部迴環設備)
(解除設備關聯)
$ sudo losetup -d /dev/loop0
問題7:找出當前目錄下面佔用最大的前十個文件
$ du -h -a | sort -n -r | head -n 10
sort下的-n
指按照字符串表示的數字值來排序;-r
指按照反序排序;head下的-n
指取出前多少行。
利用type
來判斷命令類型,是內建命令仍是外建命令。
先利用bash
進入bash中(因爲zsh中內置並無help
命令),而help
只能查詢內建命令。
-但也有方法利用help
來查詢外部命令:
ls --help
man
能夠查詢到比help
所查詢出的更詳細的解釋信息,並且man
不管內建命令仍是外部命令均可以查詢。
info
能夠查詢到比man
還要詳細的信息,通常在bash裏面會自帶有。
Example of job definition:
.---------------- minute (0 - 59)
| .------------- hour (0 - 23)
| | .---------- day of month (1 - 31)
| | | .------- month (1 - 12) OR jan,feb,mar,apr ...
| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | | | * * * * * user-name command to be executed
crontab -e
以後,在文檔後添加*/1 * * * * touch /home/shiyanlou/$(date +\%Y\%m\%d\%H\%M\%S)
命令,該任務是每分鐘咱們會在/home/shiyanlou目錄下建立一個以當前的年月日時分秒爲名字的空白文件,但在實驗樓環境中第一個*
加不了是爲何?解答:
添加新任務時,應先按A
進入編輯模式,才能正常添加任務的命令行。結束編輯按Command+C
(個人電腦是Mac,快捷鍵用法有別於別的系統)再按Shift
和:
,輸入wq,退出。
sudo service rsyslog start
sudo cron -f &
crontab的使用
添加計劃任務
crontab -e
一個計劃任務舉例:該任務是每分鐘咱們會在/home/shiyanlou目錄下建立一個以當前的年月日時分秒爲名字的空白文件:
/1 * * * touch /home/shiyanlou/$(date +%Y%m%d%H%M%S)
查看咱們添加了哪些任務
crontab -l
刪除任務
crontab -r
經過如下2種方式來肯定咱們的 cron 是否成功的在後臺啓動:
ps aux | grep cron
or
pgrep cron
查看到執行任務命令以後在日誌中的信息反饋
sudo tail -f /var/log/syslog
想一次執行多條程序,利用;
進行鏈接。
有選擇的執行命令
使用which來查找是否安裝某個命令,若是找到就執行該命令,不然什麼也不作
$ which cowsay>/dev/null && cowsay -f head-in ohch~
&&
實現選擇性執行,若是前面命令執行的結果返回0,則執行下一條命令,不然不執行。||
實現與&&
徹底相反的控制效果。
使用$?
環境變量獲取上一次命令返回結果。
管道
試用
$ ls -al /etc | less
經過管道將前一個命令(ls)的輸出做爲下一個命令(less)的輸入,而後就能夠一行一行地看。
cut 命令,打印每一行的某一字段
打印/etc/passwd文件中以:爲分隔符的第1個字段和第6個字段分別表示用戶名和其家目錄:
$ cut /etc/passwd -d ':' -f 1,6
打印/etc/passwd文件中每一行的前N個字符:
前五個(包含第五個)
$ cut /etc/passwd -c -5
前五個以後的(包含第五個)
$ cut /etc/passwd -c 5-
第五個
$ cut /etc/passwd -c 5
2到5之間的(包含第五個)
$ cut /etc/passwd -c 2-5
grep 命令,在文本中或 stdin 中查找匹配字符串
grep命令的通常形式爲:
grep [命令選項]... 用於匹配的表達式 [文件]...
wc 命令,用於統計並輸出一個文件中行、單詞和字節的數目
行數
$ wc -l /etc/passwd
單詞數
$ wc -w /etc/passwd
字節數
$ wc -c /etc/passwd
字符數
$ wc -m /etc/passwd
最長行字節數
$ wc -L /etc/passwd
sort 排序命令
uniq 去重命令
tr 命令:能夠用來刪除一段文本信息中的某些文字。或者將其進行轉換。
tr [option]...SET1 [SET2]
經常使用選項:
刪除 "hello shiyanlou" 中全部的'o','l','h'
$ echo 'hello shiyanlou' | tr -d 'olh'
將"hello" 中的ll,去重爲一個l
$ echo 'hello' | tr -s 'l'
將輸入文本,所有轉換爲大寫或小寫輸出
$ echo 'input some text here' | tr '[:lower:]' '[:upper:]'
(上面的'[:lower:]' '[:upper:]'你也能夠簡單的寫做'[a-z]' '[A-Z]',固然反過來將大寫變小寫也是能夠的)
col 命令: 能夠將Tab換成對等數量的空格鍵,或反轉這個操做。
使用方式:
col [option]
常規選項:
-x
:將Tab轉換爲空格
-h
:將空格轉換爲Tab(默認選項)
join 命令:這個命令就是用於將兩個文件中包含相同內容的那一行合併在一塊兒。
使用方式:
join [option]... file1 file2
問題9: 在使用join
命令時,當合並兩個比較小的文件時,直接利用基本使用方式就行,而合併例如/etc/passwd
和/etc/group
這種文件時,join
以前爲何要加sudo
?
paste 命令: 與join 命令相似,它是在不對比數據的狀況下,簡單地將多個文件合併一塊兒,以Tab隔開。
使用方式:
paste [option] file...
常規選項:
-d
:指定合併的分隔符,默認爲Tab
-s
:不合併到一行,每一個文件爲一行