Ubuntu命令技巧
前言
下面的命令大都需要在控制檯 /終端/shell 下輸入。
控制檯,終端,和shell意味着同樣一件事-一個命令行界面,他可以用來控制系統。
打開一個控制檯:
應用程序-->附件-->終端
任何一個使用'sudo'作爲前綴的命令都需要擁有管理員(或root)訪問權限。所以你會被提示輸入你自己的密碼。
安裝升級
查看軟件xxx安裝內容
dpkg -L xxx
查找軟件庫中的軟件
apt-cache search 正則表達式
或
aptitude search 軟件包
顯示系統安裝包的統計信息
apt-cache stats
顯示系統全部可用包的名稱
apt-cache pkgnames
顯示包的信息
apt-cache show k3b
查找文件屬於哪個包
apt-file search filename
查看已經安裝了哪些包
dpkg -l
查詢軟件xxx依賴哪些包
apt-cache depends xxx
查詢軟件xxx被哪些包依賴
apt-cache rdepends xxx
增加一個光盤源
sudo apt-cdrom add
系統更新
sudo apt-get update (這一步更新包列表)
sudo apt-get dist-upgrade (這一步安裝所有可用更新)
或者
sudo apt-get upgrade (這一步安裝應用程序更新,不安裝新內核等)
查詢程序屬於哪一個debian包
$dpkg -S `which dh_installdeb`
debhelper: /usr/bin/dh_installdeb
$dpkg -l | grep debhelper
ii debhelper 7.4.15ubuntu1 helper programs for debian/rules
另一種更強的方法:
清除所有已刪除包的殘餘配置文件
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
如果報如下錯誤,證明你的系統中沒有殘留配置文件了,無須擔心。
dpkg:--purge needs at least one package name argument
Typedpkg --help for help about installing and deinstalling packages[*];
Use `dselect' or `aptitude' for user-friendly packagemanagement;
Type dpkg -Dhelp for a list of dpkg debug flagvalues;
Type dpkg --force-help for a list of forcing options;
Typedpkg-deb --help for help about manipulating *.deb files;
Type dpkg--license for copyright license and lack of warranty (GNU GPL) [*].
Optionsmarked [*] produce a lot of output - pipe it through `less' or`more' !
編譯時缺少h文件的自動處理
sudo auto-apt run ./configure
查看安裝軟件時下載包的臨時存放目錄
ls /var/cache/apt/archives
如果你有一些自己的deb包需要安裝,可以把它們複製到/var/cache/apt/archives目錄下,然後就可以使用apt-get install 包名 安裝。
使用apt-get install命令比dpkg -i 命令更好,因爲apt-get install命令會自動安裝依賴的軟件包。
dpkg -i 命令安裝時,則可能會遇到軟件包依賴不滿足而無法安裝的錯誤。
備份當前系統安裝的所有包的列表
dpkg --get-selections | grep -v deinstall > ~/somefile
從上面備份的安裝包的列表文件恢復所有包
dpkg --set-selections < ~/somefile sudo dselect 或者 sudo apt-get dselect-upgrade
安裝debian包時自動回答yes
sudo apt-get install/dselect-upgrade 等命令後,可以加上-y 表示自動回答yes。
但在遇到安裝一個未驗證的deb包,或者刪除一個本質的deb包時,安裝過程會終止。
如果再加上
--force-yes
那麼不論什麼樣的情況,apt-get都會執行安裝。 但使用這個選項可能會造成系統問題。
清理舊版本的軟件緩存
sudo apt-get autoclean
清理所有軟件緩存
sudo apt-get clean
刪除系統不再使用的孤立軟件
sudo apt-get autoremove
查看包在服務器上面的地址
apt-get -qq --print-uris install ssh | cut -d/' -f2
徹底刪除Gnome
apt-get --purge remove liborbit2
徹底刪除KDE
apt-get --purge remove libqt3-mt libqtcore4
一鍵安裝LAMP服務
sudo tasksel install lamp-server
刪除舊內核
sudo aptitude purge ~ilinux-image-.*/(/!`uname -r`/)
導入ppa源的key值
#W: GPG簽名驗證錯誤: http://ppa.launchpad.net jaunty Release: 由於沒有公鑰,下列簽名無法進行驗證: NO_PUBKEY 5126890CDCC7AFE0
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 5126890CDCC7AFE0 #5126890CDCC7AFE0替換爲你需要導入的Key值
增加一個ppa源
sudo add-apt-repository ppa:user/ppa-name #使用 ppa 的地址替換 ppa:user/ppa-name
系統升級
-
這裏指的是版本間的升級,例如9.04=>10.04。
-
使用該升級方式通常需要使能backports源。
sudo apt-get update sudo apt-get install update-manager-core sudo do-release-upgrade
系統
查看內核
uname -a
查看系統是32位還是64位
#查看long的位數,返回32或64
getconf LONG_BIT
#查看文件信息,包含32-bit就是32位,包含64-bit就是64位
file /sbin/init
查看Ubuntu版本
cat /etc/issue 或 cat /etc/lsb-release 或 lsb_release -dsc
查看內核加載的模塊
lsmod
查看PCI設備
lspci
查看USB設備
lsusb #加參數 -v 可以顯示USB設備的描述表(descriptors) lsusb -v
查看網卡狀態
sudo apt-get install ethtool sudo ethtool eth0
激活網卡的Wake-on-LAN
sudo apt-get install wakeonlan 或 sudo ethtool -s eth0 wol g
查看CPU信息
cat /proc/cpuinfo
顯示當前硬件信息
sudo lshw
這個命令可以顯示詳盡的硬件信息,包括廠商,信號,能力,總線等信息。使用lshw |more 耐心查看。
lshw -html > lshw.html 生成網頁形式的頁面。
lshw -short 查看硬件的簡要信息。
獲取CPU序列號或者主板序列號
#CPU ID sudo dmidecode -t 4 | grep ID #Serial Number sudo dmidecode | grep Serial #CPU sudo dmidecode -t 4 #BIOS sudo dmidecode -t 0 #主板: sudo dmidecode -t 2 #OEM: sudo dmidecode -t 11
顯示當前內存大小
free -m |grep "Mem" | awk '{print $2}'
查看硬盤溫度
sudo apt-get install hddtemp sudo hddtemp /dev/sda
顯示系統運行時間
uptime
查看系統限制
ulimit -a
查看內核限制
ipcs -l
查看當前屏幕分辨率
xrandr
硬盤
查看硬盤的分區
sudo fdisk -l
Blocks字段表示分區的大小,它的單位是1024字節,也就是KB。
硬盤分區
#危險!小心操作。
sudo fdisk /dev/sda
硬盤格式化
#危險!將第一個分區格式化爲 ext3 分區, mkfs.reiserfs mkfs.xfs mkfs.vfat
sudo mkfs.ext3 /dev/sda1
硬盤檢查
#危險!檢查第一個分區,請不要檢查已經掛載的分區,否則容易丟失和損壞數據
sudo fsck /dev/sda1
分區掛載
sudo mount -t 文件系統類型 設備路經 訪問路經
#常用文件類型如下: iso9660 光驅文件系統, vfat fat/fat32分區, ntfs ntfs分區, smbfs windows網絡共享目錄, reiserfs、ext3、xfs Linux分區
#如果中文名無法顯示嘗試在最後增加 -o nls=utf8 或 -o iocharset=utf8
#如果需要掛載後,普通用戶也可以使用,在 -o 的參數後面增加 ,umask=022 如:-o nls=utf8,umask=022
分區卸載
sudo umount 目錄名或設備名
只讀掛載ntfs分區
sudo mount -t ntfs -o nls=utf8,umask=0 /dev/sdb1 /mnt/c
可寫掛載ntfs分區
sudo mount -t ntfs-3g -o locale=zh_CN.utf8,umask=0 /dev/sdb1 /mnt/c
默認安裝的ubuntu桌面版,會自動只讀mount ntfs格式的分區。
sudo apt-get install ntfs-3g
安裝這個軟件包之後,就會自動以讀寫方式mount ntfs格式的分區了。
如果不安裝這個軟件包,必須使用root權限寫fat格式的磁盤。而且速度很慢。安裝這個軟件包後,可以用一般用戶寫fat格式磁盤,速度恢復正常。
我曾經寫fat格式的U盤速度非常慢,只有幾百KB/s。安裝這個軟件包後,寫入速度恢復正常,達到30多MB/s。
掛載fat32分區
sudo mount -t vfat -o iocharset=utf8,umask=0 /dev/sda1 /mnt/c
掛載共享文件
sudo mount -t smbfs -o username=xxx,password=xxx,iocharset=utf8 //192.168.1.1/share /mnt/share
掛載ISO文件
sudo mount -t iso9660 -o loop,utf8 xxx.iso /mnt/iso
查看IDE硬盤信息
sudo hdparm -i /dev/hda
查看軟raid陣列信息
cat /proc/mdstat
參看硬raid陣列信息
dmesg |grep -i raid cat /proc/scsi/scsi
查看SATA硬盤信息
sudo hdparm -I /dev/sda 或 sudo apt-get install blktool sudo blktool /dev/sda id
查看硬盤剩餘空間
df
用法:df[選項]...[文件]...顯示每個<文件>所在的文件系統的信息,默認是顯示所有文件系統。
長選項必須用的參數在使用短選項時也是必需的。 -a, --all 包括大小爲 0 個塊的文件系統 -B, --block-size=大小 塊以指定<大小>的字節爲單位 -h, --human-readable 以容易理解的格式印出文件系統大小 (例如 1K 234M 2G) -H, --si 類似 -h,但取 1000 的次方而不是 1024 -i, --inodes 顯示 inode 信息而非塊使用量 -k 即 --block-size=1K -l, --local 只顯示本機的文件系統 --no-sync 取得使用量數據前不進行同步動作 (默認) -P, --portability 使用 POSIX 兼容的輸出格式 --sync 取得使用量數據前先進行同步動作 -t, --type=類型 只印出指定文件系統爲指定<類型>的信息 -T, --print-type 印出文件系統類型 -x, --exclude-type=類型 只印出文件系統不是指定<類型>信息 -v (忽略) --help 顯示此幫助信息並離開 --version 顯示版本信息並離開
查看目錄佔用空間
du -hs 目錄名
優盤沒法卸載
sync fuser -km /media/usbdisk
使用文件來增加交換空間
#創建一個512M的交換文件 /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1M count=512
sudo mkswap /swapfile
sudo swapon /swapfile
#sudo vim /etc/fstab #加到fstab文件中讓系統引導時自動啓動
/swapfile swap swap defaults 0 0
查看硬盤當前讀寫情況
# 首先安裝 sysstat 包
sudo apt-get install sysstat
#每2秒刷新一次
sudo iostat -x 2
進程
查看當前的內存使用情況
free
usage:free [-b|-k|-m|-g] [-l] [-o] [-t] [-s delay] [-c count] [-V]
-b,-k,-m,-g show output in bytes, KB, MB, or GB
-l show detailed low and high memory statistics
-o use old format (no -/+buffers/cache line)
-t display total for RAM + swap
-s update every [delay] seconds
-c update [count] times
-V display version information and exit
連續監視內存使用情況
watch -d free # 使用 Ctrl + c 退出
動態顯示進程執行情況
top top指令運行時輸入H或?打開幫助窗口,輸入Q退出指令。
查看當前有哪些進程
ps -AFL
查看目前登入用戶運行的程序
w
查看當前用戶程序實際內存佔用,並排序
ps -u $USER -o pid,rss,cmd --sort -rss
統計程序的內存耗用
ps -eo fname,rss|awk '{arr[$1]+=$2} END {for (i in arr) {print i,arr[i]}}'|sort -k2 -nr
按內存從大到小排列進程
ps -eo "%C : %p : %z : %a"|sort -k5 -nr
按cpu利用率從大到小排列進程
ps -eo "%C : %p : %z : %a"|sort -nr
查看當前進程樹
pstree
中止一個進程
kill 進程號(就是ps -A中的第一列的數字)
或者 killall 進程名
強制中止一個進程(在上面進程中止不成功的時候使用)
kill -9 進程號
或者 killall -9 進程名
圖形方式中止一個程序
xkill 出現骷髏標誌的鼠標,點擊需要中止的程序即可
查看進程打開的文件
lsof -p 進程的pid
顯示開啓文件abc.txt的進程
lsof abc.txt
顯示22端口現在運行什麼程序
lsof -i :22
顯示nsd進程現在打開的文件
lsof -c nsd
在後臺運行程序,退出登錄後,並不結束程序
nohup 程序 &
#查看中間運行情況 tail nohup
在後臺運行交互式程序,退出登錄後,並不結束程序
sudo apt-get install screen screen vim a.txt #直接退出後使用 screen -ls # 1656.pts-0.ubuntu (Detached) screen -r 1656 #恢復 #熱鍵,同時按下Ctrl和a鍵結束後,再按下功能鍵 C-a ? #顯示所有鍵綁定信息 C-a w #顯示所有窗口列表 C-a C-a #切換到之前顯示的窗口 C-a c #創建一個新的運行shell的窗口並切換到該窗口 C-a n #切換到下一個窗口 C-a p #切換到前一個窗口(與C-a n相對) C-a 0..9 #切換到窗口0..9 C-a a #發送 C-a到當前窗口 C-a d #暫時斷開screen會話 C-a k #殺掉當前窗口
詳細顯示程序的運行信息
strace -f -F -o outfile <cmd>
增加系統最大打開文件個數
echo 4096 > /proc/sys/fs/file-max #或者 ulimit -n 4096
清除殭屍進程
ps -eal | awk '{ if ($2 == "Z") {print $4}}' | xargs sudo kill -9
將大於120M內存的php-cgi都殺掉
ps -eo pid,fname,rss|grep php-cgi|grep -v grep|awk '{if($3>=120000) print $1}' | xargs sudo kill -9
Linux系統中如何限制用戶進程CPU佔用率
renice +10 `ps aux | awk '{ if ($3 > 0.8 && id -u $1 > 500) print $2}'` #或直接編輯/etc/security/limits.conf文件。
ADSL
配置ADSL
sudo pppoeconf
ADSL手工撥號
sudo pon dsl-provider
激活ADSL
sudo /etc/ppp/pppoe_on_boot
斷開ADSL
sudo poff
查看撥號日誌
sudo plog
如何設置動態域名
#首先去 http://www.3322.org 申請一個動態域名
#然後修改 /etc/ppp/ip-up 增加撥號時更新域名指令
sudo vim /etc/ppp/ip-up
#在最後增加如下行
w3m -no-cookie -dump 'http://username:[email protected]/dyndns/update?system=dyndns&hostname=yourdns.3322.org'
網絡
根據IP查網卡地址
arping IP地址
根據IP查電腦名
nmblookup -A IP地址
查看當前IP地址
ifconfig eth0 |awk '/inet/ {split($2,x,":");print x[2]}'
查看當前外網的IP地址
w3m -no-cookie -dump www.ip138.com/ip2city.asp|grep -o '[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}' w3m -no-cookie -dump ip.loveroot.com|grep -o '[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}' curl ifconfig.me
查看當前監聽80端口的程序
lsof -i :80
查看當前網卡的物理地址
ifconfig eth0 | head -1 | awk '{print $5}'
同一個網卡增加第二個IP地址
#在網卡eth0上增加一個1.2.3.4的IP:
sudo ifconfig eth0:0 1.2.3.4 netmask 255.255.255.0
#刪除增加的IP:
sudo ifconfig eth0:0 down
立即讓網絡支持nat
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward sudo iptables -t nat -I POSTROUTING -j MASQUERADE
查看路由信息
netstat -rn sudo route -n
手工增加一條路由
sudo route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1
手工刪除一條路由
sudo route del -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1
修改網卡MAC地址的方法
sudo ifconfig eth0 down #關閉網卡
sudo ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE #然後改地址
sudo ifconfig eth0 up #然後啓動網卡
永久改地址方法
sudo gedit /etc/network/interfaces
在ifaceeth0 inet static 後面添加一行:
pre-up ifconfig eth0 hw ether 01:01:01:01:01:01
配置文件應該像如下
iface eth0 inet static pre-up ifconfig eth0 hw ether 01:01:01:01:01:01 address 192.168.1.10 netmask 255.255.255.0 gateway 192.168.1.1
最後是logout或者reboot
統計當前IP連接的個數
netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r -n netstat -na|grep SYN|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r -n netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
統計當前所有IP包的狀態
netstat -nat|awk '{print awk $NF}'|sort|uniq -c|sort -n
統計當前20000個IP包中大於100個IP包的IP地址
tcpdump -tnn -c 20000 -i eth0 | awk -F "." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | awk ' $1 > 100 '
屏蔽IPV6
echo "blacklist ipv6" | sudo tee /etc/modprobe.d/blacklist-ipv6
察看當前網絡連接狀況以及程序
sudo netstat -atnp
查看網絡連接狀態
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
查看當前系統所有的監聽端口
nc -zv localhost 1-65535
查看網絡的當前流量
#安裝 ethstatus 軟件
sudo apt-get install ethstatus
#查看 ADSL 的速度
sudo ethstatus -i ppp0
#查看 網卡 的速度
sudo ethstatus -i eth0
#或安裝 bwm-ng
sudo apt-get install bwm-ng
#查看當前網絡流量
bwm-ng
查看域名的註冊備案情況
whois baidu.cn
查看到某一個域名的路由情況
tracepath baidu.cn
重新從服務器獲得IP地址
sudo dhclient
從當前頁面開始鏡像整個網站到本地
wget -r -p -np -k http://www.21cn.com
· -r:在本機建立服務器端目錄結構;
· -p: 下載顯示HTML文件的所有圖片;
· -np:只下載目標站點指定目錄及其子目錄的內容;
· -k: 轉換非相對鏈接爲相對鏈接。
如何多線程下載
sudo apt-get install axel axel -n 5 http://xxx.xxx.xxx.xxx/xxx.zip 或者 lftp -c "pget -n 5 http://xxx.xxx.xxx.xxx/xxx.zip“
如何查看HTTP頭
w3m -dump_head http://www.example.com
或 curl --head http://www.example.com
快速使用http方式共享目錄
#進入需要共享的目錄後運行:
python -m SimpleHTTPServer
#其它電腦使用http://ip:8000 來訪問
#自定義端口爲8080:
python -m SimpleHTTPServer 8080
SSH遠程端口轉發
ssh -v -CNgD 7070 username@sshhostipaddress
監控網絡所有的tcp數據
sudo apt-get install snort #安裝snort入侵檢測程序
sudo snort -vde
iptables
防止外網用內網IP欺騙
#eth0 爲外網網卡
sudo iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
sudo iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
sudo iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
查看nat規則
sudo iptables -t nat -L
查看filter規則
sudo iptables -L -n