每个 Linux 用户都应该知道的命令行技巧
每個 Linux 用戶都應該知道的命令行技巧
【伯樂在線導讀】:有網友在問答網站Quora上提問:“有哪些省時小技巧,是每個Linux用戶都應該知道的?” Joshua Levy 平常就在 Linux 平臺工作,并且他積累了不少實用命令行技巧,他在回復中精選出一部分。對技術用戶來說,這些技巧挺重要或實用,但知道的人并不多。下文略有點長,一般來說,用戶也不需要對全部內容都了解,但為了達到省時方便的目的,Joshua Levy 仍不遺余力做了校對,以保證列出的每一條都值得一讀,前提是你是一位Linux重度用戶。
?
為了獲取文中提到的一個命令的更多信息,先試下“man <命令名稱>”,在一些情況下,為了讓這條命令可以正常執行,你必須安裝相應的包,可以用aptitude 或者 yum。如果失敗了,求助Google。
?【ps】: linux 命令查詢? http://linux.51yip.com/search
基礎篇
?
-
學習基礎的Bash。事實上,讀整個的bash的幫助手冊;很容易理解而且篇幅也不算長。其他一些可選的shell外觀可能更漂亮,但是bash功能很強大而且總是能用(主要學習zsh或者tcsh在很多情況下你會受到限制)。
?
-
學習vim,對于Linux下的隨機編輯,幾乎沒有工具能出其右(即使你大部分的時間里都在使用Emacs或者Eclipse)。
?
-
通過ssh-agent,ssh-add等命令,了解ssh,以及跳過每次登陸時密碼驗證的基礎辦法
?
-
熟悉bash下的工作管理: &,Ctrl-Z,Ctrl-C,jobs,fg,bg,kill, 等等。
?
-
基礎的文件管理:ls 以及 ls -l (特別的,學習”ls -l”中列出的每一列字段的含義),less,head,tail,tail -f,ln,ln -s (學習軟鏈接和硬鏈接的區別),chown,chmod,du(快速了解磁盤總體占用情況),df,mount。
?
-
基礎的網絡管理命令:ip 或者 ifconfig,dig。
?
-
了解正則表達式,以及grep、egrep的不同命令選項,-0,-A,-B 都值得了解一下。
?
-
學習使用apt-get 或者 yum(取決于你的發行包)來找到并安裝你需要的包.
?
日常使用篇
?
-
使用bash時,用Ctrl-R來搜索命令的歷史記錄。
?
-
使用bash時,用Ctrl-W來清除最后一個單詞,使用Ctrl-U來清除整行。可以查看man readline來獲取bash里面默認鍵的綁定設置。內容很多。比如Alt-.(注:點)遍歷之前命令中使用過的參數,Alt-* 擴展了參數的匹配模式。
?
-
回到上次的工作目錄:cd -
?
-
如果你的命令敲到一半時改變了主意,可以用Alt-#來在命令前面增加一個#,使之成為一行注釋(或者使用Ctrl-A回到命令開頭,然后再鍵入#)。你可以之后再通過搜索歷史記錄回來。
?
-
使用xargs(或者parallel)。它非常強大。注意你能控制每一行(-L)執行多少項,也能控制如何并發(- P)。如果你不太確定它會如你所愿的工作,先使用xargs。 再者,-l{} 很有用。例如:
?
find . -name \*.py | xargs grep some_function
cat hosts | xargs -l{} ssh root@{} hostname
?
-
pstree -p 可以很方便的顯示整個進程樹。
?
-
使用pgrep 和pkill 來通過名字來發現進程或者給進程發信號(-f選項會有用)。
?
-
了解你能向進程發送的信號種類。比如,要掛起一個進程,使用kill -STOP [進程ID]。要了解整個列表,請參考man 7 signal。
?
-
如果你想讓一個后臺進程一直運行,使用nohup or disown 。
?
-
通過netstat -lntp 來檢測哪些進程在監聽。同樣可以用lsof。
?
-
bash腳本中,使用set -x 來調試輸出。使用set -e在有錯誤時終止時終止執行。要想嚴格輸出錯誤,可以考慮使用set -o pipefail(雖然這個主題說起來有些復雜)。對于更復雜的腳本,也可以使用trap。
?
-
bash腳本中,子shell(通過寫在括號里)是一種組織命令的方便的方法。一個很常見的例子是暫時移動到另外一個工作目錄,例如:
?
#在當前目錄下做一些事情
(cd /一些/另外的/目錄;執行別的操作)
#繼續在原來的目錄下執行
?
-
要注意bash中有很多種變量表達式。檢查一個變量是否存在:${name:?錯誤信息}。例如:如果一個bash腳本需要一個單變量,只需要寫input_file=${1:?usage: $0 inpute_file}。數值擴展:i=$({(i+1)%5})。序列:{1..10}。字符串的整理:${var%suffix} 和${var#prefix}。例如:
?
if var==foo.pdf, then echo ${var%.pdf}.txt
#會打印"foo.txt"。
?
-
通過 <(其他指令),一條命令的輸出可以被當作是一個文件的內容來對待。 例如,比較本地和遠程的 /etc/hosts 文件,可以用diff /etc/hosts <(ssh [遠程主機] cat /etc/hosts)。
?
-
了解bash中的“here documents”,比如 cat <<EOF …
?
-
bash中,通過 其他指令 > 日志文件 2>&1 把標準輸出以及標準錯誤重定向。常見的情況是,為了保證一條指令沒有為標準輸入留下一個打開的文件描述符,從而輸出至你當前所在的終端,增加“</dev/null” 也是好的習慣。
?
-
用man ascii可以得到一個完整的ASCII表,有對應的16進制和10進制的值。
?
-
通過ssh連接遠程終端時,使用screen或者dtach 來保持你的session,防止被打斷。在ssh中,了解如何使用-L或者-D選項(有時也會用到-R)會很有用處,比如,如果通過從一個遠程的服務器訪問一個網頁。
?
-
優化你的SSH選項也可能管用。比如,下面的.ssh/config 內容在一些網絡環境下可以防止連接掉線,當連接到新主機時不需要再次確認,跳轉驗證,并且還使用了壓縮(對在一些低寬帶的連接環境下使用scp時會有幫助)。
?
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
StrictHostKeyChecking=no
Compression=yes
ForwardAgent=yes
?
數據處理篇
?
-
把HTML轉成文本:lynx -dump 標準輸入
?
-
如果要處理XML,xmlstarlet會很棒。
?
-
對于Amazon S3,s3cmd 很方便(雖然還不太成熟,可能會有一些不太好的特性)。
-
了解sort 以及 uniq(包括uniq的 -u 以及 -d 選項)。
?
-
了解cut,paste,join 來操作文本文件。許多人使用cut但卻忘了還有join。
?
-
當你要在文件之間做集合的加,減,以及差運算時,用sort/uniq是非常方便的。假如a和b是兩個已經去重的文本文件,那么運算起來會很快,而且可以在任意大小的文件之間執行操作,甚至可以到GB字節大小。(sort不受內存限制,不過如果/tmp 在一個很小的root分區的話,你可能需要使用-T選項)
?
cat a b | sort | uniq > c
# c is a union b
cat a b | sort | uniq -d > c
# c is a intersect b
cat a b b | sort | uniq -u > c
# c is set difference a - b
?
-
了解本地化會影響到許多命令行的工作,包括排序的順序和性能。多數的linux安裝包會把LANG或者其他一些本地化的變量設置為類似美國英語的一個本地設置。這會讓sort和其他一些命令運行起來慢很多。(注意即使你使用UTF-8編碼的文本,你仍然可以放心的通過ASCII碼的順序來排序,這一點用處很多)為避免i18n拖慢日常的工作,使用傳統的基于字節的排序順序,使用export LC_ALL=C(實際上,考慮在你的.bashrc里加進去)。
?
-
了解基本的AWK和sed命令來做簡單的數據處理。例如:對一個文本文件的第三列的數字求和:awk ‘{x += $3} END {print x}’。 這大概比同等的python速度要快三倍并且代碼長度也會簡短3倍。
?
-
就地替換一個字符串在所有文件里所有出現的地方。
?
perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
?
-
使用shuf來隨機打亂一個文件中的行或者選擇一個隨機的行。
?
-
了解sort的各個選項。知道鍵值是如何工作的。特別是,當你要使用 -k1時,要格外注意:1只對第一個字段排序,-k1則意味著根據整個行排序。
?
-
穩定排序(sort -s)可能會有用。例如,先根據第二個字段排序,再根據第一個字段排序時,你可以使用sort -k1,1 | sort -s -k2,2
?
-
如果你需要在bash里的命令行里寫入一個tab鍵的字面值的話,按Ctrl+V, <tab> 或者$‘\t’ (后者更好,因為你可以復制、粘貼)。
?
-
對于二進制文件,使用hd來進行簡單的導出16進制表示或者用bvi進行二進制的編輯。
?
-
對于二進制文件,strings(還有grep等等)可以讓你發現文件的字節位(0101).要對文件轉編,可以試下iconv,或者如果要使用更高級的用法,試試uconv,它可以支持一些高級的Unicode方面的事情。比如,這條命令可以將重音都小寫,并且去掉(通過擴展并且丟掉):
?
uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt
?
-
要將文件切片,可以試試split(根據大小切分)或者csplit(根據模式切分)。
?
系統調試篇
?
-
對于web調試來說,curl和curl -l會有用,以及和wget相同的那部分功能。
?
-
如果想了解磁盤/cpu/網絡的狀態,可以使用iostat,netstat,top(更好一些的話,用htop),以及(尤其是)dstat,對于想快速了解系統當前正在發生的事情,非常的方便。如果想了解內存當前的狀態,可以使用free以及vmstat,還要了解各項輸出的含義。特別值得一提的是,你要知道“cached”的數值是linux內核保留用來做文件緩存的空間的大小,所以真正可用的有效內存是“free”項的對應值。
?
-
java的系統調試則完全是另外一回事,但在Sun以及其他的JVM上有一個簡單的技巧,就是你可以運行kill -3 <pid> ,得到一個完整的棧調用軌跡以及堆使用的總體情況(包括產生的垃圾回收細節,這里面包含有很多的信息),會被定向到標準錯誤或者日志。
?
-
使用mtr作為更好的網絡追蹤,識別網絡存在的問題。
?
-
要查看一個磁盤是否是滿的,ncdu要比一般用的“du -sk *”要快。
?
-
要查看哪些socket或者進程在占用帶寬,試試iftop或者netlogs。
?
-
ab 工具(隨apache的安裝包一起發布)對于檢測網絡服務器的性能很有幫助,對于更加復雜的壓力測試,可以試下siege。對于更加嚴重的網絡問題的調試,試試wireshark或者tshark。了解strace和ltrace。這在一個程序突然失敗,掛掉,或者崩潰,而你卻不知所措,或者是你想知道程序的整體性能的情況時,會很有幫助。可以注意下-c和-p選項。
?
-
了解用ldd來檢查共享庫函數等的一些問題。
?
-
了解如何用gdb連接到一個正在運行的程序,并且得到它的調用堆棧。
?
-
使用/proc. 對于現場調試問題會很有幫忙。例如:/proc/cpuinfo, /proc/xxx/cwd, /proc/xxx/exe, /proc/xxx/fd/, /proc/xxx/smaps。
?
-
當要調試過去一段時間內出現的問題時,sar 會有用,它可以顯示過去一段時間內的CPU,內存,網絡的統計信息。
?
-
對于更深層次的系統性能優化,可以關注下stap(systemtap)或者perf。
?
-
當出現了一些很詭異的問題時,可以試下dmesg(比如硬件或者驅動的問題)。
?
?----------------------------------------------------------------------這是具體命令分隔線-------------------------------------------------------------------------------------------------------------------
系統信息?
arch 顯示機器的處理器架構(1)?
uname -m 顯示機器的處理器架構(2)?
uname -r 顯示正在使用的內核版本?
dmidecode -q 顯示硬件系統部件 - (SMBIOS / DMI)?
hdparm -i /dev/hda 羅列一個磁盤的架構特性?
hdparm -tT /dev/sda 在磁盤上執行測試性讀取操作?
cat /proc/cpuinfo 顯示CPU info的信息?
cat /proc/interrupts 顯示中斷?
cat /proc/meminfo 校驗內存使用?
cat /proc/swaps 顯示哪些swap被使用?
cat /proc/version 顯示內核的版本?
cat /proc/net/dev 顯示網絡適配器及統計?
cat /proc/mounts 顯示已加載的文件系統?
lspci -tv 羅列 PCI 設備?
lsusb -tv 顯示 USB 設備?
date 顯示系統日期?
cal 2007 顯示2007年的日歷表?
date 041217002007.00 設置日期和時間 - 月日時分年.秒?
clock -w 將時間修改保存到 BIOS
關機 (系統的關機、重啟以及登出 )?
shutdown -h now 關閉系統(1)?
init 0 關閉系統(2)?
telinit 0 關閉系統(3)?
shutdown -h hours:minutes & 按預定時間關閉系統?
shutdown -c 取消按預定時間關閉系統?
shutdown -r now 重啟(1)?
reboot 重啟(2)?
logout 注銷?
文件和目錄?
cd /home 進入 '/ home' 目錄'?
cd .. 返回上一級目錄?
cd ../.. 返回上兩級目錄?
cd 進入個人的主目錄?
cd ~user1 進入個人的主目錄?
cd - 返回上次所在的目錄?
pwd 顯示工作路徑?
ls 查看目錄中的文件?
ls -F 查看目錄中的文件?
ls -l 顯示文件和目錄的詳細資料?
ls -a 顯示隱藏文件?
ls *[0-9]* 顯示包含數字的文件名和目錄名?
tree 顯示文件和目錄由根目錄開始的樹形結構(1)?
lstree 顯示文件和目錄由根目錄開始的樹形結構(2)?
mkdir dir1 創建一個叫做 'dir1' 的目錄'?
mkdir dir1 dir2 同時創建兩個目錄?
mkdir -p /tmp/dir1/dir2 創建一個目錄樹?
rm -f file1 刪除一個叫做 'file1' 的文件'?
rmdir dir1 刪除一個叫做 'dir1' 的目錄'?
rm -rf dir1 刪除一個叫做 'dir1' 的目錄并同時刪除其內容?
rm -rf dir1 dir2 同時刪除兩個目錄及它們的內容?
mv dir1 new_dir 重命名/移動 一個目錄?
cp file1 file2 復制一個文件?
cp dir/* . 復制一個目錄下的所有文件到當前工作目錄?
cp -a /tmp/dir1 . 復制一個目錄到當前工作目錄?
cp -a dir1 dir2 復制一個目錄?
ln -s file1 lnk1 創建一個指向文件或目錄的軟鏈接?
ln file1 lnk1 創建一個指向文件或目錄的物理鏈接?
touch -t 0712250000 file1 修改一個文件或目錄的時間戳 - (YYMMDDhhmm)?
file file1 outputs the mime type of the file as text?
iconv -l 列出已知的編碼?
iconv -f fromEncoding -t toEncoding inputFile > outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding.?
find . -maxdepth 1 -name *.jpg -print -exec convert "{}" -resize 80x60 "thumbs/{}" \; batch resize files in the current directory and send them to a thumbnails directory (requires convert from Imagemagick)?
文件搜索?
find / -name file1 從 '/' 開始進入根文件系統搜索文件和目錄?
find / -user user1 搜索屬于用戶 'user1' 的文件和目錄?
find /home/user1 -name \*.bin 在目錄 '/ home/user1' 中搜索帶有'.bin' 結尾的文件?
find /usr/bin -type f -atime +100 搜索在過去100天內未被使用過的執行文件?
find /usr/bin -type f -mtime -10 搜索在10天內被創建或者修改過的文件?
find / -name \*.rpm -exec chmod 755 '{}' \; 搜索以 '.rpm' 結尾的文件并定義其權限?
find / -xdev -name \*.rpm 搜索以 '.rpm' 結尾的文件,忽略光驅、捷盤等可移動設備?
locate \*.ps 尋找以 '.ps' 結尾的文件 - 先運行 'updatedb' 命令?
whereis halt 顯示一個二進制文件、源碼或man的位置?
which halt 顯示一個二進制文件或可執行文件的完整路徑?
掛載一個文件系統?
mount /dev/hda2 /mnt/hda2 掛載一個叫做hda2的盤 - 確定目錄 '/ mnt/hda2' 已經存在?
umount /dev/hda2 卸載一個叫做hda2的盤 - 先從掛載點 '/ mnt/hda2' 退出?
fuser -km /mnt/hda2 當設備繁忙時強制卸載?
umount -n /mnt/hda2 運行卸載操作而不寫入 /etc/mtab 文件- 當文件為只讀或當磁盤寫滿時非常有用?
mount /dev/fd0 /mnt/floppy 掛載一個軟盤?
mount /dev/cdrom /mnt/cdrom 掛載一個cdrom或dvdrom?
mount /dev/hdc /mnt/cdrecorder 掛載一個cdrw或dvdrom?
mount /dev/hdb /mnt/cdrecorder 掛載一個cdrw或dvdrom?
mount -o loop file.iso /mnt/cdrom 掛載一個文件或ISO鏡像文件?
mount -t vfat /dev/hda5 /mnt/hda5 掛載一個Windows FAT32文件系統?
mount /dev/sda1 /mnt/usbdisk 掛載一個usb 捷盤或閃存設備?
mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 掛載一個windows網絡共享
磁盤空間?
df -h 顯示已經掛載的分區列表?
ls -lSr |more 以尺寸大小排列文件和目錄?
du -sh dir1 估算目錄 'dir1' 已經使用的磁盤空間'?
du -sk * | sort -rn 以容量大小為依據依次顯示文件和目錄的大小?
rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n 以大小為依據依次顯示已安裝的rpm包所使用的空間 (fedora, redhat類系統)?
dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n 以大小為依據顯示已安裝的deb包所使用的空間 (ubuntu, debian類系統)?
用戶和群組?
groupadd group_name 創建一個新用戶組?
groupdel group_name 刪除一個用戶組?
groupmod -n new_group_name old_group_name 重命名一個用戶組?
useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 創建一個屬于 "admin" 用戶組的用戶?
useradd user1 創建一個新用戶?
userdel -r user1 刪除一個用戶 ( '-r' 排除主目錄)?
usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 修改用戶屬性?
passwd 修改口令?
passwd user1 修改一個用戶的口令 (只允許root執行)?
chage -E 2005-12-31 user1 設置用戶口令的失效期限?
pwck 檢查 '/etc/passwd' 的文件格式和語法修正以及存在的用戶?
grpck 檢查 '/etc/passwd' 的文件格式和語法修正以及存在的群組?
newgrp group_name 登陸進一個新的群組以改變新創建文件的預設群組?
文件的權限 - 使用 "+" 設置權限,使用 "-" 用于取消?
ls -lh 顯示權限?
ls /tmp | pr -T5 -W$COLUMNS 將終端劃分成5欄顯示?
chmod ugo+rwx directory1 設置目錄的所有人(u)、群組(g)以及其他人(o)以讀(r )、寫(w)和執行(x)的權限?
chmod go-rwx directory1 刪除群組(g)與其他人(o)對目錄的讀寫執行權限?
chown user1 file1 改變一個文件的所有人屬性?
chown -R user1 directory1 改變一個目錄的所有人屬性并同時改變改目錄下所有文件的屬性?
chgrp group1 file1 改變文件的群組?
chown user1:group1 file1 改變一個文件的所有人和群組屬性?
find / -perm -u+s 羅列一個系統中所有使用了SUID控制的文件?
chmod u+s /bin/file1 設置一個二進制文件的 SUID 位 - 運行該文件的用戶也被賦予和所有者同樣的權限?
chmod u-s /bin/file1 禁用一個二進制文件的 SUID位?
chmod g+s /home/public 設置一個目錄的SGID 位 - 類似SUID ,不過這是針對目錄的?
chmod g-s /home/public 禁用一個目錄的 SGID 位?
chmod o+t /home/public 設置一個文件的 STIKY 位 - 只允許合法所有人刪除文件?
chmod o-t /home/public 禁用一個目錄的 STIKY 位
文件的特殊屬性 - 使用 "+" 設置權限,使用 "-" 用于取消?
chattr +a file1 只允許以追加方式讀寫文件?
chattr +c file1 允許這個文件能被內核自動壓縮/解壓?
chattr +d file1 在進行文件系統備份時,dump程序將忽略這個文件?
chattr +i file1 設置成不可變的文件,不能被刪除、修改、重命名或者鏈接?
chattr +s file1 允許一個文件被安全地刪除?
chattr +S file1 一旦應用程序對這個文件執行了寫操作,使系統立刻把修改的結果寫到磁盤?
chattr +u file1 若文件被刪除,系統會允許你在以后恢復這個被刪除的文件?
lsattr 顯示特殊的屬性?
打包和壓縮文件?
bunzip2 file1.bz2 解壓一個叫做 'file1.bz2'的文件?
bzip2 file1 壓縮一個叫做 'file1' 的文件?
gunzip file1.gz 解壓一個叫做 'file1.gz'的文件?
gzip file1 壓縮一個叫做 'file1'的文件?
gzip -9 file1 最大程度壓縮?
rar a file1.rar test_file 創建一個叫做 'file1.rar' 的包?
rar a file1.rar file1 file2 dir1 同時壓縮 'file1', 'file2' 以及目錄 'dir1'?
rar x file1.rar 解壓rar包?
unrar x file1.rar 解壓rar包?
tar -cvf archive.tar file1 創建一個非壓縮的 tarball?
tar -cvf archive.tar file1 file2 dir1 創建一個包含了 'file1', 'file2' 以及 'dir1'的檔案文件?
tar -tf archive.tar 顯示一個包中的內容?
tar -xvf archive.tar 釋放一個包?
tar -xvf archive.tar -C /tmp 將壓縮包釋放到 /tmp目錄下?
tar -cvfj archive.tar.bz2 dir1 創建一個bzip2格式的壓縮包?
tar -xvfj archive.tar.bz2 解壓一個bzip2格式的壓縮包?
tar -cvfz archive.tar.gz dir1 創建一個gzip格式的壓縮包?
tar -xvfz archive.tar.gz 解壓一個gzip格式的壓縮包?
zip file1.zip file1 創建一個zip格式的壓縮包?
zip -r file1.zip file1 file2 dir1 將幾個文件和目錄同時壓縮成一個zip格式的壓縮包?
unzip file1.zip 解壓一個zip格式壓縮包?
RPM 包 - (Fedora, Redhat及類似系統)?
rpm -ivh package.rpm 安裝一個rpm包?
rpm -ivh --nodeeps package.rpm 安裝一個rpm包而忽略依賴關系警告?
rpm -U package.rpm 更新一個rpm包但不改變其配置文件?
rpm -F package.rpm 更新一個確定已經安裝的rpm包?
rpm -e package_name.rpm 刪除一個rpm包?
rpm -qa 顯示系統中所有已經安裝的rpm包?
rpm -qa | grep httpd 顯示所有名稱中包含 "httpd" 字樣的rpm包?
rpm -qi package_name 獲取一個已安裝包的特殊信息?
rpm -qg "System Environment/Daemons" 顯示一個組件的rpm包?
rpm -ql package_name 顯示一個已經安裝的rpm包提供的文件列表?
rpm -qc package_name 顯示一個已經安裝的rpm包提供的配置文件列表?
rpm -q package_name --whatrequires 顯示與一個rpm包存在依賴關系的列表?
rpm -q package_name --whatprovides 顯示一個rpm包所占的體積?
rpm -q package_name --scripts 顯示在安裝/刪除期間所執行的腳本l?
rpm -q package_name --changelog 顯示一個rpm包的修改歷史?
rpm -qf /etc/httpd/conf/httpd.conf 確認所給的文件由哪個rpm包所提供?
rpm -qp package.rpm -l 顯示由一個尚未安裝的rpm包提供的文件列表?
rpm --import /media/cdrom/RPM-GPG-KEY 導入公鑰數字證書?
rpm --checksig package.rpm 確認一個rpm包的完整性?
rpm -qa gpg-pubkey 確認已安裝的所有rpm包的完整性?
rpm -V package_name 檢查文件尺寸、 許可、類型、所有者、群組、MD5檢查以及最后修改時間?
rpm -Va 檢查系統中所有已安裝的rpm包- 小心使用?
rpm -Vp package.rpm 確認一個rpm包還未安裝?
rpm2cpio package.rpm | cpio --extract --make-directories *bin* 從一個rpm包運行可執行文件?
rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm 從一個rpm源碼安裝一個構建好的包?
rpmbuild --rebuild package_name.src.rpm 從一個rpm源碼構建一個 rpm 包?
YUM 軟件包升級器 - (Fedora, RedHat及類似系統)?
yum install package_name 下載并安裝一個rpm包?
yum localinstall package_name.rpm 將安裝一個rpm包,使用你自己的軟件倉庫為你解決所有依賴關系?
yum update package_name.rpm 更新當前系統中所有安裝的rpm包?
yum update package_name 更新一個rpm包?
yum remove package_name 刪除一個rpm包?
yum list 列出當前系統中安裝的所有包?
yum search package_name 在rpm倉庫中搜尋軟件包?
yum clean packages 清理rpm緩存刪除下載的包?
yum clean headers 刪除所有頭文件?
yum clean all 刪除所有緩存的包和頭文件?
DEB 包 (Debian, Ubuntu 以及類似系統)?
dpkg -i package.deb 安裝/更新一個 deb 包?
dpkg -r package_name 從系統刪除一個 deb 包?
dpkg -l 顯示系統中所有已經安裝的 deb 包?
dpkg -l | grep httpd 顯示所有名稱中包含 "httpd" 字樣的deb包?
dpkg -s package_name 獲得已經安裝在系統中一個特殊包的信息?
dpkg -L package_name 顯示系統中已經安裝的一個deb包所提供的文件列表?
dpkg --contents package.deb 顯示尚未安裝的一個包所提供的文件列表?
dpkg -S /bin/ping 確認所給的文件由哪個deb包提供
APT 軟件工具 (Debian, Ubuntu 以及類似系統)?
apt-get install package_name 安裝/更新一個 deb 包?
apt-cdrom install package_name 從光盤安裝/更新一個 deb 包?
apt-get update 升級列表中的軟件包?
apt-get upgrade 升級所有已安裝的軟件?
apt-get remove package_name 從系統刪除一個deb包?
apt-get check 確認依賴的軟件倉庫正確?
apt-get clean 從下載的軟件包中清理緩存?
apt-cache search searched-package 返回包含所要搜索字符串的軟件包名稱?
查看文件內容?
cat file1 從第一個字節開始正向查看文件的內容?
tac file1 從最后一行開始反向查看一個文件的內容?
more file1 查看一個長文件的內容?
less file1 類似于 'more' 命令,但是它允許在文件中和正向操作一樣的反向操作?
head -2 file1 查看一個文件的前兩行?
tail -2 file1 查看一個文件的最后兩行?
tail -f /var/log/messages 實時查看被添加到一個文件中的內容?
文本處理?
cat file1 file2 ... | command <> file1_in.txt_or_file1_out.txt general syntax for text manipulation using PIPE, STDIN and STDOUT?
cat file1 | command( sed, grep, awk, grep, etc...) > result.txt 合并一個文件的詳細說明文本,并將簡介寫入一個新文件中?
cat file1 | command( sed, grep, awk, grep, etc...) >> result.txt 合并一個文件的詳細說明文本,并將簡介寫入一個已有的文件中?
grep Aug /var/log/messages 在文件 '/var/log/messages'中查找關鍵詞"Aug"?
grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以"Aug"開始的詞匯?
grep [0-9] /var/log/messages 選擇 '/var/log/messages' 文件中所有包含數字的行?
grep Aug -R /var/log/* 在目錄 '/var/log' 及隨后的目錄中搜索字符串"Aug"?
sed 's/stringa1/stringa2/g' example.txt 將example.txt文件中的 "string1" 替換成 "string2"?
sed '/^$/d' example.txt 從example.txt文件中刪除所有空白行?
sed '/ *#/d; /^$/d' example.txt 從example.txt文件中刪除所有注釋和空白行?
echo 'esempio' | tr '[:lower:]' '[:upper:]' 合并上下單元格內容?
sed -e '1d' result.txt 從文件example.txt 中排除第一行?
sed -n '/stringa1/p' 查看只包含詞匯 "string1"的行?
sed -e 's/ *$//' example.txt 刪除每一行最后的空白字符?
sed -e 's/stringa1//g' example.txt 從文檔中只刪除詞匯 "string1" 并保留剩余全部?
sed -n '1,5p;5q' example.txt 查看從第一行到第5行內容?
sed -n '5p;5q' example.txt 查看第5行?
sed -e 's/00*/0/g' example.txt 用單個零替換多個零?
cat -n file1 標示文件的行數?
cat example.txt | awk 'NR%2==1' 刪除example.txt文件中的所有偶數行?
echo a b c | awk '{print $1}' 查看一行第一欄?
echo a b c | awk '{print $1,$3}' 查看一行的第一和第三欄?
paste file1 file2 合并兩個文件或兩欄的內容?
paste -d '+' file1 file2 合并兩個文件或兩欄的內容,中間用"+"區分?
sort file1 file2 排序兩個文件的內容?
sort file1 file2 | uniq 取出兩個文件的并集(重復的行只保留一份)?
sort file1 file2 | uniq -u 刪除交集,留下其他的行?
sort file1 file2 | uniq -d 取出兩個文件的交集(只留下同時存在于兩個文件中的文件)?
comm -1 file1 file2 比較兩個文件的內容只刪除 'file1' 所包含的內容?
comm -2 file1 file2 比較兩個文件的內容只刪除 'file2' 所包含的內容?
comm -3 file1 file2 比較兩個文件的內容只刪除兩個文件共有的部分?
字符設置和文件格式轉換?
dos2unix filedos.txt fileunix.txt 將一個文本文件的格式從MSDOS轉換成UNIX?
unix2dos fileunix.txt filedos.txt 將一個文本文件的格式從UNIX轉換成MSDOS?
recode ..HTML < page.txt > page.html 將一個文本文件轉換成html?
recode -l | more 顯示所有允許的轉換格式?
文件系統分析?
badblocks -v /dev/hda1 檢查磁盤hda1上的壞磁塊?
fsck /dev/hda1 修復/檢查hda1磁盤上linux文件系統的完整性?
fsck.ext2 /dev/hda1 修復/檢查hda1磁盤上ext2文件系統的完整性?
e2fsck /dev/hda1 修復/檢查hda1磁盤上ext2文件系統的完整性?
e2fsck -j /dev/hda1 修復/檢查hda1磁盤上ext3文件系統的完整性?
fsck.ext3 /dev/hda1 修復/檢查hda1磁盤上ext3文件系統的完整性?
fsck.vfat /dev/hda1 修復/檢查hda1磁盤上fat文件系統的完整性?
fsck.msdos /dev/hda1 修復/檢查hda1磁盤上dos文件系統的完整性?
dosfsck /dev/hda1 修復/檢查hda1磁盤上dos文件系統的完整性?
初始化一個文件系統?
mkfs /dev/hda1 在hda1分區創建一個文件系統?
mke2fs /dev/hda1 在hda1分區創建一個linux ext2的文件系統?
mke2fs -j /dev/hda1 在hda1分區創建一個linux ext3(日志型)的文件系統?
mkfs -t vfat 32 -F /dev/hda1 創建一個 FAT32 文件系統?
fdformat -n /dev/fd0 格式化一個軟盤?
mkswap /dev/hda3 創建一個swap文件系統?
SWAP文件系統?
mkswap /dev/hda3 創建一個swap文件系統?
swapon /dev/hda3 啟用一個新的swap文件系統?
swapon /dev/hda2 /dev/hdb3 啟用兩個swap分區?
備份?
dump -0aj -f /tmp/home0.bak /home 制作一個 '/home' 目錄的完整備份?
dump -1aj -f /tmp/home0.bak /home 制作一個 '/home' 目錄的交互式備份?
restore -if /tmp/home0.bak 還原一個交互式備份?
rsync -rogpav --delete /home /tmp 同步兩邊的目錄?
rsync -rogpav -e ssh --delete /home ip_address:/tmp 通過SSH通道rsync?
rsync -az -e ssh --delete ip_addr:/home/public /home/local 通過ssh和壓縮將一個遠程目錄同步到本地目錄?
rsync -az -e ssh --delete /home/local ip_addr:/home/public 通過ssh和壓縮將本地目錄同步到遠程目錄?
dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz' 通過ssh在遠程主機上執行一次備份本地磁盤的操作?
dd if=/dev/sda of=/tmp/file1 備份磁盤內容到一個文件?
tar -Puf backup.tar /home/user 執行一次對 '/home/user' 目錄的交互式備份操作?
( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr 'cd /home/share/ && tar x -p' 通過ssh在遠程目錄中復制一個目錄內容?
( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home && tar x -p' 通過ssh在遠程目錄中復制一個本地目錄?
tar cf - . | (cd /tmp/backup ; tar xf - ) 本地將一個目錄復制到另一個地方,保留原有權限及鏈接?
find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents 從一個目錄查找并復制所有以 '.txt' 結尾的文件到另一個目錄?
find /var/log -name '*.log' | tar cv --files-from=- | bzip2 > log.tar.bz2 查找所有以 '.log' 結尾的文件并做成一個bzip包?
dd if=/dev/hda of=/dev/fd0 bs=512 count=1 做一個將 MBR (Master Boot Record)內容復制到軟盤的動作?
dd if=/dev/fd0 of=/dev/hda bs=512 count=1 從已經保存到軟盤的備份中恢復MBR內容
光盤?
cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force 清空一個可復寫的光盤內容?
mkisofs /dev/cdrom > cd.iso 在磁盤上創建一個光盤的iso鏡像文件?
mkisofs /dev/cdrom | gzip > cd_iso.gz 在磁盤上創建一個壓縮了的光盤iso鏡像文件?
mkisofs -J -allow-leading-dots -R -V "Label CD" -iso-level 4 -o ./cd.iso data_cd 創建一個目錄的iso鏡像文件?
cdrecord -v dev=/dev/cdrom cd.iso 刻錄一個ISO鏡像文件?
gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom - 刻錄一個壓縮了的ISO鏡像文件?
mount -o loop cd.iso /mnt/iso 掛載一個ISO鏡像文件?
cd-paranoia -B 從一個CD光盤轉錄音軌到 wav 文件中?
cd-paranoia -- "-3" 從一個CD光盤轉錄音軌到 wav 文件中(參數-3)?
cdrecord --scanbus 掃描總線以識別scsi通道?
dd if=/dev/hdc | md5sum 校驗一個設備的md5sum編碼,例如一張 CD?
網絡 - (以太網和WIFI無線)?
ifconfig eth0 顯示一個以太網卡的配置?
ifup eth0 啟用一個 'eth0' 網絡設備?
ifdown eth0 禁用一個 'eth0' 網絡設備?
ifconfig eth0 192.168.1.1 netmask 255.255.255.0 控制IP地址?
ifconfig eth0 promisc 設置 'eth0' 成混雜模式以嗅探數據包 (sniffing)?
dhclient eth0 以dhcp模式啟用 'eth0'?
route -n show routing table?
route add -net 0/0 gw IP_Gateway configura default gateway?
route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 configure static route to reach network '192.168.0.0/16'?
route del 0/0 gw IP_gateway remove static route?
echo "1" > /proc/sys/net/ipv4/ip_forward activate ip routing?
?
轉載于:https://www.cnblogs.com/kangye1014/p/4993951.html
總結
以上是生活随笔為你收集整理的每个 Linux 用户都应该知道的命令行技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu开启FTP服务方法(Ubun
- 下一篇: 【C语言】百行代码实现—俄罗斯方块