linux命令學習筆記,linux學習筆記

來源:互聯網
上載者:User

linux命令學習筆記,linux學習筆記

操作檔案和目錄:
copy:

$ cp file1 file2$ cp -r dir1 dir2

move:

$ mv file ..$ mv file dir/

rename:

$ mv file1 file2$ mv dir1 dir2 # dir2如果存在,則為移動操作

remove:

$ rm file$ rm -r dir

建立檔案:

$ touch a.txt$ >a.txt

建立目錄:

$ mkdir dir

查看檔案:

#一般$ cat file#查看檔案類型:$ file a.txt#建立和查看隱藏的檔案/檔案夾:$ touch .a.txt  或者 mkdir .dir$ ls -a#分頁查看檔案:$ less file#ctrl ++:縮小  ctrl --:放大  j:向下滾屏 k:向上滾屏  /:字元尋找 n:尋找下一處 gg:檔案頭 G:檔案尾 q:退出

*萬用字元

$ rm *.html #刪除所有的html檔案$ echo a* # 看所有以a開頭的檔案

打包和壓縮:

#zip檔案$ zip -r name.zip dir$ unzip name.zip#.tar.gz檔案$ tar zxvf name.tar.gz$ tar zcvf name.tar.gz dir#.tar.bz2檔案$ tar jxvf name.tar.bz2$ tar jcvf name.tar.bz2 dir

重新導向:
三個重要檔案:
linux下所有的東西都是檔案
檔案描述符: 0 標準輸入檔案 1 標準輸出檔案 3 標準錯誤輸出檔案
重新導向的方式:
輸出重新導向符:> 每次重新導向之前都會把檔案清空 >> 追加內容到一個檔案中
輸出錯誤重新導向符: 2>
輸入重新導向符:<
管道線:linux命令列的基石
管道線命令符:| 把符號前面的結果傳給符號後面的命令作為其輸入

使用者和許可權:
預設只有在自己的主目錄/home/usrname/下有寫入權限 其他的地方沒有寫入權限(ctrl + a可以直接到命令的行首)
三種基本許可權:
讀:r 寫:w 執行:x
多使用者模式: owner group world
檔案模式:

$ ls -l a.txt #對檔案查看許可權資訊$ ls -ld dir #對目錄查看許可權資訊

對一個目錄有寫入權限,意味著可以對裡面的檔案進行建立刪除重新命名等操作,但是對一個檔案有用寫入權限並不擁有這些操作許可權
對一個目錄有執行許可權,意味著可以cd進這個目錄,目錄在建立時 一般都有執行許可權
chmod命令:
對三種使用者模式下每一種檔案許可權都可以用1代表有改許可權,0代表沒有該許可權

$ chmod 111110110 a.txt # owner有rwx group和world只有rw許可權

進程:
擷取進程號:
PID就表示進程號
linux下粗略的可以認為,使用者每次執行一個新的程式,系統都會開啟一個新的進程
ps命令:作用是報告系統上當前的進程狀況
ps aux |less 查看所有的進程的進程號 $ ps aux |grep vim 尋找vim的進程號
Alt + Tab可以在各個開啟的程式直接切換
後台執行:
在後面加&符號,可以讓程式在後台執行
如果已經開啟程式了,補救的辦法就是先用ctrl+z讓程式暫停,回到命令列,然後輸入bg命令,這樣和加&一樣。然後敲fg又回到前台,crtl + c關閉
kill:

$ kill pid號   # 程式在正常啟動並執行時候有用,相當於加了 -2$ kill -9 pid  # 當程式跑飛了,強制終止

如果程式運行卡死了命令列介面,怎麼辦:
linux同時運行著7個工作台的,敲crtl + alt + F1到第一個工作台在這裡輸入命令殺死那個進程,然後敲crtl + alt + F7回到原來的工作台

尋找:
locate:在系統全域範圍內定位檔案
locate不是在整個File system中定位檔案,而是從一個database中定位檔案,這也是locate執行很快的原因。
還有一個updatedb命令,負責將File system中的檔案更新到database中,但是updatedb一般是每天執行一次。導致locate 不可能找到新建立的那些檔案。
補救辦法:$ sudo updatedb 然後再 locate
find:在目錄範圍內定位檔案

$ find dir #列出目錄下的所有檔案$ find dir  -type f # 只看目錄下的所有檔案$ find dir  -type d # 只看目錄下的所有目錄$ find dir -type f -exec xxx '{}' ';'  # xxx可以是各種系統命令,對找到的檔案進行操作$ find dir -type f -exec grep hello '{}' ';'  -print # 在找到的所有檔案中尋找hello字串,並且列印所在的檔案的檔案名稱

grep:

$ grep hello #尋找hello字串$ grep -n hello #並且顯示出行號$ grep -ni hello #顯示出行號,並忽略大小寫

ack grep:專門為程式員在代碼中尋找的命令
將一個二進位檔案移動到~/bin下,在整個系統中就能使用該命令了: $ rm xxx ~/bin
如果一個命令太長,可以到~/bin目錄下 $ ln -s xxx y 就可以給xxx取一個別名y 以後用y就相當與用xxx

網路操作:
遠程操作:
自己電腦上的程式要放到伺服器上,可以花10$每個月買一台VPS伺服器,在伺服器上裝上ubuntu server系統。
ssh:可以認為是互連網上兩台機器互聯的一種協議,需要伺服器端開22連接埠,就如http協議需要開80連接埠。除了開22連接埠,還需要伺服器端和用戶端裝相應的ssh軟體。
ubuntu desktop版和ubuntu server版這兩個都預設是裝好的。
買伺服器的時候,會給一個ip,可以給這個ip綁定一個網域名稱。
在desktop上可以這樣串連伺服器:$ ssh 伺服器上的使用者名稱@網域名稱或者ip 輸入密碼以後就可以在伺服器上操作了。
ctrl+d可以退出伺服器。
每次輸入密碼比較煩,可以在本地上輸入$ ssh-keygen 然後在.ssh下可以得到公開金鑰(id_rsa.pub)和私密金鑰(id_rsa)。仍然在.ssh下運行 $ ssh-copy-id 伺服器上的使用者名稱@網域名稱或者ip。以後就不要在輸入密碼了。
tmux是一個很好的遠程操作防止斷網和誤操作中斷通訊,資料沒有儲存的軟體。
資料轉送:
rsync: 本地和遠端同步資料用的。如果ssh能用,rsync就能用。
上傳使用:

$ rsync -r 本地目錄 伺服器上的使用者名稱@網域名稱或者ip:伺服器上路徑

就可以把本地的目錄上傳到伺服器路徑下。注意本地目錄後面不能有/
下載只需要交換上面兩個參數的位置即可
如何同步本地增加的檔案:

$ rsync -av mydir/ 伺服器上的使用者名稱@網域名稱或者ip:伺服器上路徑/mydir/

這裡v參數是為了顯示執行過程 a參數是為了保留更加完整的檔案資訊
如何同步本地既有增加又有刪除的檔案:

$  rsync -av --delete mydir/ 伺服器上的使用者名稱@網域名稱或者ip:伺服器上路徑/mydir/

為了防止誤刪除一些檔案,可以先執行:

$  rsync -av --delete mydir/ 伺服器上的使用者名稱@網域名稱或者ip:伺服器上路徑/mydir/  --dry-run

先只報告資訊,再執行真正的同步操作。

軟體安裝:
手動安裝:
下載編譯好後的代碼解壓縮:
得到的目錄放在一個不礙事的地方,最好放在一個隱藏目錄下

echo $PATH #可以查看環境變數PATH,它的值是一系列由:隔開的目錄。

只需要把可執行檔放在PATH下的任何一個目錄中,就可以成為一個系統可執行檔命令了。
也可以不移動可執行程式本身,而是建立一個連結:$ ln -s 本來的可執行程式目標位置以及名字
自己下載源碼編譯安裝:
解壓縮並切換到源碼目錄

./configuremakesudo make install

deb包:debian package
手動安裝的問題:安裝依賴 會給安裝過程帶來不便;安裝的軟體多的時候會忘記都在哪些位置安裝了檔案,卸載軟體就成了一場噩夢
deb包 = 程式本身+設定檔+安裝位置+依賴關係
HAPPYCASTS第十四期講解如何將一個程式從源碼打成一個deb包
安裝一個程式的deb包:$ sudo dpkg -i deb包

$ dpkg -l |grep chrome #可以查看所有安裝過的chrome deb包$ dpkg -L 包名 #看包安裝了哪些檔案$ dpkg -S 檔案名稱 #看一個檔案來自那個包

從apt-get倉庫安裝:
apt-get中底層包裹了dpkg
開源軟體一般是以源碼包的形式放在github或者自由軟體基金會上的,ubuntu公司會定期將這些源碼包打造成deb包,並在ubuntu自己伺服器上搭建一個軟體倉庫apt repo,再把deb包上傳到軟體倉庫中。
在ubuntu下安裝軟體非常方便,$ apt-get install 軟體名 就可以安裝好了
卸載軟體:$ sudo apt-get remove 軟體名
連設定檔一起刪除:$ sudo apt-get purge 軟體名
不知道精確的包名的時候,可以用: $ apt-cache search 貌似的軟體名|less
apt-get 也會自動幫安裝上依賴檔案

指令碼編程技巧:
指定解析器:
一般用bash作為解析器,所以在第一行要加上: #!/usr/bin/env bash 指明用bash解析下面的語句
但是不僅bash可以解析,python ruby等等都可以解析指令碼 #!/usr/bin/env python 指明用python解析
語句即命令:
在命令列中的命令,放在指令碼中就稱為一個語句
命令在指令碼中可以直接羅列,也可以包裹到一個函數中,通過呼叫函數名來執行命令:
say_hello(){ echo "hello" } 然後調用say_hello調用echo “hello”命令
命令對空格敏感,所以指令碼語句對空格異常敏感
位置參數:
指令碼啟動並執行時候也可以輸入參數,在指令碼中接受參數用$符號 $#表示參數的個數 $0 指令檔名\ $1–\$n 使用者提供的參數
指令碼不在當前的shell執行:
指令碼不是在當前的shell裡執行的,而是新開了一個shell並在裡面執行指令碼的。
非要在當前shell中執行指令碼,用source xx.sh
迴圈控制:

cd $1for file in `ls`do   ****命令done

指令碼中導引好可以取出命令的輸出 pwd
遠程執行:
指令碼中寫:

$ ssh -t 遠端使用者名@ip或者網域名稱  '要執行的指令碼或者命令'

確認執行:

echo -n "Want to continue? (Y/n)"read AAAif ["${AAA:-y}" = "y"];then     #調用函數else    echo Nothing done, bye.fi

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.