系統管理員常用的Linux命令
整理Linux的一些基本系統管理命令作為備忘
=========================================================================
查看文件或編輯文件:
=========================================================================
查看當前目錄下文件、文件夾及讀寫執行權限
$ ll
輸出說明:(以mnt/這條記錄為例)
第一列(drwxrwxr-x)標識文件類型和文件權限
第二列(5)標識文件鏈接個數
第三列(root)標識文件所有者
第四列(bme319-users)標識文件所在組
第五列(4096)表示文件長度(大小)
第六至八列(Aug 3 20:54)文件最後更新時間
第九列表示文件名稱
第一列第一個字符表示文件類型:
d |
目錄 |
- |
文件 |
l |
鏈接 |
s |
socket |
p |
named pipe |
b |
block device |
c |
character device |
第一列2~10字符每三個字符一組,分別表示文件所有者、文件所在組、其他用戶的權限:
rwx(read, write, execute) 顯示為有權限,-表示沒有權限,以mnt/為例,表示文件所有者root擁有讀寫執行權限,所在組bme319-users擁有讀寫執行權限,其他用戶有讀和執行權限,沒有寫權限。需要說明的是,用戶需要有執行權限才能進入文件夾(或目錄)
=========================================================================
查看文件最後一部分內容:
$ tail
查看文件最後10行內容:
$ tail mongod.log
查看文件最後20行內容:
$ tail -n 20 mongod.log
當文件有新內容時打印出來:
$ tail -f mongod.log
適合在執行應用程序時查看日誌輸出
=========================================================================
查看或合並文件
$ cat
查看文件:
$ cat mongod.log
標註文件行號:
$ cat -n mongod.log
兩行以上的空白行只顯示一行:
$ cat -s mongod.log
合並文件:
把log1.log的內容加上行號後輸入到log2.log裏:
$ cat -n log1.log log2.log
把log1.log和log2.log中的內容除空白行外加上行號輸入到log3.log裏:
$ cat -b log1.log log2.log log3.log
=========================================================================
編輯文件
$ sudo vim /etc/mongod.conf
進入編輯頁面後,即可使用vim的一些用法編輯文件:
i 進入編輯插入模式,點擊Esc可以返回vim
x 刪除光標後的一個字符
:q 退出
:wq 保存並退出
:q! 強制退出(不保存)
具體其他編輯方法請查看vim用法
=========================================================================
權限相關:
更改文件或目錄權限:
$ chmod
read權限賦值為4,write權限賦值為2,execute權限賦值為1,更改權限時,將需要賦予的權限相加,共有3個數字,分別表示所有者、所有組、其他用戶。例如:對文件mongod.conf,所有者有讀寫執行權限、所有組擁有讀和執行權限、其他用戶只有讀權限,那麽使用如下命令:
$ chmod 754 mongod.conf
對於目錄,希望將其子目錄都進行更改,只需要增加-R操作:
$ chmod -R 755 /mnt
=========================================================================
更改文件或目錄的所有者:
$ chown (change owner)
把文件mongod.conf的所有者更改為bme319
$ chown bme319 mongod.conf
同樣可以使用 -R操作:
$ chown -R bme319 /mnt
=========================================================================
更改文件或目錄的所有群組:
$ chgrp (change group)
與上面用法類似:
$ chgrp bme319 mongod.conf $ chgrp -R bme319 /mnt
=========================================================================
curl命令:
這是一個網站開發的十分有用的命令
查看網頁源代碼:
$ curl www.sina.com
自動跳轉(有些網址是自動跳轉的):
$ curl -L www.sina.com
可以跳轉到www.sina.com.cn
顯示http response頭信息:
i大寫只顯示頭信息,小寫顯示頭信息及網頁代碼
$ curl -i www.sina.com
$ curl -I www.sina.com
顯示http通信過程:
$ curl -v www.sina.com
或者更詳細的通信過程:
$ curl –trace output.txt www.sina.com
或者
$ curl –trace-ascii output.txt www.sina.com
發送表單信息:
GET請求:
$ curl example.com/form.cgi?data=xxx
POST請求:
$ curl -X POST –data “data=xxx” example.com/form.cgi
如果需要將數據進行表單編碼:
$ curl -X POST –data-urlencode “date=April 1” example.com/form.cgi
註意到上面GET時直接使用$ curl [url]而POST時需要-X參數,事實上,-X參數可以指定任意HTTP動詞:
$ curl -X DELETE www.example.com
如果網域需要HTTP認證,可以用--user參數:
$ curl –user name:password example.com
或者只輸入用戶名,然後會有提示輸入密碼:
$ curl –user name example.com
若需要模擬客戶端設備,需要用到user agent字段,服務器有可能根據這個字段返回不同的數據格式。比如iPhone4的User Agent是:
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7
那麽使用curl可以這樣模擬:
$ curl –user-agent “[User Agent]” [URL]
設置代理:
$ curl -x proxyserver.test.com:1111 http://google.com
FTP服務器上傳或下載文件:
列出文件或目錄:
$ curl -u ftpuser:ftppass -O ftp://ftpserver/dir/
下載文件:
$ curl -u ftpuser:ftppass -O ftp://ftpserver/dir/file.html
上傳文件myfile.log到服務器:
$ curl -u ftpuser:ftppass -T myfile.log ftp://ftpserver
同時上傳多個文件:
$ curl -u ftpuser:ftppass -T “{file1, file2}” ftp://ftpserver
從表中輸入獲取內容保存到服務器指定文件中:
$ curl -u ftpuser:ftppass -T – ftp://ftpserver/myfile.log
上傳或下載(保存)文件:
將文件下載到本地並命名為myfile.html
$ curl -o myfile.html http://example.com/file.html
將文件下載到本地而且不重新命名:
$ curl -O http://example.com/file.html
也可以使用>進行轉向輸出
同時獲取多個文件:
$ curl -O URL1 -O URL2
-C選項可以對大文件使用斷點續傳功能:
若在下載完成前結束進程:
$ curl -O http://example.com/file.html
通過添加-C操作繼續對文件進行下載,已經下載過的文件不會被重新下載:
$ curl -C - -O http://example.com/file.html
上傳文件:
$ curl –form [email protected] http://example.com/dir
=========================================================================
python -m json.tool
使用curl後,API調用的輸出可讀性很差,JSON格式的數據都堆在一行,若希望將其格式成換行,可以使用python -m json.tool來縮進和組織JSON。需要使用管道機制,將JSON文件的輸出作為輸入,寫入到python -m json.tool命令行。
$ curl http://example.com/api/getjson/ | python -m json.tool
=========================================================================
grep
grep能使用特定模式匹配(包括正則表達式)搜索文本。如果在另一條命令的輸出中尋找特定的模式,grep會高亮顯示相關的行。可以使用這條命令來搜索日誌文件以及特定進程等:
$ cat mongod.log | grep “port 27017”
=========================================================================
ps
ps可以查看進程的各種狀態信息,-e操作表示列出所有,-f選項表示列出詳細信息,因此:
$ ps -ef
即可檢查服務器運行的所有進程。更常用的是找到具體某個進程的信息,可以和grep連用:
$ ps -ef | gref “mongo”
=========================================================================
env
env用於列出所有的環境變量及為其賦值。在故障排除期間,可能會需要檢查是否有錯誤的環境變量阻止應用程序啟動。檢查程序主機上設置的環境變量:
$ env
=========================================================================
top
top用於顯示系統中各個進程的信息和資源占用情況,類似於Windows的任務管理器。使用該命令可以確定哪些進程正在運行,以及它們小號了多少內存和CPU。
按下C鍵可以查看啟動紅線標出的進程的詳細啟動命令:
=========================================================================
netstat
netstat用於顯示網絡狀態信息。該命令可顯示正在使用的網絡端口及其傳入連接。同樣的,一般與grep連用:
$ netstat -tupln | grep 27017
操作符說明:
-t -u (tcp, udp)只顯示這兩種協議的結果; -p 顯示PID或程序名稱 -l 只顯示監聽端口 -n 不解析域名(只顯示IP)
=========================================================================
ip address
用於顯示應用程序的主機接口和IP地址。查看某接口的IP地址可以使用show。查看本機IP地址可以使用以下命令:
$ ip address show eth0
如果需要查看所有容器和主機的地址,可以使用以下命令:
$ ifconfig
=========================================================================
lsof
lsof(list open files)用於列出當前系統打開的文件。在Linux系統中,幾乎任何和系統的交互都被視為一個文件。因此,如果應用程序寫入文件或進行網絡連接,lsof會把這個交互映射為一個文件。與netstat類似,可使用lsof檢查偵聽端口。需要註意的是,可能需要root權限才能查看到所有進程,尤其是當進程不是由當前用戶運行的時候。
$ sudo lsof -i tcp:27017
操作符-i選擇了所有ipv4/ipv6的進程。如果根據進程ID(PID)選擇:
$ sudo lsof -p 3235
可以查看該進程的所有信息。
=========================================================================
df
使用df命令顯示空閑的磁盤空間(display free disk space)以排查磁盤空間問題。為了使結果可讀性較好,使用-h操作:
$ df -h
即可獲取磁盤空間信息,包括已用和未用等。
=========================================================================
du
也是用於查看使用空間的,但是與df命令不同的是du命令是對文件和目錄磁盤使用的空間的查看,要獲取有關哪些文件在目錄中使用磁盤空間的更多詳細信息,可以使用du命令。比如要獲得總大小可用-s操作,加上-h可以使結果更可讀:
$ sudo du -sh /mnt/*
以上命令是為了獲取/mnt目錄下所有目錄或文件大小。
=========================================================================
id
該命令可以檢查當前用戶身份,包括UID(user ID), GID(group ID), groups信息。使用方法:
$ id
或
$ id user_name
=========================================================================
dig/nslookup
dig 命令是常用的域名查詢工具,可以用來測試域名系統工作是否正常。域名服務器(DNS)有助於將 URL 解析為一組應用程序服務器。然而,你會發現有些 URL 不能被解析,這會導致應用程序的連接問題。
=========================================================================
iptables
iptables 用於阻止或允許 Linux 主機上的流量,用於 IP 包過濾器管理,類似於網絡防火墻。此工具可阻止某些應用程序接收或發送請求。更具體地說,如果應用程序難以訪問另一個端點,可能已被 iptables 拒絕流量訪問該端點。查看iptables規則:
$ sudo iptables -S
=========================================================================
sestatus
通常會在企業管理的應用程序主機上使用 SELinux(一個 Linux 安全模塊)。SELinux 對主機上運行的進程提供最低權限的訪問,防止潛在的惡意進程訪問系統上的重要文件。某些情況下,應用程序需要訪問特定文件,但可能會發生錯誤。要檢查 SELinux 是否阻止了應用程序,使用 tail 和 grep 在 /var/log/audit 日誌記錄中查找”denied”(被拒絕)的信息。否則,使用 sestatus 來檢查是否啟動了 SELinux。
=========================================================================
history
當你使用大量的命令進行測試和調試時,可能會忘記有用的命令。每個 shell 都有一個 history 命令的變體。它可顯示自會話開始以來使用的命令的歷史記錄。可以使用 history 來記錄用來排除應用程序故障的命令。history 命令用於顯示指定數目的指令命令,讀取歷史命令文件中的目錄到歷史命令緩沖區和將歷史命令緩沖區中的目錄寫入命令文件。
$ history
該命令可以查看歷史命令列表,使用!加指定命令的序號可以執行對應命令:
$ !288
執行歷史命令列表中序號為288的命令。
=========================================================================
參考:
https://mp.weixin.qq.com/s/pEwNyYPfZ18h5vUxA_TQsg
http://www.ruanyifeng.com/blog/2011/09/curl.html
系統管理員常用的Linux命令