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 本來的可執行程序目標位置以及名字
自己下載源碼編譯安裝:
解壓縮並切換到源碼目錄

./configure
make
sudo 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 $1
for file in `ls`
do
   ****命令
done

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

$ ssh -t 遠程用戶名@ip或者域名  '要執行的腳本或者命令'

確認執行:

echo -n "Want to continue? (Y/n)"
read AAA
if ["${AAA:-y}" = "y"];then
     #調用函數
else
    echo Nothing done, bye.
fi
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章