Linux常用命令詳解,linux命令詳解
自助命令:ls --help man ls info ls
檔案屬性:ls -al 顯示目前的目錄下檔案/目錄擁有者,所屬組,其他人的寫讀執行許可權 檔案或目錄下屬檔案數 擁有者 群組 內容大小(byte) 最後修改日期 檔案/目錄名 注意:對於目錄,如何沒有x許可權,則進不去目錄 【顯示別的目錄下的檔案:ls -al /,表示顯示根目錄下的檔案 】
改變組許可權:chgrp eg>chgrp users -R test.txt 【-R表示遞迴持續更新,users組應在/etc/group裡存在】
改變擁有者:chown eg>chown [-R] 帳號名[:組名] 檔案或目錄 【帳號名在/etc/passwd裡,cp複製命令會將檔案或目錄的屬性許可權一起複製,這時就需要更改許可權】
改變檔案許可權:chmod eg>chmod [-R] 777 檔案或目錄,或者chmod u=rwx,go=rx 檔案或目錄,或者chmod a+w【rwx分別對應數字421,a+w表示對所有人提供讀許可權】
建立目錄:mkdir 【-p建立多層目錄,-m修改目錄屬性eg:mkdir -m 755 test】
建立空白檔案:touch【建立隱藏檔案,在檔案名稱前加.】【修改檔案日期eg touch -d "2 days ago" 檔案名稱。或者touch -t 201706091111 檔案名稱】
刪除檔案: rm 【如果檔案名稱前有-,則刪除應該用rm ./test】
刪除目錄:rmdir [-p] 【刪除空目錄,要刪除有內容的目錄:rm -r】
移動檔案:mv 【常作更名】
複製檔案或目錄:cp 【-s 複製為捷徑,-p 常做備份複製屬性,而非預設屬性,-a 複製所有屬性,-u 當兩檔案不同時才複製】
目前的目錄:. 或者./ 【在執行shell指令碼時,通常用./run.sh 其實是指定該目錄下的run檔案】
上一層目錄:.. 或者../
前一個工作目錄:-
目前使用者的家目錄:~ 【~root,表示該帳號的家目錄】
顯示目前的目錄:pwd 【對於連結檔案,採用pwd -P,可以定位實際目錄結構】
得到路徑的檔案名稱:basename 檔案路徑
得到路徑的目錄名:dirname 目錄路徑
查看檔案內容:
cat:從第一行開始顯示 -n顯示行號包括空白行,-b 顯示不包括空白行行號
tac:從最後一行開始顯示
nl:顯示時輸出行號,不顯示空白行行號,-b可以顯示空白行行號,【nl可以對行號進行設計eg:nl -b a -n rz -w 3 test,行號顯示為001,002...】
more:一頁一頁顯示 空格鍵下翻一頁,enter鍵下翻一行,/要搜尋的字串,q退出顯示,b往上翻頁,:f顯示檔案名稱及顯示的行數
less:一頁一頁顯示並可往前翻頁 pageup上翻頁,pagedown下翻頁,空格鍵下翻頁,/字串 向下尋找,?字串 向上尋找,n尋找下一個,N反向尋找下一個,g到第一行,G到最後一行,q退出less
head:只看頭幾行 -n接數字,表示顯示幾行
tail:只看末尾幾行 常用在查看不斷更新的日誌,-n接數字,表示顯示幾行,-f持續顯示,按Ctrl+c停止
od:以二進位形式讀取 讀取資料格式的檔案或二進位檔案,-t後面接資料類型【a 預設字元輸出,c 用ASCII輸出,d 十進位,o 八進位,x 十六進位,f 浮點數】
eg顯示test檔案的第11行到20行
head -n 20 test | tail -n 10 【|管線:前面的輸出要經過後面的命令才顯示】 eg echo pwd | od -t oCc,將pwd以八進位的ASCII碼輸出
檔案種類:
-:普通檔案:通過cat讀取檔案,但資料格式檔案(如一些登入記錄檔),應該用last去讀
d:目錄
l:快速鍵
裝置與裝置檔案
b:區塊裝置(如硬碟)
c:字元裝置(如鍵盤滑鼠)
s:資料介面檔案
p:資料輸送檔案
副檔名:
.sh shell指令碼語言
.Z,.tar,.tar.gz,.zip,.tgz 壓縮檔
檔案與目錄的預設許可權:
umask:查看目前使用者建立檔案或目錄時許可權,如0022 對應為u=rwx g=rx o-rx 【nmask -S將得到這種結果】,對於建立檔案對應的預設許可權為 -rw-r--r--【檔案預設拿掉x許可權,然後目前使用者查到的預設許可權為022,即組和其他人拿掉為2的讀許可權】,對於建立目錄,對應的預設許可權是drwxr-xr-x【目錄預設有x許可權,同樣拿掉了為2的讀許可權】
檔案或目錄的隱藏屬性:
chattr: +/-a +/-i 【+i可以讓一個檔案不被更改,只能root使用者能設定,+a讓檔案只能增加內容,不能更改原有內容】
lsattr:顯示檔案或目錄的隱藏屬性
查看檔案類型:file 檔案名稱
指令和檔案搜尋命令:
which:搜尋命令位置
whereis:找特定目錄下的檔案,-l 列出可以尋找的目錄,-b找二進位檔案
locate:利用Linux內建資料庫尋找 -i:忽略大小寫,-c輸出找到檔案數量,-l輸出幾行,如-l 5,-r接Regex【locate尋找的為/var/lib/mlocate】
find:直接搜尋硬碟【很慢】,可以用*萬用字元,find [路徑] [操作] [狀態] eg find / -mtime 0 【找當天內更改過的檔案】 find / -mtime +1 【找大於等於一天前的更改過的檔案】 find / -mtime -1【找小於等於1天前的更改過的檔案】,find /home -user 使用者名稱 【找某個路徑下某位使用者的檔案】find -size [+/-] 大小【找符合大小的檔案】,find -name analysisTeleInfo -exec ls -l {} \;【加了額外動作的find,find -name analysisTeleInfo會輸出該檔案所在的路徑,然後exec 以ls -l(不支援別名)執行該路徑】
eg:有兩位開發人員,在不同的群組,現在要一起開發一個項目,要求該項目內的人員都有開發權,但其他人不能進入查閱
首先新增群組:groupadd project
將這兩位開發人員加入該群組:useradd -G project name1 useradd -G project name2
建立項目的開發環境:mkdir /svn/ahome
更改該環境所在的群組:chgrp project /svn/ahome
更改所在環境的許可權:chmod 770 /svn/ahome 【錯誤:因為即使這樣分配許可權,當name1進入工作目錄,建立的檔案是以自己所在組的,不是項目所在組,顧,許可權應該為2770,即給予工作目錄SGID許可權,這樣,name1和name2建立的檔案都是以所在工作群組為組名的,具有共同開發的許可權。補充SUID,表示該檔案在被另一個擁有執行權但不能訪問的人在訪問時,可以暫時擁有該檔案擁有者的許可權】
linux檔案系統類型:EXT2,是一種索引式檔案系統,window現在基本為NTFS
linux壓縮命令:
*.Z compress程式壓縮
*.zip zip程式壓縮
*.gz gzip程式壓縮(常用)
壓縮後源檔案會被刪除,如果原檔案是文字檔,可用zcat/zmore/zless讀取,解壓縮:gzip -d *.gz,搜尋壓縮檔中的關鍵字字串:zgrep -n 'String' *.gz,-c 輸出壓縮資料到螢幕
*.bz2 bzip2程式壓縮(常用,是gzip的升級,-k 保留源檔案)
*.xz xz程式壓縮(常用,-k 保留源檔案),可以查看壓縮檔壓縮前後的容量,
*.tar tar程式打包,並沒有壓縮(常用)
壓縮:tar -jpcv -f filename.tar.bz2 檔案/目錄
查詢:tar -jtv -f filename.tar.bz2
解壓縮:tar -jxv -f filename.tar.bz2 [-C 解壓縮目錄]
*.tar.gz tar程式打包,經過gzip壓縮
*.tar.bz2 tar程式打包,經過bzip2壓縮
*.tar.xz tar程式打包,經過xz壓縮
eg:備份某時間後更新的資料
tar -jcv -f ./filename.tar.bz2 . --newer-mtime='2017/06/13' . 表示打包並壓縮目前的目錄下20170613000000時間後更改的檔案成filename.tar.bz2檔案
備份時不希望備份某個檔案或目錄,用--exclude=目錄(可用萬用字元*)
備份工具:dd if='input_file' of='output_file' bs='block_size' count='number',eg:dd if=/test of=/test2.back
備份工具:cpio -ovcB > file/device 備份
cpio -ivcdu < file/device 還原
cpio -ivct < file/device 查看
vi 編輯器:
使用vi建立或開啟一個檔案:vi filename 【有可能vi要帶上絕對路徑,如user/vi filename】
進入編輯模式:按i /o /a等
退出編輯:esc
儲存檔案:wq 【強制儲存:wq!】,不儲存:q
vi開啟檔案常用操作:hjkl分別代表上下左右鍵,也可以用方向鍵,配合數字,可以一次移動多行或多列游標eg 3+k往左移三位,PgDn下移一頁,PgUp上移一頁,0/home移動到該列的第一列,$/end移動到最後一列,gg移動到檔案第一行,G移動到檔案最後一行,/字串 向下尋找字串,?字串 向上尋找字串,帶上n表示一直尋找,N反向尋找,:1,$s/字串1/字串2/g 全文替換字串1為字串2,:1,$s/字串1/字串2/gc 全文詢問替換,:n1,n2s/字串1/字串2/g 替換你行到n2行之間的字串,X 刪除游標前的字元, x刪除游標後的字元,nx 連續刪除多個字元,dd刪除整行,ndd游標往下刪n行,yy複製游標所在行,nyy複製游標往下多行,p將複製的資料在游標下一行粘貼,P在上一行粘貼,u 重複前一個動作,Ctrl+r 重做前一個動作,. 重複前一個動作
vi進入編輯常用操作:i /I定位在當前游標處/該行口頭,r/R 進入替換模式,r替換游標處字元一次,R替換多次
vi編輯完離開常用操作::w寫入檔案,:q離開(有更改時,離不開),:q!強制離開,:wq存完離開,ZZ未改動直接離開,改動儲存離開,:w filename 另存新檔filename,:r filename 將filename裡的資料追加到游標後面,:n1,n2 w filename 將n1行到n2行儲存到filename,:set nu 顯示行號,:set nonu 取消行號
查看當前vi是否是vim:alias 會出現alias vi=‘vim’, 【命令別名:alias,取消別名 unalias】
vi單個選擇和區塊選擇:用vi開啟檔案後,v字元選擇,V行選擇,ctrl+v區塊選擇,可以結合上下左右完成選擇,y複製選擇,p粘貼選擇,d刪除選擇
vi多檔案編輯:vi test.txt test2.txt 同時開啟多個檔案,將test.txt中複製4行(4yy),然後:n,斷行符號,編輯test2.txt,p粘貼,:file查看當前vi開啟的檔案,:n編輯下一個檔案,:N編輯上一個檔案
vi多視窗查看:gg到檔案第一行,然後:sp,G到檔案最後一行,此時的檔案會顯示上下兩個視窗,上面是檔案末尾資料,下面是檔案開頭資料,:sp filename 表示當前視窗加一個filename視窗,Ctrl+w+↑進入上一個視窗
vi自動補全功能:ctrl+x + ctrl+n 選取當前檔案中的字串作為提示資訊
ctrl+x + ctrl+f 以當前檔案名稱為提示資訊
ctrl+x + ctrl+o 以該檔案的副檔名的文法作提示資訊 如html.html檔案,style=“b” 按ctrl+x + ctrl+o會出現很多提示資訊
vi中環境設定:可以建立 ~/.vimrc環境設定檔案,set backspace=2 "用退格鍵刪除,set autoindent 自動縮排,set nu 顯示行號,syntax on語法檢查顏色顯示
中文編碼問題:1,linux預設語系,2,檔案編碼,3,啟動的終端介面 要統一
window和linux下斷行符號分行符號的問題:window是 \n\r(換行斷行符號)結束一行,linux是\n結束一行,所以,window轉linux時,斷行符號\r可能會顯示為^M符號,linux轉window時,顯示為一行,需要用dos2nuix 或者nuix2dos轉換下
bash:Bourne Again SHell簡稱bash。
bash shell:1.命令儲存功能,可以上下翻看已輸入的命令
2.安裝bash-completion可在使用tab鍵時進行選項/參數補齊
3.命令別名設定 alias lm='ls -al'
4.前台後台命令設定
5.shell scripts 程式化指令碼
6.萬用字元 eg ls -l /usr/bin/X*
查詢指令是否為bash shell內建指令:type ls 不是, type cd 是
指令換行 /enter
快速編輯指令:ctrl+u 游標處向前刪除整個指令串 ctrl+k向後刪除,ctrl+a游標到指令串開頭,ctrl+e游標到指令串結尾
shell 變數:
變數設定與修改 name=Myname
規定:=兩邊不能有空格,內容中不能有空格【可用“可以存變數”,‘不能存變數,以字元形式顯示’】,變數名不能以數字開頭。
用法:用跳脫字元/表示特殊字元如 $,` ,空格,用反單引號包含內容中的指令 eg name=`ls -l` echo $name,變數內容增加:"$name"直接接新加內容,或者${name}直接接新加內容,將該變數作為環境變數:export name,取消該變數:unset name
eg:個人化工作目錄
將自己常用的工作目錄設為變數work:work="servser/analysis",然後在~/.bashrc檔案中添加個人化:work="servser/analysis" export work ,下次登入系統,可以用 cd $work 直接進入工作目錄
變數的取用echo $name 或者 ${name}
環境變數:nuv 或 export 查看所有環境變數
set 查看所有的環境變數和自訂變數
產生0~9間的隨機數:declare -i number=$RANDOM*10/32768; echo $number
?變數,只與上一個命令有關,上一個命令執行成功,則echo $? 輸出0,否則輸出錯誤碼
locale 查看linux下預設語系,-a 查看linux下支援的語系
變數的讀取與申明:
read 變數 將使用者輸入的內容作為該變數的內容, -p 接提示字元,-t 接等待時間秒數
declare 或 typeset 列出所有的變數和內容
declare -a 變數 定義變數為數群組類型,-i 變數 為整數類型,-x 將變數改為環境變數,-r 設定變數為唯讀,且不能unset,+x為取消環境變數設定,數組設定:var[index]=content
ulimit 限制檔案和程式
ulimit [-SHacdfltu] 配額【單位為k】,-a 查看目前使用者的限制情況
曆史命令:history 列出當前記憶體中所有的命令曆史,接n 查最近n個命令, -c 清除曆史命令,-w 更新記錄檔案
!number 執行第number個指令,!!執行上一個指令,!al 執行以al開頭的最近的指令
linux的開機歡飲介面設定:cat /etc/issue,開機提示資訊:/etc/motd檔案
讀入環境設定檔:source 設定檔名 或者 . 檔案名稱
終端機的環境設定:linux下的文字介面終端機即tty1~tty6
stty:-a 列出所有的setting tty 內容,intr 中斷,quit退出,erase向後刪除,kill刪除指令Ctrl+u,eof 結束輸入,start 重新啟動程式的outputCtrl+q,stop 停止螢幕輸出Ctrl+s,susp給一個定時停止,可以結合按鍵更改這些終端命令。
set:設定終端機輸入輸出環境,set -u 使用未定義的變數時,顯示錯誤訊息
通匹配和特殊符號:
* 0到多個字元
? 一定有一個
[abcd] abcd任一個
[0-9] 0-9之間任意一個
[^abc] 非abc的任一個
# 批註符號
\ 跳脫符號,將特殊字元或通匹符還原成一般字元
| 管線
; 連續指令分割符
~ 使用者家目錄
$ 取變數
& 工作控制符,將指令變成在後台工作
! 邏輯運算中的非
/ 目錄符號
> ,>> 資料流重導向,表示取代,累加
<,<< 資料流重導向,輸入導向
‘ ’ 單引號,不具有變數置換功能
“ ” 雙引號,具有變數置換功能
` ` 反引號,可以執行指令
( ) 中間為shell的開始於結束
{ } 命令區塊
資料流重導向:把應該出現在螢幕上的資料重導向到其他位置
分為:標準輸入 <,<<,標準輸出 >,>>,標準錯誤輸出:2>,2>>
linux 下的記憶體回收站:/dev/null 匯入此檔案的資料將被自動清除
2>&1 或者 &>! 將正確的輸出和錯誤輸出同時導向到一個檔案
資料寫入:eg cat > test
鍵盤寫入123,按ctrl+d結束寫入,然後cat test有剛才輸入的內容
cat > test << "return" 輸入到return時自動結束輸入
eg: 將echo “message” 作為標準錯誤輸出
echo "message" 2>/dev/null 1>&2
強制將緩衝區資料更新到磁碟:sync
命令執行判斷:;,&&,||
; eg sync;shutdown -h now 關機前強制同步資料
命令1 && 命令2 前面正確執行($?=0),後面才執行。
命令1 || 命令2 前面執行正確,2不執行,前面錯誤,執行2