用.NET Core開發也有一段時間了,可是因爲工做緣由一直都是在Windows系統上進行的開發,一直想學習Linux而後把.NET Core開發的程序跑在Linux上,而後把心得體會記錄一下發布再博客園,奈何拖延症氾濫,因此只寫過一篇《CentOS開發ASP.NET Core入門教程》以後就繼續征戰Windows了!做爲新年Flag之一就是學習Docker,K8S,雖然windows系統也能進行開發,可是畢竟Linux纔是正途,所以這兩天特意學習了一下Linux系統,並整理成這篇學習筆記,但願對.NET Core開發者學習Linux有所幫助。html
做者:依樂祝
原文連接:http://www.javashuo.com/article/p-puoyvhdv-bb.htmllinux
另外若是你是一名.NET Core初學者,能夠看一下個人《.NET Core實戰項目之CMS 第一章 入門篇-開篇及整體規劃 也能夠加入.NET Core實戰項目交流羣637326624跟你們一塊兒交流,共同進步!下面開始正文吧!內容有點長,但願你有耐心看完shell
終端本質上是對應着 Linux 上的 /dev/tty 設備,Linux 的多用戶登錄就是經過不一樣的 /dev/tty 設備完成的,Linux 默認提供了 6 個純命令行界面的 「terminal」(準確的說這裏應該是 6 個 virtual consoles)來讓用戶登陸。在物理機系統上你能夠經過使用[Ctrl]+[Alt]+[F1]~[F6]進行切換。windows
一般在圖形界面中對實際體驗帶來差別的不是不一樣發行版的各類終端模擬器,而是這個 Shell(殼)。有殼就有核,這裏的核就是指 UNIX/Linux 內核,Shell 是指「提供給使用者使用界面」的軟件(命令解析器),相似於 DOS 下的 command(命令行)和後來的 cmd.exe 。普通意義上的 Shell 就是能夠接受用戶輸入命令的程序。它之因此被稱做 Shell 是由於它隱藏了操做系統底層的細節。一樣的 UNIX/Linux 下的圖形用戶界面 GNOME 和 KDE,有時也被叫作「虛擬 shell」或「圖形 shell」。less
1) 重要快捷鍵:
[Tab]
使用Tab鍵來進行命令補全,Tab鍵通常是在字母Q旁邊,這個技巧給你帶來的最大的好處就是當你忘記某個命令的全稱時能夠只輸入它的開頭的一部分,而後按下Tab鍵就能夠獲得提示或者幫助完成:
[Ctrl+c]
想一想你有沒有遇到過這種狀況,當你在 Linux 命令行中無心輸入了一個不知道的命令,或者錯誤地使用了一個命令,致使在終端裏出現了你沒法預料的狀況,好比,屏幕上只有光標在閃爍卻沒法繼續輸入命令,或者不停地輸出一大堆你不想要的結果。你想要當即中止並恢復到你可控的狀態,那該怎麼辦呢?這時候你就可使用Ctrl+c鍵來強行終止當前程序(你能夠放心它並不會使終端退出)。
其餘一些經常使用快捷鍵
按鍵 做用
Ctrl+d 鍵盤輸入結束或退出終端
Ctrl+s 暫停當前程序,暫停後按下任意鍵恢復運行
Ctrl+z 將當前程序放到後臺運行,恢復到前臺爲命令fg
Ctrl+a 將光標移至輸入行頭,至關於Home鍵
Ctrl+e 將光標移至輸入行末,至關於End鍵
Ctrl+k 刪除從光標所在位置到行末
Alt+Backspace 向前刪除一個單詞
Shift+PgUp 將終端顯示向上滾動
Shift+PgDn 將終端顯示向下滾動運維
2) 學會利用歷史輸入命令
很簡單,你可使用鍵盤上的方向上鍵↑,恢復你以前輸入過的命令,你一試便知。編輯器
3) 學會使用通配符
通配符是一種特殊語句,主要有星號(*)和問號(?),用來對字符串進行模糊匹配(好比文件名、參數名)。當查找文件夾時,可使用它來代替一個或多個真正字符;當不知道真正字符或者懶得輸入完整名字時,經常使用通配符代替一個或多個真正字符。
先使用 touch 命令建立 2 個文件,後綴都爲 txt:工具
$ touch adsfasd.txt wergjlkas.txt
$ ls *.txt
在建立文件的時候,若是須要一次性建立多個文件,好比:「love_1_linux.txt,love_2_linux.txt,... love_10_linux.txt」。在 Linux 中十分方便:
$ touch love_{1..10}_linux.txt
Shell 經常使用通配符:
字符 含義學習
請打開終端,輸入命令:
$ who am i
或者
$ who mom likes
who 命令其它經常使用參數
參數 說明
-a 打印能打印的所有
-d 打印死掉的進程
-m 同am i,mom likes
-q 打印當前登陸用戶數及用戶名
-u 打印當前登陸用戶登陸信息
-r 打印運行等級優化
在 Linux 系統裏, root 帳戶擁有整個系統至高無上的權利,好比 新建/添加 用戶。
su,su- 與 sudo
su
如今咱們新建一個叫 yilezhu 的用戶:
$ sudo adduser yilezhu
這個命令不但能夠添加用戶到系統,同時也會默認爲新用戶建立 home 目錄:
$ ls /home
如今你已經建立好一個用戶,而且你可使用你建立的用戶登陸了,使用以下命令切換登陸用戶:
$ su -l yilezhu
退出當前用戶跟退出終端同樣可使用 exit 命令或者使用快捷鍵 Ctrl+d。
在 Linux 裏面每一個用戶都有一個歸屬(用戶組),用戶組簡單地理解就是一組用戶的集合,它們共享一些資源和權限,同時擁有私有資源,就跟家的形式差很少,你的兄弟姐妹(不一樣的用戶)屬於同一個家(用戶組),大家能夠共同擁有這個家(共享資源),爸媽對待大家都同樣(共享權限),你偶爾寫寫日記,其餘人未經容許不能查看(私有資源和權限)。固然一個用戶是能夠屬於多個用戶組的,正如你既屬於家庭,又屬於學校或公司。
方法一:使用 groups 命令
$ groups yilezhu
能夠查看下 /etc/sudoers.d/yilezhu 文件,咱們在 /etc/sudoers.d 目錄下建立了這個文件,從而給 yilezhu 用戶賦予了 sudo 權限:
$sudo cat /etc/sudoers.d/yilezhu
方法二:查看 /etc/group 文件
$ cat /etc/group | sort
這裏 cat 命令用於讀取指定文件的內容並打印到終端輸出,後面會詳細講它的使用。 | sort 表示將讀取的文本進行一個字典排序再輸出
沒找到,不要緊,你可使用命令過濾掉一些你不想看到的結果:
$ cat /etc/group | grep -E "yilezhu"
/etc/group 的內容包括用戶組(Group)、用戶組口令、GID 及該用戶組所包含的用戶(User),每一個用戶組一條記錄。格式以下:
group_name:password:GID:user_list
你看到上面的 password 字段爲一個 x 並非說密碼就是它,只是表示密碼不可見而已。
將其它用戶加入 sudo 用戶組
默認狀況下新建立的用戶是不具備 root 權限的,也不在 sudo 用戶組,可讓其加入 sudo 用戶組從而獲取 root 權限:
$ su -l yilezhu
$ sudo ls
會提示 lilei 不在 sudoers 文件中,意思就是 lilei 不在 sudo 用戶組中,至於 sudoers 文件(/etc/sudoers)你如今最好不要動它,操做不慎會致使比較麻煩的後果。
使用 usermod 命令能夠爲用戶添加用戶組,一樣使用該命令你必需有 root 權限,你能夠直接使用 root 用戶爲其它用戶添加用戶組,或者用其它已經在 sudo 用戶組的用戶使用 sudo 命令獲取權限來執行該命令。
這裏我用 root 用戶執行 sudo 命令將 yilezhu 添加到 sudo 用戶組,讓它也可使用 sudo 命令得到 root 權限:
$ su root # 此處須要輸入root用戶密碼
$ groups yilezhu
$ sudo usermod -G sudo yilezhu
$ groups yilezhu
而後你再切換回 yilezhu 用戶,如今就可使用 sudo 獲取 root 權限了。
刪除用戶是很簡單的事:
$ sudo userdel -rf yilezhu
adduser 和 useradd 的區別是什麼?
答:useradd 只建立用戶,建立完了用 passwd yilezhu 去設置新用戶的密碼。adduser 會建立用戶,建立目錄,建立密碼(提示你設置),作這一系列的操做。其實 useradd、userdel 這類操做更像是一種命令,執行完了就返回。而 adduser 更像是一種程序,須要你輸入、肯定等一系列操做
使用較長格式列出文件:
$ ls -l
顯示除了 .(當前目錄)和 ..(上一級目錄)以外的全部文件,包括隱藏文件(Linux 下以 . 開頭的文件爲隱藏文件)。
$ ls -A
查看某一個目錄的完整屬性,而不是顯示目錄裏面的文件屬性:
$ ls -dl <目錄名>
顯示全部文件大小,並以普通人類能看懂的方式呈現:
$ ls -AsSh
其中小 s 爲顯示文件大小,大 S 爲按文件大小排序,若須要知道如何按其它方式排序,請使用「man」命令查詢。
假設目前是 yilezhu 用戶登陸,新建一個文件,命名爲 「 huawei 」:
$ touch huawei
如今,換回到 root 用戶身份,使用如下命令變動文件全部者爲 root :
$ cd /home/yilezhu
$ ls huawei
$ sudo chown root huawei
3.3 修改文件權限
若是你有一個本身的文件不想被其餘用戶讀、寫、執行,那麼就須要對文件的權限作修改,這裏有兩種方式:
方式一:二進制數字表示
每一個文件的三組權限(擁有者,所屬用戶組,其餘用戶,記住這個順序是必定的)對應一個 " rwx ",也就是一個 「 7 」 ,因此若是我要將文件「 huawei 」的權限改成只有我本身能夠用那麼就這樣:
爲了演示,我先在文件里加點內容:
$ echo "echo "hello root"" > huawei
而後修改權限:
$ chmod 700 huawei
方式二:加減賦值操做
完成上述相同的效果,你能夠:
$ chmod go-rw huawei
g、o 還有 u 分別表示 group、others 和 user,+ 和 - 分別表示增長和去掉相應的權限。
FHS 定義了兩層規範,第一層是, / 下面的各個目錄應該要放什麼文件數據,例如 /etc 應該放置設置文件,/bin 與 /sbin 則應該放置可執行文件等等。
第二層則是針對 /usr 及 /var 這兩個目錄的子目錄來定義。例如 /var/log 放置系統登陸文件,/usr/share 放置共享數據等等。
sudo apt-get update
sudo apt-get install tree
列出全部文件
$ tree /
路徑
使用 cd 命令能夠切換目錄,在 Linux 裏面使用 . 表示當前目錄,.. 表示上一級目錄(注意,咱們上一節介紹過的,以 . 開頭的文件都是隱藏文件,因此這兩個目錄必然也是隱藏的,你可使用 ls -a 命令查看隱藏文件), - 表示上一次所在目錄,~ 一般表示當前用戶的 home 目錄。使用 pwd 命令能夠獲取當前所在路徑(絕對路徑)。
進入上一級目錄:
$ cd ..
進入你的 home 目錄:
$ cd ~
或者 cd /home/ <你的用戶名>
使用 pwd 獲取當前路徑:
$ pwd
絕對路徑
關於絕對路徑,簡單地說就是以根" / "目錄爲起點的完整路徑,以你所要到的目錄爲終點,表現形式如:
/usr/local/bin,表示根目錄下的 usr 目錄中的 local 目錄中的 bin 目錄。
相對路徑
相對路徑,也就是相對於你當前的目錄的路徑,相對路徑是以當前目錄 . 爲起點,以你所要到的目錄爲終點,表現形式如:
usr/local/bin (這裏假設你當前目錄爲根目錄)。你可能注意到,咱們表示相對路徑實際並無加上表示當前目錄的那個 . ,而是直接以目錄名開頭,由於這個 usr 目錄爲 / 目錄下的子目錄,是能夠省略這個 . 的(之後會講到一個相似不能省略的狀況);若是是當前目錄的上一級目錄,則須要使用 .. ,好比你當前目錄爲 home 目錄,根目錄就應該表示爲 ../../ ,表示上一級目錄( home 目錄)的上一級目錄( / 目錄)。
下面咱們以你的 home目錄爲起點,分別以絕對路徑和相對路徑的方式進入 /usr/local/bin 目錄:
絕對路徑
$ cd /usr/local/bin
相對路徑
$ cd ../../usr/local/bin
提示:在進行目錄切換的過程當中請多使用 Tab 鍵自動補全,可避免輸入錯誤,連續按兩次 Tab 能夠顯示所有候選結果。
新建空白文件
使用 touch 命令建立空白文件,關於 touch 命令,其主要做用是來更改已有文件的時間戳的(好比,最近訪問時間,最近修改時間),但其在不加任何參數的狀況下,只指定一個文件名,則能夠建立一個指定文件名的空白文件(不會覆蓋已有同名文件),固然你也能夠同時指定該文件的時間戳
新建目錄
使用 mkdir(make directories)命令能夠建立一個空目錄,也可同時指定建立目錄的權限屬性。
建立名爲「 mydir 」的空目錄:
$ mkdir mydir
使用 -p 參數,同時建立父目錄(若是不存在該父目錄),以下咱們同時建立一個多級目錄(這在安裝軟件、配置安裝路徑時很是有用):
$ mkdir -p father/son/grandson
複製文件
使用 cp(copy)命令複製一個文件到指定目錄。
將以前建立的「 test 」文件複製到「 /home/root/father/son/grandson 」目錄中:
$ cp test father/son/grandson
複製目錄
若是直接使用 cp 命令複製一個目錄的話,會出現以下錯誤:
要成功複製目錄須要加上 -r 或者 -R 參數,表示遞歸複製,就是說有點「株連九族」的意思:
$ cp -r father family
刪除文件
使用 rm(remove files or directories)命令刪除一個文件:
$ rm test
有時候你會遇到想要刪除一些爲只讀權限的文件,直接使用 rm 刪除會顯示一個提示,以下:
你若是想忽略這提示,直接刪除文件,可使用 -f 參數強制刪除:
$ rm -f test
刪除目錄
跟複製目錄同樣,要刪除一個目錄,也須要加上 -r 或 -R 參數:
$ rm -r family
移動文件
使用 mv(move or rename files)命令移動文件(剪切)。將文件「 file1 」移動到 Documents 目錄:
mv 源目錄文件 目的目錄:
$ mkdir Documents
$ mv file1 Documents
重命名文件
將文件「 file1 」重命名爲「 myfile 」:
mv 舊的文件名 新的文件名:
$ mv file1 myfile
使用 cat,tac 和 nl 命令查看文件
前兩個命令都是用來打印文件內容到標準輸出(終端),其中 cat 爲正序顯示,tac 爲倒序顯示。
好比咱們要查看以前從 /etc 目錄下拷貝來的 passwd 文件:
$ cat passwd
能夠加上 -n 參數顯示行號:
$ cat -n passwd
nl 命令,添加行號並打印,這是個比 cat -n 更專業的行號打印命令。
這裏簡單列舉它的經常使用的幾個參數:
-b : 指定添加行號的方式,主要有兩種:
-b a:表示不管是否爲空行,一樣列出行號("cat -n"就是這種方式)
-b t:只列出非空行的編號並列出(默認爲這種方式)
-n : 設置行號的樣式,主要有三種:
-n ln:在行號字段最左端顯示
-n rn:在行號字段最右邊顯示,且不加 0
-n rz:在行號字段最右邊顯示,且加 0
-w : 行號字段佔用的位數(默認爲 6 位)
使用 more 和 less 命令分頁查看文件
若是說上面的 cat 是用來快速查看一個文件的內容的,那麼這個 more 和 less 就是天生用來"閱讀"一個文件的內容的,好比說 man 手冊內部就是使用的 less 來顯示內容。其中 more 命令比較簡單,只能向一個方向滾動,而 less 爲基於 more 和 vi (一個強大的編輯器,咱們有單獨的課程來讓你學習)開發,功能更強大
使用 head 和 tail 命令查看文件
$ tail /etc/passwd
甚至更直接的只看一行, 加上 -n 參數,後面緊跟行數:
$ tail -n 1 /etc/passwd
前面我提到過,在 Linux 中文件的類型不是根據文件後綴來判斷的,咱們一般使用 file 命令查看文件的類型:
$ file /bin/ls
與搜索相關的命令經常使用的有 whereis,which,find 和 locate 。
whereis 簡單快速
$whereis who
locate 快而全
它能夠用來查找指定目錄下的不一樣文件類型,如查找 /etc 下全部以 sh 開頭的文件:
$ locate /etc/sh
注意,它不僅是在 /etc 目錄下查找,還會自動遞歸子目錄進行查找。
查找 /usr/share/ 下全部 jpg 文件:
$ locate /usr/share/*.jpg
注意要添加 * 號前面的反斜槓轉義,不然會沒法找到。
若是想只統計數目能夠加上 -c 參數,-i 參數能夠忽略大小寫進行查找,whereis 的 -b、-m、-s 一樣可使用。
which 小而精
which 自己是 Shell 內建的一個命令,咱們一般使用 which 來肯定是否安裝了某個指定的軟件,由於它只從 PATH 環境變量指定的路徑中去搜索命令:
$ which man
find 精而細
find 應該是這幾個命令中最強大的了
這條命令表示去 /etc/ 目錄下面 ,搜索名字叫作 interfaces 的文件或者目錄。這是 find 命令最多見的格式,千萬記住 find 的第一個參數是要搜索的地方:
$ sudo find /etc/ -name interfaces
意 find 命令的路徑是做爲第一個參數的, 基本命令格式爲 find [path] [option] [action] 。
與時間相關的命令參數:
參數 說明
-atime 最後訪問時間
-ctime 最後修改文件內容的時間
-mtime 最後修改文件屬性的時間
下面以 -mtime 參數舉例:
-mtime n:n 爲數字,表示爲在 n 天以前的「一天以內」修改過的文件
-mtime +n:列出在 n 天以前(不包含 n 天自己)被修改過的文件
-mtime -n:列出在 n 天以內(包含 n 天自己)被修改過的文件
-newer file:file 爲一個已存在的文件,列出比 file 還要新的文件名
列出 home 目錄中,當天(24 小時以內)有改動的文件:
$ find ~ -mtime 0
列出用戶家目錄下比 Code 文件夾新的文件:
$ find ~ -newer /home/root/Code
文件後綴名 說明
.zip zip 程序打包壓縮的文件
.rar rar 程序壓縮的文件
.7z 7zip 程序壓縮的文件
.tar tar 程序打包,未壓縮的文件
.gz gzip 程序(GNU zip)壓縮的文件
.xz xz 程序壓縮的文件
.bz2 bzip2 程序壓縮的文件
.tar.gz tar 打包,gzip 程序壓縮的文件
.tar.xz tar 打包,xz 程序壓縮的文件
tar.bz2 tar 打包,bzip2 程序壓縮的文件
*.tar.7z tar 打包,7z 程序壓縮的文件
使用 zip 打包文件夾:
$ zip -r -q -o yilezhu.zip /home/root
$ du -h yilezhu.zip
$ file yilezhu.zip
上面命令將目錄 /home/root 打包成一個文件,並查看了打包後文件的大小和類型。第一行命令中,-r 參數表示遞歸打包包含子目錄的所有內容,-q 參數表示爲安靜模式,即不向屏幕輸出信息,-o,表示輸出文件,需在其後緊跟打包輸出文件名。後面使用 du 命令查看打包後文件的大小(後面會具體說明該命令)。
設置壓縮級別爲 9 和 1(9 最大,1 最小),從新打包:
$ zip -r -9 -q -o yilezhu_9.zip /home/root -x ~/.zip
$ zip -r -1 -q -o yilezhu_1.zip /home/root -x ~/.zip
這裏添加了一個參數用於設置壓縮級別 -[1-9],1 表示最快壓縮但體積大,9 表示體積最小但耗時最久。最後那個 -x 是爲了排除咱們上一次建立的 zip 文件,不然又會被打包進這一次的壓縮文件中,注意:這裏只能使用絕對路徑,不然不起做用。
咱們再用 du 命令分別查看默認壓縮級別、最低、最高壓縮級別及未壓縮的文件的大小:
$ du -h -d 0 *.zip ~ | sort
經過 man 手冊可知:
h, --human-readable(顧名思義,你能夠試試不加的狀況)
d, --max-depth(所查看文件的深度)
將 yilezhu.zip 解壓到當前目錄:
$ unzip yilezhu.zip
使用安靜模式,將文件解壓到指定目錄:
$ unzip -q yilezhu.zip -d ziptest
上述指定目錄不存在,將會自動建立。若是你不想解壓只想查看壓縮包的內容你可使用 -l 參數:
$ unzip -l yilezhu.zip
使用 -O(英文字母,大寫 o)參數指定編碼類型:
unzip -O GBK 中文壓縮文件.zip(解決中文編碼問題)
rar 也是 Windows 上經常使用的一種壓縮文件格式,在 Linux 上可使用 rar 和 unrar 工具分別建立和解壓 rar 壓縮包。
安裝 rar 和 unrar 工具:
$ sudo apt-get update
$ sudo apt-get install rar unrar
從指定文件或目錄建立壓縮包或添加文件到壓縮包:
$ rm *.zip
$ rar a yilezhu.rar .
上面的命令使用 a 參數添加一個目錄 ~ 到一個歸檔文件中,若是該文件不存在就會自動建立。
注意:rar 的命令參數沒有 -,若是加上會報錯。
從指定壓縮包文件中刪除某個文件:
$ rar d yilezhu.rar .zshrc
查看不解壓文件:
$ rar l yilezhu.rar
使用 unrar 解壓 rar 文件
全路徑解壓:
$ unrar x yilezhu.rar
去掉路徑解壓:
$ mkdir tmp
$ unrar e yilezhu.rar tmp/
在 Linux 上面更經常使用的是 tar 工具,tar 本來只是一個打包工具,只是同時仍是實現了對 7z、gzip、xz、bzip2 等工具的支持,這些壓縮工具自己只能實現對文件或目錄(單獨壓縮目錄中的文件)的壓縮,沒有實現對文件的打包壓縮,因此咱們也無需再單獨去學習其餘幾個工具,tar 的解壓和壓縮都是同一個命令,只需參數不一樣,使用比較方便。
下面先掌握 tar 命令一些基本的使用方式,即不進行壓縮只是進行打包(建立歸檔文件)和解包的操做。
建立一個 tar 包:
$ tar -cf yilezhu.tar ~
上面命令中,-c 表示建立一個 tar 包文件,-f 用於指定建立的文件名,注意文件名必須緊跟在 -f 參數以後,好比不能寫成 tar -fc yilezhu.tar,能夠寫成 tar -f yilezhu.tar -c ~。你還能夠加上 -v 參數以可視的的方式輸出打包的文件。上面會自動去掉表示絕對路徑的 /,你也可使用 -P 保留絕對路徑符。
解包一個文件(-x 參數)到指定路徑的已存在目錄(-C 參數):
$ mkdir tardir
$ tar -xf yilezhu.tar -C tardir
只查看不解包文件 -t 參數:
$ tar -tf yilezhu.tar
保留文件屬性和跟隨連接(符號連接或軟連接),有時候咱們使用 tar 備份文件當你在其餘主機還原時但願保留文件的屬性(-p 參數)和備份連接指向的源文件而不是連接自己(-h 參數):
$ tar -cphf etc.tar /etc
對於建立不一樣的壓縮格式的文件,對於 tar 來講是至關簡單的,須要的只是換一個參數,這裏咱們就以使用 gzip 工具建立 *.tar.gz 文件爲例來講明。
咱們只須要在建立 tar 文件的基礎上添加 -z 參數,使用 gzip 來壓縮文件:
$ tar -czf yilezhu.tar.gz ~
解壓 .tar.gz 文件:
$ tar -xzf yilezhu.tar.gz
如今咱們要使用其它的壓縮工具建立或解壓相應文件只須要更改一個參數便可:
壓縮文件格式 參數
.tar.gz -z
.tar.xz -J
tar.bz2 -j
其實今天總結的內容挺多的,主要是由於對於我這個.NET Core開發者來講Linux是一個全新的領域,因此感受須要記憶的內容太多太多了!而做爲開發者,雖然不須要掌握Linux的核心優化等等內容,可是基本的操做仍是須要掌握的,畢竟公司裏面基本是開發運維的工做一肩挑的,因此,Linux我來了! 後續在.net core程序進行在Linux系統上部署的話可能還須要涉及一些命令,這個後期用到了在進行記錄吧!今天就先到這裏了!感謝你們的閱讀!