Linux雲服務器常用操作和命令 騰訊雲
--http://www.qcloud.com/wiki/Linux%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C%E5%92%8C%E5%91%BD%E4%BB%A4
1. 什么是linux服務器load average?
Load是用來度量服務器工作量的大小,即計算機cpu任務執行隊列的長度,值越大,表明包括正在運行和待運行的進程數越多。
參考資料:http://en.wikipedia.org/wiki/Load_average
2. 如何查看linux服務器負載?
可以通過w,top,uptime,procinfo命令,也可以通過/proc/loadavg文件查看。
procinfo工具安裝請參考Linux環境下安裝軟件。
3. 服務器負載高怎么辦?
服務器負載(load/load average)是根據進程隊列的長度來顯示的。
當服務器出現負載高的現象時(建議以15分鍾平均值為參考),可能是由於CPU資源不足,I/O讀寫瓶頸,內存資源不足等原因造成,也可能是由於CPU正在進行密集型計算。
建議使用vmstat -x,iostat,top命令判斷負載過高的原因,然后找到具體占用大量資源的進程進行優化處理。
4. 如何查看服務器內存使用率?
可以通過free,top(執行后可通過shitf+m對內存排序),vmstat,procinfo命令,也可以通過/proc/meminfo文件查看。
5. 如何查看單個進程占用的內存大小?
可以使用top -p PID,pmap -x PID,ps aux|grep PID命令,也可以通過/proc/$process_id(進程的PID)/status文件查看,例如/proc/7159/status文件。
6. 如何查看正在使用的服務和端口?
可以使用netstat -tunlp,netstat -antup,lsof -i:PORT命令查看。
7. 如何查看服務器進程信息?
可以使用ps auxww|grep PID,ps -ef,lsof -p PID,top -p PID命令查看。
8. 如何殺死進程?
可以使用kill -9 PID(進程號),killall 程序名(比如killall cron)來殺死進程。
如果要殺死的是僵屍進程,則需要殺掉進程的父進程才有效果,命令為: kill -9 ppid(ppid為父進程ID號,可以通過ps -o ppid PID查找,例如ps -o ppid 32535)。
# ps -o ppid 1466 PPID 1
9. 如何查找僵屍進程?
可以使用top命令查看僵屍進程(zombie)的總數,使用ps -ef | grep defunct | grep -v grep查找具體僵屍進程的信息。
10. 為什么啟動不了服務器端口?
服務器端口的啟動監聽,需要從操作系統本身以及應用程序查看。
linux操作系統1024以下的端口只能由root用戶啟動,即需要先運行sudo su –獲取root權限后再啟用服務端口。
應用程序問題,建議通過應用程序啟動日志來排查失敗原因,例如端口沖突(騰訊服務器系統使用端口不能占用,比如36000),配置問題等。
11. 常用的linux服務器性能查看命令有哪些?
命令名稱 | 說明 |
---|---|
top | 進程監控命令,用來監控系統的整體性能。 可以顯示系統負載,進程,cpu,內存,分頁等信息,常用shift+m和shift+p來按memory和cpu使用對進程進行排序。 |
vmstat | 系統監控命令,重點側重於虛擬內存,也可以監控cpu,進程,內存分頁以及IO的狀態信息。 例如,vmstat 3 10,每隔3秒輸出結果,執行10次。 |
iostat | 用於輸出cpu狀態和IO狀態的工具,可以詳細展示系統的IO信息。 例如iostat -dxmt 10,每10秒以MB的格式輸出IO的詳細信息。 |
df | 用來檢查系統的磁盤空間占用狀況。 例如:df -m,以MB為單位展現磁盤使用狀況。 |
lsof | (list open files)列舉系統中被打開的文件,由於linux是以文件系統為基礎,此命令在系統管理中很有幫助。 例如: lsof filename 顯示打開指定文件的所有進程 |
ps | 進程查看命令,可以用來顯示進程的詳細信息。 常用命令參數組合為,ps -ef,ps aux,推薦使用ps -A -o來自定義輸出字段。 |
其他常用的命令和文件,free -m,du,uptime,w,/proc/stat,/proc/cpuinfo,/proc/meminfo。
參考資料:http://en.wikipedia.org/wiki/Template:Unix_commands,http://www.linuxmanpages.com/
12. Cron不生效怎么辦?
排查步驟如下:
1. 確認crontab是否正常運行。
可以運行命令crontab -e添加如下測試條目*/1 * * * * /bin/date >> /tmp/crontest 2>&1 &,然后觀察/tmp/crontest文件。
如果有問題,建議使用ps aux|grep cron查找cron的pid,kill -9 PID結束cron進程,然后通過/etc/init.d/cron start重新啟動cron。
2. 確認cron條目中的腳本路徑為絕對路徑。
3. 查看運行cron的用戶帳號是否正確,同時查看/etc/cron.deny中是否包含此賬戶。
4. 檢查腳本的執行權限,腳本目錄以及日志的文件權限。
5. 建議通過后台方式運行腳本,在腳本條目后添加“&”,例如,*/1 * * * * /bin/date >> /tmp/crontest 2>&1 &
13. 如何設置雲服務器開機任務?
Linux內核啟動順序為:
/sbin/init進程啟動,
然后依次執行init初始腳本,
運行級別腳本/etc/rc.d/rc*.d,*號值等於運行模式,可以在/etc/inittab中查看,
最后是/etc/rc.d/rc.local。
如果需要配置開機任務,可以在/etc/rc.d/rc*.d中的S**rclocal文件配置,也可以在/etc/rc.d/rc.local中配置。
實際上是軟鏈接
lrwxrwxrwx 1 root root 13 3月 10 2015 /etc/rc.local -> rc.d/rc.local
[root@steven ~]# ls /etc/rc.d/rc.local
/etc/rc.d/rc.local
14. 為什么服務器硬盤只讀?
硬盤只讀的常見原因如下:
1. 磁盤空間滿
可以通過df -m命令查看磁盤使用情況,然后刪除多余的文件釋放磁盤空間(非第三方文件不建議刪除,如果需要請聯系企業QQ確認);
2. 磁盤inode資源占用完
可以通過df -i命令查看,確認相關的進程;
3. 硬件故障
如果hosting應用通過上述方式仍無法確認原因,請通過企業QQ聯系運維支持協助定位。
15. 如何查看linux系統日志?
系統級別的日志文件存放路徑為/var/log。
常用的系統日志為/var/log/messages 。
16. 如何查找文件系統大文件?
可以首先通過df命令查看磁盤分區使用情況,比如df -m;
然后:
通過du命令查看具體文件夾的大小,比如du -sh ./*,du -h --max-depth=1|head -10;
使用ls命令列出文件以及大小,比如ls -lSh;
-S 以文件大小排序。
另外,也可以通過find命令直接查看特定目錄下的文件大小,比如find / -type f -size +10M -exec ls -lrt {} \;
-r, –reverse 依相反次序排列
17. 如何查看服務器操作系統版本?
可以通過下列命令查看系統版本:
uname -a,cat /proc/version,cat /etc/issue
# cat /proc/version
Linux version 2.6.32-504.8.1.el6.x86_64 (mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) ) #1 SMP Wed Jan 28 21:11:36 UTC 2015 家里centos
# cat /proc/version
Linux version 2.6.32-504.el6.x86_64 (mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) ) #1 SMP Wed Oct 15 04:27:16 UTC 2014 騰訊雲
18. 為什么linux終端顯示中文會出現亂碼?
服務器本身沒有對顯示語言有限制,如果是終端軟件影響中文的顯示
可以嘗試調整 選項-會話選項-外觀(secureCRT設置,其他版本軟件請查找相關設置);
如果是純Linux shell出現亂碼,請使用export命令查看用戶環境變量,查看LANG,LC_CTYPE等環境變量設置。
set命令也可以看環境變量
19. 如何設置通過SecureCRT連接雲服務器的超時時間?
可以通過如下設置,使SecureCRT連接雲服務器時,不斷開連接:
打開secureCRT選項(Options),選擇會話選項(Session Opetions),點擊終端(Terminal),在右側反空閑(Anti-idle)的框中勾選發送協議NO-OP(Send protocol NO-OP),時間設置為每120秒(every 120 seconds)。
20. 為什么刪除linux服務器上的文件,硬盤空間不釋放?
現象:
登錄linux服務器,執行 rm 命令刪除文件,用 df 命令查看硬盤空間,發現刪除文件后,可用的硬盤空間沒有增加。
原因:
通過 rm 命令刪除文件的時候,如果正好有其它進程在訪問該文件,通過 df 命令查看,刪除的文件占用的空間是沒有立即釋放的。
解決方法:
使用root權限執行 lsof |grep deletedfilename ,查看正在使用被刪除文件的進程的PID,通過命令 kill -9 PID 殺掉對應的進程即可。
地方
反代
地方
lsof簡介
http://blog.csdn.net/guoguo1980/article/details/2324454
lsof(list open files)是一個列出當前系統打開文件的工具。在linux環境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網絡連接和硬件。所以如傳輸控制協議 (TCP) 和用戶數據報協議 (UDP) 套接字等,系統在后台都為該應用程序分配了一個文件描述符,無論這個文件的本質如何,該文件描述符為應用程序與基礎操作系統之間的交互提供了通用接口。為應用程序打開文件的描述符列表提供了大量關於這個應用程序本身的信息,因此通過lsof工具能夠查看這個列表對系統監測以及排錯將是很有幫助的。
大多數與 lsof 相關的信息都存儲於以進程的 PID 命名的目錄中,即 /proc/1234 中包含的是 PID 為 1234 的進程的信息。
lsof使用
lsof輸出信息含義
在終端下輸入lsof即可顯示系統打開的文件,因為 lsof 需要訪問核心內存和各種文件,所以必須以 root 用戶的身份運行它才能夠充分地發揮其功能。
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 3,3 1024 2 /
init 1 root rtd DIR 3,3 1024 2 /
init 1 root txt REG 3,3 38432 1763452 /sbin/init
init 1 root mem REG 3,3 106114 1091620 /lib/libdl-2.6.so
init 1 root mem REG 3,3 7560696 1091614 /lib/libc-2.6.so
init 1 root mem REG 3,3 79460 1091669 /lib/libselinux.so.1
init 1 root mem REG 3,3 223280 1091668 /lib/libsepol.so.1
init 1 root mem REG 3,3 564136 1091607 /lib/ld-2.6.so
init 1 root 10u FIFO 0,15 1309 /dev/initctl
每行顯示一個打開的文件,若不指定條件默認將顯示所有進程打開的所有文件。lsof輸出各列信息的意義如下:
COMMAND:進程的名稱
PID:進程標識符
USER:進程所有者
FD:文件描述符,應用程序通過文件描述符識別該文件。如cwd、txt等
TYPE:文件類型,如DIR、REG等
DEVICE:指定磁盤的名稱
SIZE:文件的大小
NODE:索引節點(文件在磁盤上的標識) 文件inode
NAME:打開文件的確切路徑
FD 列表示文件描述符
cwd 表示應用程序的當前工作目錄,這是該應用程序啟動的目錄,除非它本身對這個目錄進行更改。
txt 表示的文件是程序代碼,如應用程序二進制文件本身或共享庫,如上列表中顯示的 /sbin/init 程序。
u 表示該其次數值表示應用程序的文件描述符,這是打開該文件時返回的一個整數。如上的最后一行文件/dev/initctl,
其文件描述符為 10。
文件被打開並處於讀取/寫入模式,而不是只讀或只寫模式。同時還有大寫的W表示該應用程序具有對整個文件的寫鎖。
該文件描述符用於確保每次只能打開一個應用程序實例。初始打開每個應用程序時,都具有三個文件描述符,
從 0 到 2,分別表示標准輸入、輸出和錯誤流。所以大多數應用程序所打開的文件的 FD 都是從 3 開始。
Type 列表示文件類型
文件和目錄分別稱為 REG 和 DIR
CHR 和 BLK,分別表示字符和塊設備
UNIX、FIFO 和 IPv4,分別表示 UNIX 域套接字、先進先出 (FIFO) 隊列和網絡協議 (IP) 套接字
lsof常用參數
lsof 常見的用法是查找應用程序打開的文件的名稱和數目。可用於查找出某個特定應用程序將日志數據記錄到何處,或者正在跟蹤某個問題。
例如,linux限制了進程能夠打開文件的數目。通常這個數值很大,所以不會產生問題,並且在需要時,應用程序可以請求更大的值(直到某
個上限)。如果你懷疑應用程序耗盡了文件描述符,那么可以使用 lsof 統計打開的文件數目,以進行驗證。lsof語法格式是:
lsof [options] filename
常用的參數列表:
lsof filename 顯示打開指定文件的所有進程
lsof -a 表示兩個參數都必須滿足時才顯示結果
lsof -c string 顯示COMMAND列中包含指定字符的進程所有打開的文件
lsof -u username 顯示所屬user進程打開的文件
lsof -g gid 顯示所屬gid的進程情況
lsof +d /DIR/ 顯示目錄下被進程打開的文件
lsof +D /DIR/ 同上,但是會遞歸搜索,但是會搜索目錄下的所有目錄,時間相對較長
lsof -d FD 顯示指定文件描述符的進程
lsof -n 不將IP轉換為hostname,缺省是不加上-n參數
lsof -p <pid> 查看指定進程打開的文件
lsof -i[46] [protocol][@hostname|@hostaddr][:service|port]
46 --> IPv4 or IPv6
protocol --> TCP or UDP
hostname --> Internet host name
hostaddr --> IPv4地址
service --> /etc/services 中的 service name (可以不只一個)
port --> 端口號 (可以不只一個)
lsof使用實例
一、查找誰在使用文件系統
在卸載文件系統時,如果該文件系統中有任何打開的文件,操作通常將會失敗。那么通過lsof可以找出那些進程在使用當前要卸載的文件系統,如下:
# lsof /GTES11/
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
bash 4208 root cwd DIR 3,1 4096 2 /GTES11/
vim 4230 root cwd DIR 3,1 4096 2 /GTES11/
二、恢復刪除的文件
當Linux計算機受到入侵時,常見的情況是日志文件被刪除,以掩蓋攻擊者的蹤跡。管理錯誤也可能導致意外刪除重要的文件,比如在清理舊日志時,意外地刪除了數據庫的活動事務日志。
有時可以通過lsof來恢復這些文件。
當進程打開了某個文件時,只要該進程保持打開該文件,即使將其刪除,它依然存在於磁盤中。這意味着,進程並不知道文件已經被刪除,它仍然可以像打開該文件時提供給它的文件描述符進行讀取和寫入。
除了該進程之外,這個文件是不可見的,因為已經刪除了其相應的目錄索引節點inode。
在/proc 目錄下,其中包含了反映內核和進程樹的各種文件。/proc目錄掛載的是在內存中所映射的一塊區域,所以這些文件和目錄並不存在於磁盤中,因此當我們對這些文件進行讀取和寫入時,實際上是在從內存中獲取相關信息。大多數與 lsof 相關的信息都存儲於以進程的 PID 命名的目錄中,即 /proc/1234 中包含的是 PID 為 1234 的進程的信息。每個進程目錄中存在着各種文件,它們可以使得應用程序簡單地了解進程的內存空間、文件描述符列表、指向磁盤上的文件的符號鏈接和其他系統信息。lsof 程序使用該信息和其他關於內核內部狀態的信息來產生其輸出。所以lsof 可以顯示進程的文件描述符和相關的文件名等信息。也就是我們通過訪問進程的文件描述符可以找到該文件的相關信息。
ll /proc/8775/exe
lrwxrwxrwx 1 root root 0 Mar 29 19:02 /proc/8775/exe -> /usr/sbin/sshd
當系統中的某個文件被意外地刪除了,只要這個時候系統中還有進程正在訪問該文件,那么我們就可以通過lsof從/proc目錄下恢復該文件的內容。 假如由於誤操作將/var/log/messages文件刪除掉了,那么這時要將/var/log/messages文件恢復的方法如下:
首先使用lsof來查看當前是否有進程打開/var/logmessages文件,如下:
# lsof |grep /var/log/messages
syslogd 1283 root 2w REG 3,3 5381017 1773647 /var/log/messages (deleted)
從上面的信息可以看到 PID 1283(syslogd)打開文件的文件描述符為 2。同時還可以看到/var/log/messages已經標記被刪除了。因此我們可以在 /proc/1283/fd/2 (fd下的每個以數字命名的文件表示進程對應的文件描述符)中查看相應的信息,如下:
# head -n 10 /proc/1283/fd/2
Aug 4 13:50:15 holmes86 syslogd 1.4.1: restart.
Aug 4 13:50:15 holmes86 kernel: klogd 1.4.1, log source = /proc/kmsg started.
Aug 4 13:50:15 holmes86 kernel: Linux version 2.6.22.1-8 (root@everestbuilder.linux-ren.org) (gcc version 4.2.0) #1 SMP Wed Jul 18 11:18:32 EDT 2007
Aug 4 13:50:15 holmes86 kernel: BIOS-provided physical RAM map:
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 0000000000000000 - 000000000009f000 (usable)
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 000000000009f000 - 00000000000a0000 (reserved)
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 0000000000100000 - 000000001f7d3800 (usable)
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 000000001f7d3800 - 0000000020000000 (reserved)
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 00000000e0000000 - 00000000f0007000 (reserved)
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 00000000f0008000 - 00000000f000c000 (reserved)
如果可以通過文件描述符查看相應的數據,那么就可以使用 I/O 重定向將其復制到文件中,如:
cat /proc/1283/fd/2 > /var/log/messages
對於許多應用程序,尤其是日志文件和數據庫,這種恢復刪除文件的方法非常有用
查找誤刪文件具體步驟
比如查找/var/log/messages
1、使用lsof查看/var/log下面的文件所用的文件描述符
lsof +D /var/log
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
auditd 1138 root 5w REG 253,0 724625 1312257 /var/log/audit/audit.log
rsyslogd 1168 root 1w REG 253,0 1111 1312269 /var/log/messages
rsyslogd 1168 root 2w REG 253,0 55962 1312253 /var/log/cron
rsyslogd 1168 root 4w REG 253,0 1763 1312270 /var/log/secure
mcelog 1493 root 3w REG 253,0 0 1312155 /var/log/mcelog
zabbix_ag 2054 zabbix 1w REG 253,0 263546 1312233 /var/log/zabbix/zabbix_agentd.log
zabbix_ag 2054 zabbix 2w REG 253,0 263546 1312233 /var/log/zabbix/zabbix_agentd.log
zabbix_ag 2058 zabbix 1w REG 253,0 263546 1312233 /var/log/zabbix/zabbix_agentd.log
zabbix_ag 2058 zabbix 2w REG 253,0 263546 1312233 /var/log/zabbix/zabbix_agentd.log
2、找到使用/var/log/messages的進程的pid ,和/var/log/messages所使用的文件描述符次數 這里次數為1
ll /proc/1168/fd
total 0
lrwx------ 1 root root 64 Mar 25 11:00 0 -> socket:[10156]
l-wx------ 1 root root 64 Mar 25 11:00 1 -> /var/log/messages
l-wx------ 1 root root 64 Mar 30 10:24 2 -> /var/log/cron
lr-x------ 1 root root 64 Mar 25 11:00 3 -> /proc/kmsg
l-wx------ 1 root root 64 Mar 30 10:24 4 -> /var/log/secure
3、cat一下文件描述符為1的文件
cat /proc/1168/fd/1
Mar 28 10:37:01 steven rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="1168" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Mar 28 11:49:21 steven fail2ban.filter[2075]: INFO Log rotation detected for /var/log/secure
Mar 28 12:40:12 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 12:40:22 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 28 13:36:27 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 13:36:38 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 28 18:24:48 steven yum[4880]: Installed: sysstat-9.0.4-27.el6.x86_64
Mar 28 19:13:41 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 19:13:53 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 29 12:34:14 steven kernel: e1000: eth0 NIC Link is Down
Mar 29 12:34:23 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 29 19:01:57 steven kernel: e1000: eth0 NIC Link is Down
Mar 29 19:02:09 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
4、進行比較,發現確實是一樣的
at /var/log/messages
Mar 28 10:37:01 steven rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="1168" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Mar 28 11:49:21 steven fail2ban.filter[2075]: INFO Log rotation detected for /var/log/secure
Mar 28 12:40:12 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 12:40:22 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 28 13:36:27 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 13:36:38 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 28 18:24:48 steven yum[4880]: Installed: sysstat-9.0.4-27.el6.x86_64
Mar 28 19:13:41 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 19:13:53 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 29 12:34:14 steven kernel: e1000: eth0 NIC Link is Down
Mar 29 12:34:23 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 29 19:01:57 steven kernel: e1000: eth0 NIC Link is Down
Mar 29 19:02:09 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
5、備份下來
cat /proc/1168/fd/1> /var/log/messages