戰(zhàn):從目錄結(jié)構(gòu)到常用命令)
一、Linux 目錄結(jié)構(gòu) —— 先搞清楚“東西放哪兒”Windows 有 C 盤、D 盤Linux 則是一棵以根/為起點(diǎn)的目錄樹。每個(gè)目錄都有其約定俗成的用途了解之后你就能猜到某個(gè)文件大概在什么地方。根目錄 /所有目錄的起點(diǎn)。只有 root 用戶有寫權(quán)限普通用戶只能讀。另外要注意root 用戶自己的家目錄是 /root不是 /home/root。/bin 和 /sbin —— 命令的“家”/bin 存放的是所有用戶都可以使用的命令比如 ls、cp、ping、grep 這些最常用的工具。而 /sbin 里放的是系統(tǒng)管理員專用命令像 fdisk、ifconfig、reboot、iptables 這類通常只有 root 才能執(zhí)行。所以當(dāng)你執(zhí)行某個(gè)命令提示找不到時(shí)可以看看是不是在 /usr/bin 或 /usr/sbin 下面因?yàn)橛行┌l(fā)行版會(huì)把部分命令放在那里。/etc —— 配置文件大本營幾乎所有的系統(tǒng)配置文件都在這里比如網(wǎng)絡(luò)配置 /etc/sysconfig/network-scripts/主機(jī)名解析 /etc/hosts還有各種服務(wù)的啟動(dòng)腳本。特別提一下 /etc/hosts它相當(dāng)于本地 DNS可以手動(dòng)把域名綁定到 IP如果你們公司內(nèi)網(wǎng)有測試環(huán)境經(jīng)常需要改這個(gè)文件來指定域名解析。/dev —— 一切皆文件設(shè)備也不例外Linux 把硬件設(shè)備也抽象成文件放在 /dev 下。比如硬盤 /dev/sda終端 /dev/tty1。你往 /dev/null 寫數(shù)據(jù)就等于把它扔進(jìn)黑洞這個(gè)技巧在寫腳本時(shí)很常用。/proc —— 系統(tǒng)運(yùn)行的“實(shí)時(shí)快照”這是一個(gè)虛擬文件系統(tǒng)里面存的是當(dāng)前系統(tǒng)狀態(tài)和進(jìn)程信息。比如 /proc/cpuinfo 可以看 CPU 詳情/proc/meminfo 看內(nèi)存。你還可以通過 /proc/進(jìn)程號(hào)/ 查看某個(gè)進(jìn)程的詳細(xì)信息排查問題時(shí)很有用。/var —— 經(jīng)常變化的文件日志文件 /var/log郵件 /var/mail打印隊(duì)列 /var/spool都放在這里。如果你的服務(wù)器磁盤報(bào)警通常要去 /var/log 下看看是不是日志把空間吃滿了。/tmp —— 臨時(shí)文件存放處系統(tǒng)重啟后這個(gè)目錄下的文件會(huì)被清空。所以臨時(shí)下載包、解壓文件都可以放這里用完也不用操心清理。/home —— 普通用戶的家每個(gè)用戶在這里有自己的目錄比如 /home/john用戶登錄后默認(rèn)就進(jìn)入自己的家目錄可以隨意存?zhèn)€人文件。/boot —— 引導(dǎo)加載程序內(nèi)核文件、grub 引導(dǎo)配置都在這里不小心刪了系統(tǒng)就起不來了所以沒事別動(dòng)這個(gè)目錄。/usr —— 用戶程序、庫文件這個(gè)目錄挺大/usr/bin 和 /usr/sbin 補(bǔ)充了 /bin 和 /sbin 沒有的命令/usr/lib 存放庫文件/usr/local 則用來放自己從源碼編譯安裝的軟件比如你手動(dòng)裝 Apache通常會(huì)放在 /usr/local/apache2。/mnt 和 /media —— 掛載點(diǎn)/mnt 通常是臨時(shí)掛載文件系統(tǒng)用的比如你插個(gè) U 盤或掛載 ISO 鏡像/media 則是系統(tǒng)自動(dòng)掛載的可移動(dòng)設(shè)備目錄比如光盤、U 盤。掌握這些目錄后你就能像個(gè)“老司機(jī)”一樣快速定位文件位置而不是到處亂找。二、常用文件操作命令命令的通用格式是命令 -選項(xiàng) 參數(shù)。多個(gè)選項(xiàng)可以合并比如 ls -la。ls —— 查看目錄內(nèi)容ls 是使用頻率最高的命令。加 -a 可以顯示隱藏文件以 . 開頭的文件加 -l 顯示詳細(xì)信息。那個(gè)長串信息里第一列的第一個(gè)字符表示文件類型d 是目錄- 是普通文件l 是軟鏈接。后面的 9 個(gè)字符分成三組分別代表所有者、所屬組、其他人的讀r、寫w、執(zhí)行x權(quán)限。cd —— 切換目錄cd / 回到根目錄cd .. 回到上級(jí)目錄cd ~ 回到自己的家目錄。沒有輸出信息但它確實(shí)把目錄切過去了。pwd —— 看自己在哪當(dāng)你不知道當(dāng)前在哪個(gè)目錄時(shí)敲一下 pwd它會(huì)打印出完整路徑。touch —— 創(chuàng)建空文件touch newfile.txt如果文件不存在就創(chuàng)建存在則更新它的修改時(shí)間。mkdir —— 創(chuàng)建目錄mkdir newdir 創(chuàng)建一個(gè)新目錄。如果想一次性創(chuàng)建多層目錄加 -p 參數(shù)比如 mkdir -p a/b/c。cp —— 復(fù)制cp source target 復(fù)制文件。如果要復(fù)制整個(gè)目錄加 -r 選項(xiàng)比如 cp -r dir1 dir2。mv —— 移動(dòng)或重命名mv oldname newname 其實(shí)就是重命名mv file /target/ 則是移動(dòng)文件。它既移動(dòng)又改名很靈活。rm —— 刪除rm file 刪除文件rm -r dir 刪除目錄。強(qiáng)烈建議加上 -f 強(qiáng)制刪除避免每次都要確認(rèn)。但也要格外小心因?yàn)?Linux 沒有回收站刪了就真沒了尤其是 rm -rf / 這種操作千萬別手滑。cat —— 查看整個(gè)文件適合查看小文件比如 cat /etc/hosts。如果文件很長屏幕會(huì)刷得飛快這時(shí)候要用 more 或 less。more —— 分頁查看more /etc/services 會(huì)一頁一頁顯示按空格翻頁按 Enter 逐行滾動(dòng)按 q 退出。head 和 tail —— 看頭看尾head -20 file 顯示前 20 行tail -30 file 顯示后 30 行。tail -f 特別實(shí)用可以動(dòng)態(tài)跟蹤日志文件的更新比如實(shí)時(shí)查看應(yīng)用日志tail -f /var/log/messages。ln —— 鏈接文件ln -s source target 創(chuàng)建軟鏈接類似 Windows 的快捷方式。軟鏈接可以跨文件系統(tǒng)但原文件刪了鏈接就失效。硬鏈接不加 -s相當(dāng)于給文件起了個(gè)別名兩個(gè)文件內(nèi)容同步變化而且原文件刪除后硬鏈接依然可用但硬鏈接不能跨分區(qū)。三、權(quán)限管理 —— 安全的核心Linux 的權(quán)限管理基于用戶、組、其他人三個(gè)維度。每個(gè)文件都有讀r4、寫w2、執(zhí)行x1三種權(quán)限。chmod —— 修改權(quán)限兩種方式字母法或數(shù)字法。數(shù)字法最常用比如 chmod 755 file表示所有者有 rwx7421所屬組和其他人有 rx541。chmod ux file 給所有者加執(zhí)行權(quán)限chmod g-w file 去掉所屬組的寫權(quán)限。chown —— 改所有者只有 root 可以操作比如 chown tom file 將文件所有者改為 tom。chgrp —— 改所屬組比如 chgrp developers file 將文件所屬組改為 developers。操作目錄時(shí)要注意對目錄來說r 權(quán)限表示可以列出目錄內(nèi)容w 權(quán)限表示可以在目錄里創(chuàng)建刪除文件即使該文件本身沒有寫權(quán)限x 權(quán)限表示可以進(jìn)入該目錄。所以給目錄授權(quán)時(shí)一般至少 755 或 750。四、文件搜索which —— 找命令的位置which ls 會(huì)顯示 /bin/ls它只在 PATH 環(huán)境變量指定的路徑中查找所以只能找命令文件。find —— 最強(qiáng)大的查找工具find 在指定路徑下按各種條件查找文件。比如find /etc -name init 精確匹配文件名為 initfind /etc -name *init* 包含 init 的文件find /etc -name init??? 以 init 開頭且后面正好三個(gè)字符find / -size 204800 查找大于 100MB 的文件單位是 512 字節(jié)塊204800 塊100MBfind / -user sam 查找所有者是 sam 的文件find 還可以組合條件比如 -type f 只查普通文件-type d 只查目錄。這個(gè)命令很強(qiáng)大但搜索速度較慢適合臨時(shí)查找。grep —— 在文件內(nèi)容里搜索grep ftp /etc/services 會(huì)在 /etc/services 文件中找出所有包含 ftp 的行。通常和管道結(jié)合使用比如 ps -ef | grep java找出 Java 進(jìn)程。五、幫助命令man 命令是最好的老師。man ls 會(huì)顯示 ls 的詳細(xì)手冊包括所有參數(shù)和用法。按空格翻頁按 q 退出。如果記不清某個(gè)選項(xiàng)直接 man 一下就行。六、壓縮與解壓Linux 下常見壓縮格式有 .gz、.tar.gz、.zip 等。gzip 和 gunzipgzip file 會(huì)把 file 壓縮成 file.gz但原文件不保留。如果要保留原文件可以用 gzip -c file file.gz。gunzip file.gz 解壓同樣默認(rèn)不保留壓縮包可以用 gunzip -c file.gz file 保留。tar —— 打包兼壓縮最常用tar 本身只是打包不壓縮但配合 -z 可以調(diào)用 gzip 壓縮。語法打包并壓縮tar -zcvf dir1.tar.gz dir1/解壓tar -zxvf dir1.tar.gz參數(shù)解釋-c 創(chuàng)建-x 解包-z 使用 gzip-v 顯示過程-f 指定文件名。記憶技巧czf 是“創(chuàng)建壓縮文件”xzf 是“解壓文件”。zip 和 unzipzip 可以壓縮目錄且保留原文件zip -r test.zip /test。解壓用 unzip test.zip。如果系統(tǒng)提示找不到命令可以用 yum install zip 安裝。七、網(wǎng)絡(luò)與系統(tǒng)管理命令ping —— 測網(wǎng)絡(luò)通不通ping 192.168.1.1 看能不能連通目標(biāo)。注意如果防火墻開著可能 ping 不通可以檢查防火墻狀態(tài)systemctl status firewalld 或 service iptables status。臨時(shí)關(guān)閉防火墻service iptables stop永久關(guān)閉chkconfig iptables offCentOS 6 方式。CentOS 7 以后用 systemctl 管理。ifconfig —— 查看 IP 地址ifconfig -a 顯示所有網(wǎng)絡(luò)接口信息包括沒激活的。現(xiàn)在有些系統(tǒng)推薦用 ip addr但 ifconfig 還是很多人的習(xí)慣。shutdown 和 rebootshutdown -h now 立即關(guān)機(jī)reboot 重啟。也可以用 poweroff。八、輸出重定向和管道 —— 讓命令組合起來輸出重定向ls -l /tmp tmp.msg 將命令結(jié)果覆蓋寫入文件date tmp.msg 將日期追加到文件末尾管道|把前一個(gè)命令的輸出作為后一個(gè)命令的輸入。比如 ls -l /etc | more 分頁顯示ls -l /etc | grep init 只顯示包含 init 的行再配合 wc -l 可以統(tǒng)計(jì)行數(shù)非常靈活。命令替換反引號(hào)ls -l which touch 會(huì)先執(zhí)行 which touch得到 /bin/touch然后 ls -l 查看這個(gè)文件的信息。這在寫腳本時(shí)經(jīng)常用到。九、vi/vim 編輯器vi 是 Linux 內(nèi)置的文本編輯器vim 是它的增強(qiáng)版。初學(xué)者容易懵是因?yàn)樗腥N模式命令模式剛打開時(shí)進(jìn)入可以移動(dòng)光標(biāo)、刪除、復(fù)制等。插入模式按 i、a、o 等鍵進(jìn)入此時(shí)可以編輯文本按 Esc 回到命令模式。末行模式在命令模式下按 : 進(jìn)入可以執(zhí)行保存、退出、查找等操作?;静僮鞅4娌⑼顺雒钅J较掳?Esc 確保回到命令模式然后 :wq不保存退出:q!查找在末行模式下輸入 /關(guān)鍵詞按 n 跳到下一個(gè)匹配項(xiàng)復(fù)制一行yy粘貼p刪除一行dd多用幾次就熟悉了別被它嚇到。十、軟件包管理 —— RPM 和 YUMRPM 是 Red Hat 包管理器安裝命令rpm -ivh 包名.rpm。但 RPM 有個(gè)缺點(diǎn)就是依賴關(guān)系需要手動(dòng)解決經(jīng)常出現(xiàn)“需要 A而 A 又依賴 B”的循環(huán)。所以現(xiàn)在更推薦用 YUM它能自動(dòng)解決依賴。YUM 常用操作安裝yum install 軟件名升級(jí)yum update 軟件名不帶軟件名則升級(jí)全部卸載yum remove 軟件名查詢已安裝rpm -qa | grep 關(guān)鍵詞查看軟件信息yum info 軟件名關(guān)于安裝 JDK 和 Tomcat手動(dòng)解壓方式有時(shí)候我們需要安裝官方 tar.gz 包比如 JDK 和 Tomcat步驟一般是下載 tar.gz 包解壓到指定目錄如 /usr/local/配置環(huán)境變量編輯 /etc/profile加入 JAVA_HOME、PATH 等執(zhí)行 source /etc/profile 讓配置生效對于 Tomcat直接解壓后進(jìn)入 bin 目錄執(zhí)行 ./startup.sh 啟動(dòng)./shutdown.sh 停止。記得給啟動(dòng)腳本加執(zhí)行權(quán)限如果提示權(quán)限不足就 chmod x *.sh。源碼編譯安裝以 Redis 為例如果需要從源碼安裝步驟通常是先安裝編譯工具yum -y install gcc gcc-c make解壓源碼包進(jìn)入目錄執(zhí)行 ./configure有些軟件不需要比如 Redis 直接 makemakemake install有時(shí)候編譯會(huì)報(bào)錯(cuò)比如缺少依賴庫根據(jù)提示安裝對應(yīng)的開發(fā)包即可。還有一個(gè)常見問題用 yum 安裝時(shí)提示 “NOKEY” 警告這是因?yàn)槿鄙?GPG 密鑰可以導(dǎo)入對應(yīng)的公鑰例如 rpm --import http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-5。