天天看點

linux常用指令大全(linux基礎指令入門到精通+指令備忘錄+面試複習+執行個體) 

作者:藍藻(羅藍國度)

建立時間:2018.7.3

編輯時間:2019.5.13

前言

本文特點

  • 授之以漁:了解指令學習方法、用途:不再死記硬背,拒絕漫無目的;
  • 準确無誤:所有指令執行通過(環境為centos7),拒絕複制粘貼;
  • 實用性高:指令多為實際工作中用到的,執行個體講解,拒絕純理論;
  • 條理清晰:分類歸納,快速找到想要的指令,拒絕天馬行空;
  • 總結性強:隻列常用文法,易錯情況強調,拒絕照搬照套。

學前須知

  • 适用人群:開發、測試、運維
  • 文檔用途:linux入門學習、指令備忘錄、面試複習
  • 學習途徑:書籍(鳥哥的Linux私房菜)、視訊:慕課網等、百度谷歌搜尋、qq群等
  • 學習環境:虛拟機VirtualBox+centos7
  • 學習記錄:多動手,多聯想,多記錄,特别是遇到問題時
  • 遇到問題:百度谷歌搜尋、系統日志(/var/log/)、qq群

學前理論

  • linux主要特征 :一切且檔案(目錄、硬碟等都是檔案);硬體都在/dev 目錄,如硬碟、U盤為/dev/sd[a-d]; /dev/sr0(/dev/cdrom)是光驅的裝置名(df指令檢視),為裝置檔案,代表的是光驅本身,得把這個裝置挂載到目錄下(一般為/mnt)(檔案系統的臨時挂載點),才能對裝置上的檔案進行讀寫等操作;
  • 不懂的指令 :man 指令(查用法、全稱),隻記得關鍵詞,可用man -k 關鍵詞;
  • Linux指令常用結構 :

    Command [-option] [argument]

    Command:即是要運作的指令的本身,說白了就是一個軟體(程式);

    Option:是選項(可選),選項是控制指令運作狀态和行為的(可多個選項一起,如df -hT);

    Argument:是參數(可選),是指令要操作對象如檔案、路徑、資料、目錄等;

    在指令的第一部分按[tab]鍵一下為[指令補全],兩下為所有指令選擇,在非第一部分按[tab]鍵兩下為[檔案補全];

  • linux指令區分大小寫;

開關機

  • sync :把記憶體中的資料寫到磁盤中(關機、重新開機前都需先執行sync)
  • shutdown -r now或reboot :立刻重新開機
  • shutdown -h now :立刻關機
  • shutdown -h 20:00 :預定時間關閉系統(晚上8點關機,如果現在超過8點,則明晚8點)
  • shutdown -h +10 :預定時間關閉系統(10分鐘後關機)
  • shutdown -c :取消按預定時間關閉系統

系統資訊

  • who am i :檢視目前使用的終端
  • who 或 w : 檢視所有終端
  • uname -m :顯示機器的處理器架構(如x86_64)
  • cat /proc/version :檢視linux版本資訊
  • uname -r :顯示正在使用的核心版本
  • lsb_release -a :檢視系統發行版本(如CentOS7)
  • rpm -qa | grep kernel-devel :檢視kernel-devel版本(安裝軟體時編譯核心用,故需要保持核心版本一緻性)
  • yum install -y "kernel-devel-uname-r == $(uname -r)":安裝和Linux核心版本比對的kernel-devel
  • date :顯示系統日期 (date +%Y/%m/%d : 顯示效果如2018/01/01)
  • date 070314592018.00 :設定時間(格式為月日時分年.秒 )
  • clock -w :将時間修改儲存到 BIOS
  • cal 2018 :顯示2018年的月曆表
  • clear :清空指令行
  • ifconfig :顯示或設定網卡(查ip等)(類似windows中ipconfig)
  • ping -c 3 www.baidu.com :測試百度與本機的連接配接情況( -c 3表示測試3次)
  • cat /proc/cpuinfo :顯示CPU的資訊
  • cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l :檢視實體CPU個數
  • cat /proc/cpuinfo| grep "cpu cores"| uniq :檢視每個實體CPU的核數
  • cat /proc/cpuinfo| grep "processor"| wc -l :檢視邏輯CPU個數即線程數

系統性能

  • top :動态實時顯示cpu、記憶體、程序等使用情況(類似windows下的任務管理器)
  • top -d 2 -p 7427 :-d為畫面更新的秒數,預設5秒,-p為指定程序pid的資訊
  • vmstat 2 10 :每隔2秒采集一次伺服器狀态,采集10次(檢視記憶體、io讀寫狀态、cpu)
  • free -h :檢視系統記憶體及虛拟記憶體使用情況
  • df -h :顯示磁盤的空間使用情況
  • iostat :可查io讀寫、cpu使用情況
  • sar -u 3 5 :檢視cpu使用情況(3秒一次,共5次)
  • sar -d 2 3 :評估磁盤性能
  • ps aux|grep firefox :擷取火狐的程序号(PID)(可檢視程序占用cpu、記憶體百分比及程序觸發指令的路徑)
  • kill -9 程序号 :強制殺死程序
  • systemctl :檢視正在運作的服務

檔案和目錄

​ cd:是Change Directory的縮寫,用來切換工作目錄,文法:cd [相對或絕對路徑或特殊符号]
  • cd :進入該使用者的主目錄 ~(root使用者為/root,其他使用者為/home/使用者名)
  • cd .. :傳回上一級目錄(注意要空格)
  • cd - :傳回上次所在目錄
  • cd / :傳回根目錄 (絕對路徑)
  • cd ./目錄1/目錄2 :進入目前目錄下的子目錄(相對路徑)
  • pwd :顯示工作路徑(Print Working Directory 的縮寫)
    ​ls:是List的縮寫,用于列出目錄下的檔案,文法:

    ls [選項][目錄或檔案名]

  • ls -a :列出檔案下所有的檔案,包括以“.“開頭的隐藏檔案
  • **ls -lh *.log** :列出檔案的詳細資訊(.log結尾,*為通配符代表任意多個字元)
  • file 檔案或目錄 :顯示檔案的類型(目錄、text、zip、shell腳本等)
  • mkdir dir1 :建立目錄(dir1)(mkdir為make directory的縮寫)
  • mkdir -p ./dir1/dir2 :遞歸建立目錄(-p:父目錄不存在時,同時建立)
  • touch a.txt :建立檔案a.txt
    ​rm:可以删除一個目錄中的一個或多個檔案或目錄,也可以将某個目錄及其下屬的所有檔案及其子目錄均删除掉; 文法:rm (選項)(參數)(注:如果參數中含有目錄,則必須加上-r選項);
  • rm 檔案 :删除檔案
  • rm -r 目錄或檔案 :删除目錄(及目錄下所有檔案)(非空也可以)
  • rm -rf 目錄或檔案 :強制删除,如:rm -rf * 為删除目前目錄下所有檔案

    ​mv:是move的縮寫,可以用來剪切移動檔案、目錄或者将檔案改名;

    文法:mv 源檔案 目标檔案(改名)或目錄(移動);

  • mv a b :移動或者重命名一個檔案或者目錄(存在即移動目錄或覆寫檔案,不存在即改名)
  • mv /opt/git/g /opt/a :移動g到opt目錄下并改名為a(a目錄不存在,若存在則為移動g到a目錄下)
  • mv -t ./test a.txt b.txt :移動多個檔案到某目錄下

    ​cp:複制檔案或目錄;cp指令可以将單個或多個檔案複制到一個已經存在的目錄下;

    常用:cp -ai 檔案或目錄 目标目錄;

  • cp -ai /opt/abc /opt/git/ :複制abc目錄(或檔案)到git目錄下(選項a表示檔案的屬性也複制、目錄下所有檔案都複制;i表示覆寫前詢問)

    ​ln:link的縮寫,用于建立硬(軟)連結,常用于軟體安裝時建軟連結(類似快捷方式)到PATH;

    文法:ln [-s] 源檔案 目标檔案

  • ln -s /opt/a.txt /opt/git/ :對檔案建立軟連結(快捷方式不改名還是a.txt)
  • ln -s /opt/a.txt /opt/git/b :(快捷方式改名為b)(下面的一樣可以改名)
  • ln -s /opt/mulu /opt/git/ :對目錄建立軟連結
  • ln /opt/a.txt /opt/git/ :對檔案建立硬連結

檔案權限

  • chmod [-R] 777檔案或目錄 :設定權限(chmod a+rwx a=chmod ugo +rwx a=chmod 777 a)

    ​注: r(read)對應4,w(write)對應2,x(execute)執行對應1;

    -R:遞歸更改檔案屬組,就是在更改某個目錄檔案的屬組時,如果加上-R的參數,那麼該目錄下的所有檔案的屬組都會更改)

  • chmod [{ugoa}{+-=}{rwx}][檔案或目錄]

     :如chmod u-w,g+x,o=r test.txt為user(擁有者)去掉寫權限,group(所屬組)加上執行權限,other(其他人)權限等于隻讀;
  • chown [-R] admin:root /opt/ :變更檔案及目錄的擁有者和所屬組(-R遞歸處理所有檔案和檔案夾,admin為擁有者,root為所屬者)

檔案查找

  • locate a.txt :在系統全局範圍内查找檔案名包含a.txt字樣的檔案(比find快);
​locate:原理是updatedb會把檔案系統中的資訊存放到資料庫databases中(但一般一天才執行一次,是以locate找不到新建立的檔案,需要先手動執行updatedb,再執行locate),locate從資料庫中讀資料;

​ find:在目錄結構中搜尋檔案,并執行指定的操作

文法:find pathname -options [-print -exec ...]

pathname :為 find指令所查找的目錄路徑。例如用.來表示目前目錄,用/來表示系統根目錄(find查找範圍為目标目錄及其子目錄所有檔案及目錄);

-exec: find指令對比對的檔案執行該參數所給出的shell指令。相應指令的形式為'command' { } ;,注意{ }和;之間的空格;

-print: find指令将比對的檔案輸出到标準輸出;

  • find /home -mtime -2 :在/home下查最近2*24小時内改動過的檔案
  • find . -size +100M :在目前目錄及子目錄下查找大于100M的檔案
  • find . -type f :f表示檔案類型為普通檔案(b/d/c/p/l/f 分别為塊裝置、目錄、字元裝置、管道、符号連結、普通檔案)
  • find . -mtime +2 -exec rm {} ; :查出更改時間在2*24小時以前的檔案并删除它**
  • find . -name '*.log' -exec grep -i hello {} \; -print

     :在目前目錄及子目錄下查出檔案名字尾為.log的檔案并且該檔案内容包含了hello字樣并列印,-exec 指令 {} \表示對查出檔案操作,-i表示不區分大小寫;
  • find . -name '*.log'|grep hello

     :在目前目錄及子目錄下查出檔案名字尾為.log的檔案并且檔案名包含了hello字樣(grep用來處理字元串);
  • grep -i 'HELLO' . -r -n :在目前目錄及子目錄下查找檔案内容中包含hello的檔案并顯示檔案路徑(-i表示忽略大小寫)
  • which java :在環境變量$PATH設定的目錄裡查找符合條件的檔案,并顯示路徑(查詢運作檔案所在路徑)
  • whereis java :檢視安裝的軟體的所有的檔案路徑(whereis 隻能用于查找二進制檔案、源代碼檔案和man手冊頁,一般檔案的定位需使用locate指令)

檢視檔案的内容

  • cat [-n] 檔案名 :顯示檔案内容,連行号一起顯示
  • less 檔案名 :一頁一頁的顯示檔案内容(搜尋翻頁同man指令)
  • head [-n] 檔案名 :顯示檔案頭n行内容,n指定顯示多少行
  • tail [-nf] 檔案名:顯示檔案尾幾行内容,n指定顯示多少行,f用于實時追蹤檔案的所有更新,常用于查閱正在改變的日志檔案(如tail -f -n 3 a.log 表示開始顯示最後3行,并在檔案更新時實時追加顯示,沒有-n預設10行)
  • sed -n '2,$p' ab :顯示第二行到最後一行;
  • sed -n '/搜尋的關鍵詞/p' a.txt :顯示包括關鍵詞所在行
  • cat filename |grep abc -A10 :檢視filename中含有abc所在行後10行(A10)、前10行(B10)内容
  • less a.txt|grep git :顯示關鍵詞所在行,管道符”|”它隻能處理由前面一個指令傳出的正确輸出資訊,對錯誤資訊資訊沒有直接處理能力。然後傳遞給下一個指令,作為标準的輸入;
  • cat /etc/passwd |awk -F ':' '{print $1}' :顯示第一列

文本處理

  • ls -l>file :輸出重定向>(改變原來系統指令的預設執行方式):ls -l指令結果輸出到file檔案中,若存在,則覆寫
  • cat file1 >>file :輸出重定向之cat指令結果輸出追加到file檔案
  • ls fileno 2>file : 2>表示重定向标準錯誤輸出(檔案不存在,報錯資訊儲存至file檔案);
  • cowsay <a.txt :重定向标準輸入’指令<檔案’表示将檔案做為指令的輸入(為從檔案讀資料作為輸入)
  • sed -i '4,$d' a.txt :删除第四行到最後一行($表示最後一行)(sed可以增删改查檔案内容)
  • sed -i '$a 增加的字元串' a.txt :在最後一行的下一行增加字元串
  • sed -i 's/old/new/g' a.txt :替換字元串;格式為sed 's/要替換的字元串/新的字元串/g' 修改的檔案
  • vim 檔案:編輯檢視檔案(同vi)

使用者與權限

  • useradd 使用者名 :建立使用者
  • userdel -r 使用者名 :删除使用者:(-r表示把使用者的主目錄一起删除)
  • usermod -g 組名 使用者名 :修改使用者的組
  • usermod -aG 組名 使用者名 :将使用者添加到組
  • groups test :檢視test使用者所在的組
  • cat /etc/group |grep test :檢視test使用者詳情:使用者名:密碼:使用者辨別号:組辨別号:注釋性描述:主目錄:登入Shell
  • passwd [ludf] 使用者名 :使用者改自己密碼,不需要輸入使用者名,選項-d:指定空密碼,-l:禁用某使用者,-u解禁某使用者,-f:強迫使用者下次登入時修改密碼
  • groupadd 組名 :建立使用者組
  • groupdel 使用者組 :删除組
  • groupmod -n 新組名 舊組名 :修改使用者組名字
  • su - 使用者名:完整的切換到一個使用者環境(相當于登入)(建議用這個)(退出使用者:exit)
  • su 使用者名 :切換到使用者的身份(環境變量等沒變,導緻很多指令要加上絕對路徑才能執行)
  • sudo 指令 :以root的身份執行指令(輸入使用者自己的密碼,而su為輸入要切換使用者的密碼,普通使用者需設定/etc/sudoers才可用sudo)

磁盤管理

  • df -h :顯示磁盤的空間使用情況 及挂載點
  • df -h /var/log :(顯示log所在分區(挂載點)、目錄所在磁盤及可用的磁盤容量)
  • du -sm /var/log/* | sort -rn : 根據占用磁盤空間大小排序(MB)某目錄下檔案和目錄大小
  • fdisk -l :查所有分區及總容量,加/dev/sda為查硬碟a的分區)
  • fdisk /dev/sdb :對硬碟sdb進行分區
  • mount /dev/sda1 /mnt :硬碟sda1挂載到/mnt目錄(mount 裝置檔案名 挂載點)
  • mount -t cifs -o username=luolanguo,password=win使用者賬号密碼,vers=3.0 //10.2.1.178/G /mnt/usb :遠端linux 共享挂載windows的U盤,G為U盤共享名,需設定U盤共享
  • mount -o loop /opt/soft/CentOS-7-x86_64-DVD-1708.iso /media/CentOS :挂載iso檔案
  • umount /dev/sda1 :取消挂載(umount 裝置檔案名或挂載點)

壓縮、解壓和打包備份

​ 單純tar僅為打包(多個檔案包成一個大檔案),加上參數-j(bzip2格式.bz2)、-z(gzip格式.gz)可以備份、壓縮(-c)、解壓(-x),備份一般比壓縮多加參數-p(保留原本檔案的權限與屬性),-C可以指定解壓到特定目錄;bzip2、gzip隻能對單一檔案壓縮;
  • file 檔案名 :查檔案類型(可看是用哪一種方式壓縮的)
  • tar -zxvf a.tar.gz -C ./test :解壓tar.gz到目前目錄下的test目錄
  • tar -zcvf /opt/c.tar.gz ./a/ :壓縮tar.gz(把目前目錄下的a目錄及目錄下所有檔案壓縮為 /opt/目錄下的c.tar.gz,這樣tar -zxvf c.tar.gz解壓出來帶有目錄a)
  • tar -jxvf a.tar.bz2 :解壓tar.bz2(到目前目錄)
  • tar -jcvf c.tar.bz2 ./a/ :壓縮tar.bz2(把目前目錄下的a目錄及目錄下所有檔案壓縮到目前目錄下為c.tar.gz2)
  • unzip a.zip :解壓zip(到目前目錄)
  • unzip -o mdmtest.war -d /opt/mdm :推薦使用unzip解壓war包(-o覆寫原有檔案,-d指定檔案解壓後存儲的目錄)
  • zip -r c.zip ./a/ :壓縮zip(把目前目錄下的a目錄及目錄下所有檔案壓縮到目前目錄下為c.zip
  • bzip2 -k file1 : 壓縮一個 'file1' 的檔案(-k表示保留源檔案)(bzip2格式,比gzip好)
  • bzip2 -d -k file1.bz2 : 解壓一個叫做 'file1.bz2'的檔案
  • gzip file1 : 壓縮一個叫做 'file1'的檔案(gzip格式)(不能保留源檔案)
  • gzip -9 file1 : 最大程度壓縮
  • gzip -d file1.gz : 解壓縮一個叫做 'file1'的檔案

軟體安裝

  • 盡量用yum源(apt-get)安裝,不行就rpm、deb包安裝,能不手動編譯的就不要手動編譯;
  • dpkg隻能安裝已經下載下傳到本地機器上的deb包. apt-get能線上下載下傳并安裝deb包,能更新系統,且還能自動處理包與包之間的依賴問題,這個是dpkg工具所不具備的;
  • rpm 隻能安裝已經下載下傳到本地機器上的rpm 包. yum能線上下載下傳并安裝rpm包,能更新系統,且還能自動處理包與包之間的依賴問題,這個是rpm 工具所不具備的;
  • yum、rpm安裝檔案分布在/usr的bin、lib、share不同目錄,不用配置PATH,直接用指令,但可用指令解除安裝更新;
  • 手動編譯軟體,預設位置為/usr/local下不同子目錄下,不用配置PATH直接用指令(手動指定安裝路徑需要加PATH),使得軟體更新和删除變得很麻煩。編譯安裝的軟體沒有解除安裝指令,解除安裝就是把所有這個軟體的檔案删除。

二進制(Binaries)包

yum安裝

​ 線上下載下傳并安裝rpm包,适用于CentOS、Fedora、RedHat及類似系統
  • yum install epel-releas :安裝第三方yum源EPEL(企業版 Linux 附加軟體包的簡稱)
  • yum repolist enabled :顯示可用的源倉庫(/etc/yum.repos.d/目錄下配置)
  • yum install yum-fastestmirror :自動選擇最快的yum源
  • yum list installed |grep java :列出已安裝的軟體(檢視已安裝的JDK)
  • yum remove java-1.8.0-openjdk.x86_64 :解除安裝軟體(解除安裝JDK)
  • yum list java* :列出已安裝和可安裝的軟體(檢視yum庫中的JDK包)
  • yum install [-y] java-1.8.0-openjdk :安裝軟體JDK(-y自動安裝)(推薦這種方式安裝)
  • yum install docker-ce-18.03.1.ce :安裝指定版本的軟體(已知docker-ce.x86_64 18.03.1.ce-1.el7.centos,則rpm包名為docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm)
  • yum check-update [kernel] :列出所有可更新的軟體(檢查更新kernel)
  • yum update tomcat :更新軟體(可所有)
  • rpm -ql 軟體名稱 :查詢yum安裝路徑(軟體名稱可通過rpm -qa|grep java)
  • yum info kernel :檢視軟體(kernel)的資訊
  • yum clean all :(清除緩存,使最新的yum配置生效)

rpm包手動下載下傳安裝

​ yum中沒有時用,适用于CentOS、Fedora、RedHat及類似系統;
  • wget -P /opt https://網址 :下載下傳到/opt目錄
  • rpm -ivh wps-office-版本.x86_64.rpm :安裝rpm包(包要先下載下傳)(要先裝依賴包)
  • rpm -e wps-office :解除安裝軟體(注意不要軟體名不要版本号)
  • rpm -qa |grep wps :檢視安裝的rpm包
  • rpm -ql 軟體名稱 :檢視rpm包安裝路徑(軟體名稱可通過rpm -qa|grep java)

apt方式安裝

​ 安裝deb包,類似yum安裝,适用于Debian, Ubuntu 以及類似系統;
  • apt-get install aptitude :安裝aptitude工具,實作依賴自動安裝,依賴版本自動降級或更新
  • aptitude install 軟體 :安裝軟體(推薦這種方式安裝)
  • apt-cache search 軟體 :搜尋軟體
  • apt-get install 軟體 :安裝軟體
  • apt-get purge 軟體 :解除安裝軟體(包括配置檔案,隻删除軟體purge換成remove)
  • apt-get upgrade :更新所有已安裝的軟體包
  • apt-get update :更新清單中的軟體包
  • apt-get clean :從下載下傳的軟體包中清理緩存

deb包安裝

​ 适用于Debian, Ubuntu 以及類似系統;
  • dpkg -i package.deb :安裝一個 deb 包
  • dpkg -r package_name :從系統删除一個 deb 包
  • dpkg -l |grep chrome :查詢系統中所有已經安裝的 deb 包
  • dpkg -L 軟體名稱 :查軟體安裝的檔案

解壓即用

​ 大多數非開源的商業軟體都采取這種辦法;

​ 二進制(Binaries)包如apache-jmeter-3.3.tgz,下載下傳複制解壓到/opt,然後然後将該軟體的 bin 目錄加入到 PATH 中即可(vim /etc/profile export PATH=$PATH:/opt/apache-jmeter-3.3/bin);

軟體自己的子產品/包管理器

​ 如python:系統的源中不可能包含該軟體的所有子產品; 系統的源中該軟體的子產品的更新要遠遠滞後于最新版本;手動安裝python,并用Python 自帶的 pip 安裝子產品(類似yum);
  • pip install redis :安裝python軟體包redis
  • pip unstall redis :解除安裝
  • pip show --files redis :pip檢視已安裝的包
  • pip list --outdated :檢查更新

源代碼(Source)包

編譯安裝

​ 源代碼包(一般有install檔案)如hello-2.2.tar.bz2,下載下傳複制到/opt;
  • tar -jxvf hello-2.2.tar.bz2 :解壓
  • ./configure --prefix=/opt/軟體目錄名稱 :為編譯做好準備,加上 prefix 手動指定安裝路徑
  • make :編譯
  • make install :安裝
  • make clean :删除安裝時産生的臨時檔案
  • vim /etc/profile export PATH=$PATH:/opt/目錄/bin :手動指定安裝路徑需要加path
  • hello :執行軟體:看INSTALL和README檔案(是否源碼包、如何安裝、執行都看這兩個)
  • rm -rf 軟體目錄名稱 :解除安裝軟體

轉載位址:https://www.cnblogs.com/caozy/p/9261224.html

繼續閱讀