layout: "post"
title: "linux基本命令"
category: "軟件應用"
tags:
date: "2016-09-06 16:56"
本文主要學習總結,使用 linux CLI 的基本命令,這邊不以任何發行版為例,介紹的是絕大多數 linux 發行版上面都會含有的 CLI 軟件,需要注意的是,這邊是以完整安裝為基礎的,部分命令可能在最小安裝上面無法使用。目前 安裝 linux CLI 后可以使用的命令超過上千個,但最常用的命令一般只有 80 個左右,由于篇幅有限,本文會選取 80 個中的幾十個最基本必須掌握的命令進行羅列和簡介,不會展開詳解,詳細內容還是需要查看 manual 或者借助搜索引擎。
shell 命令的一般格式為:command [option] [arguments]。具體如下:
- command 表示命令,command 事實上是一個可執行的軟件,實上 linux 中所謂的命令絕大多數是預裝的軟件,因為地址被寫入了全局,因此可以直接通過軟件名來調用該軟件。
- option 表示選項,命令行中,選項是包含一個或者多個字母的字符串,一般在選項前有一個“-”用于區分參數,如:-l,-s等,這些都是設計程序時就已經被寫在軟件中的,用于方便用戶選擇軟件執行的模式,選項這個詞是并不是平白無故的,因為只有設計軟件時被采用的一些字符才可以被稱為選項,因此使用某個命令時,我們重點需要查看有哪些選項可以使用,以及使用后會有什么樣的效果。
- arguments 為參數,很多命令都可以接受參數,參數就是選項后緊跟的一個或多個字符串,這些字符串制定了命令的操作對象,如文件或者目錄等。如:ls -al /etc ,這邊 /etc 就是一個參數,而 -al 則是一個選項。
因為 linux 中的每個軟件都是不同開發者提供的,因此表示一種功能模式的參數卻往往不盡相同,如:有的遞歸是 -r 而有的是 -R 等等。因此你如果需要使用某個軟件時,需要以 manual 為準,而不是想當然的認為某個選項一定表示某個功能。
文件管理
文件管理主要包含了,復制,移動,更改路徑等等
ls
顯示指定工作目錄下的內容,常用參數:
- -a 可以顯示全部內容包含隱藏文件。
- -l 用于列出文件的詳細信息。
pwd
打印當前工作目錄(print working directory),使用該命令后,你所在工作目錄的絕對路徑將會被打印出來。
cd
改變當前工作目錄(change directory),后面可以用絕對路徑或者相對路徑。
mkdir
創建新目錄,一般為 mkdir + 目錄名
。
mv
將文件從一個位置移到另一個位置,可以用絕對路徑或者相對路徑,如:mv source /tmp/source 表示將當前目錄下的 source 文件移到根目錄下的 tmp 文件夾中。值得注意的是,mv 可以用來重命名,linux 中往往是通過 mv 來更改文件名稱的。
cp
cp 命令的格式類似于 mv 命令,但相比而言會比 mv 多不少選項/模式,常用參數如: -r 用于遞歸復制文件夾中的內容。
rm
刪除命令,用于刪除文件等,一般常用 -rf 用于強制遞歸刪除文件夾等。
touch
用于改變文件的時間戳(timestamp),注意該命令是改變文件時間的,并不是用來創建文件的,之所以我們用它來創建文件僅是因為在改變文件時間戳時,如果該文件不存在 touch 會新建一個空白的文件,所以創建文件是 touch 的一個附加功能。所以我們就不難理解在 touch 一個已經存在的文件時,原文件不會被改動,改動的是該文件的時間。
ln
ln 用來生成鏈接文件,提到鏈接,相信用過電腦的朋友對 windows 下的快捷方式都會有影響,在 linux 中我們將 windows 中的快捷方式稱為軟連接。
linux 下有兩種鏈接:
- 硬鏈接:文件 A 是文件 B 的硬鏈接,則 A 的目錄項中的 inode 節點號與 B 的目錄項中的 inode 節點號相同,即一個 inode 節點對應兩個不同的文件名,兩個文件名指向同一個文件,A 和 B 對文件系統來說是完全平等的。如果刪除了其中一個,對另外一個沒有影響。每增加一個文件名,inode 節點上的鏈接數增加一,每刪除一個對應的文件名,inode 節點上的鏈接數減一,直到為 0,inode 節點和對應的數據塊被回收。注:文件和文件名是不同的東西,rm A 刪除的只是 A 這個文件名,而 A 對應的數據塊(文件)只有在 inode 節點鏈接數減少為 0 的時候才會被系統回收。我們這邊提到的是 inode 節點,而并非路徑,注意這點和軟鏈接的區別。
- 軟鏈接:等同于 windows 的快捷方式,A 是 B 的軟鏈接(A 和 B 都是文件名),A 的目錄項中的 inode 節點號與 B 的目錄項中的 inode 節點號不相同,A 和 B 指向的是兩個不同的 inode,繼而指向兩塊不同的數據塊。但是 A 的數據塊中存放的只是 B 的路徑名(可以根據這個找到B的目錄項)。A 和 B 之間是“主從”關系,如果 B 被刪除了,A 仍然存在(因為兩個是不同的文件),但指向的是一個無效的鏈接。注意:軟鏈接的 A 和 B 是對應的不同 inode 的,而 A 存儲的僅是 B 的路徑(并不是 inode 的信息),因此我們如果刪除 B 文件后,A 會找不到鏈接方向,而如果我們再創建 B 后,A 又會有了新的目標,而事實上,再次創建的 B 和原來不是同一個 inode,已經和原來的 B 沒有任何聯系了。
file
直接使用該命令可以查看文件類型的詳細信息,linux 中是不強制要求有后綴名的,但通過 file 我們可以看出文件類型。
文件查找
which
查找某指令名稱/內置程序的完整路徑。如:which updatedb --> /usr/bin/updatedb。
whereis
只能用于查找二進制文件,源文件以及用戶手冊文件。因此 whereis 搜索出來的內容要比 which 多些。
find
普通的查找命令,用于查找某個名稱文件,后面可以跟多個選項,格式為 find+路徑+選項+文件名
,如 find . -name a.c
即查找當前目錄下名稱為 a.c 的文件,find 最大的特點就是速度慢,其次 find 查找如果不適用通配符的話默認為精確查找,這點注意和 locate 有很大的不同,因此查找以 ad 開頭的文件需要執行:find . -name ad*
。
locate
find 每次會在目錄下進行真正的搜索,一般這樣做時間長,效率低。Linux 上更加優異的搜索命令,locate 會直接定位某個文件的位置,原理是 locate 尋找文件是通過 /var/lib/mlocate/ 數據庫中的內容查找,不用去硬盤中檢索,但往往新的變動對 locate 查找的數據庫更新不及時,這是我們需要用 updatedb 命令手動更新(updatedb 需要 root 權限),locate 是默認為 *name*
的查找方式。如果需要精確查找,需要使用如下格式:locate -b '\NAME'
用戶
passwd
passwd 用戶修改用戶密碼,后面如果加用戶名的話,可以直接修改該用戶的登入密碼,前提是你必須知道該原始登入密碼。
su
su 主要用于改變用戶登入身份,即快速切換登入用戶,普通用戶切換需要輸入登錄用戶的密碼,root 可以任意切換別的用戶。
who
顯示登錄的所有用戶的信息,whoami 只顯示自己的登錄信息,而 uname 表示的是打印系統信息和用戶名等無關。
w
環境變量
Linux中set,env和export這三個命令的區別
set
命令顯示當前shell的變量,包括當前用戶的變量;
env
命令顯示當前用戶的變量;
export
命令顯示當前導出成用戶變量的shell變量。
每個shell有自己特有的變量(set)顯示的變量,這個和用戶變量是不同的,當前用戶變量和你用什么shell無關,不管你用什么shell都在,比如HOME,SHELL等這些變量,
但shell自己的變量不同shell是不同的,比如BASH_ARGC, BASH等,這些變量只有set才會顯示,是bash特有的,export不加參數的時候,顯示哪些變量被導出成了用戶變量,因為一個shell自己的變量可以通過export “導出”變成一個用戶變量。
壓縮和解壓
zip、unzip
zip 打包壓縮文件,zip 是一種比較古老的壓縮方式,各個個系統平臺上面都基本支持,但壓縮率較低。
gzip
當你使用 gzip 迚行壓縮時,在預設的狀態下原本的檔案會被壓縮成為 .gz 結尾的文件, 源文件就不再存在了。gzip 要比 zip 壓縮效率高的多,但使用 windows 時,gz 文件未必可以被解壓。
bzip2
bzip2 則比 gzip 更加先進,可以提供更高的壓縮比,用法基本和 gzip 一致。
tar
雖然 gzip 和 bzip2 也能夠針對目錄來進行壓縮, 不過,這兩個命令對目錄的壓縮指的是將目錄內的所有檔案 "分別" 迚行壓縮,而一般我們其實是需要一個進行過打包和壓縮過的文件。tar 可以將多個目錄或者文件打包成一個大的文件,同時還可以調用 gzip/bzip 對打包文件進行壓縮。
dd
該命令的功能是 轉換并且復制一個文件。
cpio
終端和文件查看
clear
cat
less
more
vim
diff
grep
系統信息查看:
注意:以下命令如果在ubuntu下可能都需要root權限才可以執行。
CPU
- lscpu : 查看的是cpu的統計信息.
- cat /proc/cpuinfo : 可以知道每個cpu信息,如每個CPU的型號,主頻等。
內存
- cat /proc/meminfo : 查看內存詳細使用
- free -m : 概要查看內存情況
- grep MemTotal /proc/meminfo : 查看內存總量
- grep MemFree /proc/meminfo : 查看空閑內存量
硬盤
- lsblk : 查看硬盤和分區分布
- fdisk -l : 如果要看硬盤和分區的詳細信息
- df -h : 查看各分區使用情況
- cat /proc/loadavg : 查看系統負載磁盤和分區
網卡
- lspci | grep -i 'eth' : 查看網卡硬件信息
- ifconfig -a : 查看系統的所有網絡接口
- route -n : 查看路由表
其他硬件信息
- lspci : 查看pci信息,即主板所有硬件槽信息。
- dmidecode -t bios : 查看bios信息
- dmidecode -q : dmidecode以一種可讀的方式dump出機器的DMI(Desktop Management Interface)信息。這些信息包括了硬件以及BIOS,既可以得到當前的配置,也可以得到系統支持的最大配置,比如說支持的最大內存數等。
- dmesg | grep IDE : 查看啟動時IDE設備檢測狀況網絡
操作系統
- uname -a 或 cat /proc/version : 查看內核/操作系統/CPU信息
- lsb_release -a 或 cat /etc/issue(此命令也適用于所有的Linux發行版): 查看Linux系統版本
- head -n 1 /etc/issue : 查看操作系統版本
- lsmod : 列出加載的內核模塊
- hostname : 查看計算機名
- free -m : 查看內存使用量和交換區使用量
- uptime : 查看系統運行時間、用戶數、負載
- ps -ef : 查看所有進程
- top : 實時顯示進程狀態用戶
- w : 查看活動用戶
- id <用戶名> : 查看指定用戶信息
- last : 查看用戶登錄日志
- cut -d: -f1 /etc/passwd : 查看系統所有用戶
- cut -d: -f1 /etc/group : 查看系統所有組
- crontab -l : 查看當前用戶的計劃任務服務
- chkconfig –list : 列出所有系統服務
- chkconfig –list | grep on : 列出所有啟動的系統服務程序
date
顯示或者修改系統時間和日期,只有超級用戶可以用 date 設置時間,一般用戶只可以顯示時間。
uptime
dmesg
last
free
ps
top
分屏功能
xrandr 命令,用于分屏驅動多個顯示器,一般是底層控制的,雖然是顯示功能,但分屏并非GUI的獨享,圖形界面的分屏控制大都是調用 xrandr 這個軟件。
管理類
du
df
fsck
sync
mount、unmount
top
網絡類
ifconfig
netstat
traceroute
telnet
wget
ping
nslookup
ip
route
ssh
scp
To be continued...
參考鏈接:
http://www.2cto.com/os/201306/223758.html
http://www.ha97.com/2987.html
http://blog.csdn.net/lhf_tiger/article/details/7102753
http://www.cnblogs.com/ggjucheng/archive/2013/01/14/2859613.html