1. 程式人生 > >Linux運維之路 基礎篇:Linux基礎命令(一)

Linux運維之路 基礎篇:Linux基礎命令(一)

利用 月份 計時 關閉 虛擬終端 登錄 變量 共享 命令格式

Linux運維之路 基礎篇:Linux基礎命令(一)

Linux哲學宗旨:

  1. 一切皆文件:把幾乎所有的資源,包括硬件設備都組織為文件
  2. 有眾多單一的小程序組成,一個程序制實現一個功能,組成小程序完成復雜操作
  3. 盡量避免和用戶交互:實現腳本編程,以自動完成某些功能
  4. 使用純文本文件保存配置信息

    終端:用戶和主機交互時用到的設備

  5. 物理終端:直接接入的設備也叫控制臺/dev/console
  6. 虛擬終端:附加在物理終端上虛擬出的,默認啟動六個,Ctrl+Alt(F1~F6),系統啟動時,默認啟動虛擬終端1,啟動終端時會自動啟動交互接口 /dev/tty#
  7. 圖形終端:附加在物理終端上虛擬出的,額外附加圖形界面
  8. 偽終端:圖形界面下打開的命令行接口,或者基於ssh、Telnet協議打開的遠程命令行 /dev/pts/#

tty 命令:查看自己所使用的終端

交互式接口:在啟動終端後,再終端設備附加一個交互式應用程序

GUI:X協議,窗口管理器和桌面(GNOME、KDE、XFCE輕量級)
CLI:shell程序 bash,bsh,csh,ksh

分類:sh、bash、csh、tcsh、ksh、zsh等

顯示當前使用的shell:

[[email protected] ~]# echo $SHELL
/bin/bash

顯示系統支持的所有shell:

[[email protected] ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh

絕對路徑:從根目錄起始的路徑
相對路徑:從當前位置開始的路徑

命令格式:

COMMAND [選項...] [參數...]  
輸入命令+回車:提請shell程序找到鍵入的命令所可執行程序或代碼,並由其分析後提交給
內核分配資源運行起來,表現為一個或多個進程  

Shell中可執行的命令

選項:用於啟用或關閉命令的某個或某些功能

短選項:-c 例如:-l, -h
長選項:--word 例如:--all, --human-readable

參數:命令的作用對象,比如文件名,用戶名等
註意:

  1. 多個選項以及多參數和命令之間使用空白字符分隔
  2. 取消和結束命令執行:Ctrl+c,Ctrl+d
  3. 多個命令可以用;符號分開
  4. 一個命令可以用\分成多行

命令提示符

$:表示普通用戶  
#:表示管理員用戶  

修改命令提示符的格式:(永久生效寫到/etc/profile.d/###.sh 配置文件中)

PS1="\[\e[1;5;41;33m\][\[email protected]\h \W]\\$\[\e[0m\]"
PS1="\[\e[1;32m\][\[\e[0m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"
\e 控制符\033 \u 當前用戶
\h 主機名簡稱 \H 主機名
\w 當前工作目錄 \W 當前工作目錄基名
\t 24小時時間格式 \T 12小時時間格式
\! 命令歷史數 \# 開機後命令歷史數
例如:
    PS1="[\[email protected]\H \W]\$"  

命令分類

內部命令:由shell自帶的,而且通過某命令形式提供

enable:查看所有的內部命令
enable cmd 啟用內部命令
enable –n cmd 禁用內部命令
enable –n 查看所有禁用的內部命令

外部命令:在文件系統路徑下有對應的可執行程序文件,可以通過which和whereis查看

which:顯示命令對應的程序文件路徑
--skip-alias:禁止顯示別名
whereis:用於顯示二進制文件、手冊頁等
whatis:使用makewhatis(RHEL7為mandb)命令可將當前系統上所有的幫助手冊與之相對應的關鍵字創建為一個數據庫

type COMMAND:判斷命令是內建命令還是外部命令

[[email protected] ~]# type cd 
cd is a shell builtin (內部命令)
[[email protected] ~]# type top
top is /usr/bin/top (外部命令)

Linux命令獲取幫助:

內鍵命令:help + 命令

外部命令:命令 --help 或者 -h

使用幫助手冊(manual):存放在/uer/share/man/(man1~man9)

用法:man + 命令(whatis + 命令 查看命令手冊的分布)

man1:用戶命令 man2:系統調用 man3:標準庫調用 man4:設備文件及特殊文件 man5:配置文件格式 man6:遊戲 man7:雜項 man8:管理類命令 man9:Linux 內核API

man -M PATH COMMAND:到指定位置搜索指定命令的幫助手冊

幫助頁的使用方法:
man的操作方法:實際上是調用less
space ^V,^F,^f:向文件尾部翻屏
b,^B:向文件首部翻屏
d,^D:向文件尾部翻半屏
u,^U:向文件首部翻半屏
enter:向文件尾部翻一行
k:向文件首部翻一行
q:退出
#:跳轉至第#行
1G:跳轉至文件首部
G:跳轉至文件尾部
文本搜索:
/keyword:以指定關鍵詞,從當前位置向文件尾部搜索,不區分大小寫
n:下一個(方向同搜索方向) N:上一個
?keyword:以指定關鍵詞,從當前位置向文件首部搜索,不區分大小寫
n:下一個(方向同搜索方向) N:上一個

info + 命令

程序自身的幫助文檔:/usr/share/doc/COMMAND-VERSION/下
README、INSTALL、ChangeLog
Shell搜索到的外部命令的路徑會緩存在kv(key-value)中:
hash命令:參看kv中的命令:格式 hits(次數) COMMAND(命令)
-r:清空全部緩存區
-d COMMAND:清空指定命令的緩存

查看主機名:hostname

修改主機名:
修改/etc/hostname
hostnamectl set-hostname + hostname

命令歷史

Hash緩存表:

系統初始hash表為空,當外部命令執行時,默認會從PATH路徑下尋找該命令,找到後會將這條命令的路徑記錄到hash表中,當再次使用該命令時,shell解釋器首先會查看hash表,存在將執行之,如果不存在,將會去PATH路徑下尋找,利用hash緩存表可大大提高命令的調用速率

用法:
hash 顯示hash緩存
hash –l 顯示hash緩存,可作為輸入使用
hash –p path name 將命令全路徑path起別名為name
hash –t name 打印緩存中name的路徑
hash –d name 清除name緩存
hash –r 清除緩存

history命令:查看命令歷史(存放在~/.bash_history中,登陸後執行的命令都放在緩沖區中,登出都緩沖區的內容會被保存到該文件中)

環境變量:
HISTSIZE:命令歷史記錄的條數;
HISTFILE:~/.bash_history;
HISTFILESIZE:命令歷史文件記錄歷史的條數;
HISTTIMEFORMAT=“%F %T “ 顯示時間
HISTIGNORE=“str1:str2*:… “ 忽略str1命令,str2開頭的歷史
控制命令歷史的記錄方式:
環境變量:HISTCONTROL
ignoredups:忽略重復的命令;連續且相同方為“重復”;
ignorespace:忽略所有以空白開頭的命令;
ignoreboth:ignoredups, ignorespace;
erasedups 刪除重復命令
修改環境變量值的方式:export 變量名="值"
變量賦值:把賦值符號後面的數據存儲於變量名指向內存空間;
或者存放在 /etc/profile 或 ~/.bash_profile
選項: history +數字 顯示倒數n條命令
-a:追加本次會話的命令至歷史文件中
-d:history -d 數字 刪除指定的命令歷史
-c:清空命令歷史
基於歷史之中的命名的快捷操作:
!string:調用歷史中最近一個以string開頭的命令
!!:重復執行上一條命令
調用上一條命令的最後一個參數:
!$:
ESC, .
Alt+.

Linux時間相關的操作

date:顯示或設置當前系統時間

格式:date 選項
    %D:按照月/日/年格式顯示
    %F:按照年-月-日格式顯示  
    %T:按照小時:分鐘:秒格式顯示
    %Y:年份,只顯示完整年份數字(4位數字),顯示格式為:2016;
    %y:顯示年份的後兩位,顯示格式為:16;
    %m:月份,只顯示數字,顯示格式為:03;
    %d:日期,只顯示數字,顯示格式為:02;
    %H:小時,只顯示數字,顯示格式為(00..23):15;
    %k:小時,顯示格式為(0..23);
    %I:小時,格式為(01..12);
    %l:小時,顯示格式為(1..12);
    %h:顯示月份,顯示格式為:3月;
    %M:分鐘,只顯示數字,顯示格式為:52;
    %S:秒鐘,只顯示數字,顯示格式為:16;
    %a:縮寫星期;%A:完整星期;
    %b:縮寫月份;%B:完整月份;
    %r:顯示格式為(11:11:04 PM);
    %R:同%H%M,格式為(23:37)
    %s:從1970年1月1日至此刻所經歷的秒數;timestamp;顯示格式為:1456905397。
    例如:
        date "+%Y-%m-%d %H:%M:%S":設置時間的顯示格式
設定時間:
    格式:月日小時分鐘[年].[秒]
        例: date 0815170117.16  2017.08.15 17:01:16
    -s:指定時間和日期
        date -s "2018-5-24 11:27:30":設定日期為2018年5月24日,11點27份30秒
    -d:查看指定時間的信息
        date -d "-5 day":查看五天前的日期

Linux的兩個時鐘:

系統時鐘:由Linux內核通過工作頻率進行的計時
硬件時鐘:位於主機上CMOS裏的時鐘,關機後仍會運行
clock或hwclock:查看硬件時鐘

hwclock:同步系統時鐘和硬件時鐘

-s:以硬件時鐘為準,把系統時鐘與硬件時鐘同步
-w:以系統時鐘為準,把硬件時鐘與系統時鐘同步
cal命令:顯示日歷(可加年份,顯示指定的年份)

時區:

timedatectl :顯示或者設置時區相關的信息
    選項:
        status:查看當前時間時區信息
        list-timezones:顯示支持的所有時區
        set-timezone + 時區:設置時區

Linux文件系統:

根文件系統:rootfs
LSB組織:FHS文件系統層級標準
/boot:引導文件的存放目錄,內核文件(vmlinux),引導加載器(BootLoader、grub)
/bin:供所有用戶使用的基本命令,不能關聯至獨立分區,os啟動時會用
/sbin:管理類的基本命令
/lib:基本的共享庫和內核模塊文件
/lib64:專用於X86_64系統上的輔助共享庫文件存放位置
/etc:配置文件目錄的存放位置(大多數是純文本文件)
/home:普通用戶的家目錄
/root:管理員的家目錄
/media:掛載便攜式存儲設備
/mnt:掛載臨時其他的文件系統
/dev:設備文件及特殊文件的存放位置
        b:塊設備  可隨機訪問設備
        c:字符設備  線性訪問設備(按照時序進行訪問)
/opt:第三方應用程序存放位置
/srv:當前系統運行時所需要的數據存放位置
/tmp:臨時文件存放位置
/usr:   子目錄
                bin:普通用戶使用命令(系統完成基本功能所需要的應用程序)
                sbin:root使用的命令(系統完成基本功能所需要的應用程序)
                lib和lib64:庫文件
                include:c程序所用的頭文件
                share:結構化的獨立的數據(doc、man)
                local:本地層級結構,第三方應用程序的存儲位置
/var:存放經常發生變化的數據文件
    cache:應用程序緩存數據存放目錄
    lib:應用程序狀態信息數據
    local:專用於/usr/local下的應用程序存儲可變數據
    lock:鎖文件
    log:日誌目錄及文件
    opt:專用於/opt下的應用程序存儲可變數據
    run:運行中的進程相關數據,通常用於存儲進程的pid
    spool:應用程序的數據池
    tmp:保存系統兩次重啟之間產生的臨時數據
/proc:內核與進程相關的虛擬文件系統
/sys:用於輸出當前系統上硬件設備相關的信息的虛擬文件系統
/selinuxe:selinux安全相關的安全策略信息

Linus上的應用程序組成部分:

二進制程序:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin
庫文件:/lib,/lib64,/usr/lib,/usr/local/lib,/usr/local/lib64
配置文件:/etc,/etc/directory,/usr/local/etc
幫助文件:/usr/share/man,/usr/share/doc,/usr/local/share/man
        /usr/local/share/doc

系統管理類命令:

關機:halt (-f) 強制關機 poweroff
重啟:reboot
shutdown:不指定時間默認為一分鐘
-r:reboot 重啟
-h:halt 關機
-c:取消關機或重啟
TLME:now(現在) +m(幾分鐘後) hh:mm(指定時間)

用戶登錄信息查看命令:

whoami: 顯示當前登錄有效用戶;  
who: 系統當前所有的登錄會話;  
    -b:顯示系統的啟動時間  
w: 系統當前所有的登錄會話及所做的操作;  

目錄相關的命令:

1.cd ;用於改變工作目錄
    cd或cd~:切換到當前用戶的家目錄
    cd - :可以再上次訪問的目錄和當前目錄之間來回切換
    cd ..: 切換至上一級目錄
    相關的環境變量:
        PWD:保留了當前目錄的路徑
        OLDPWD:上一次目錄路徑
2.pwd:顯示當前路徑
    -P 顯示真實物理路徑
    -L 顯示鏈接路徑(默認)
3.ls:列出指定目錄下的文件列表
    -a:顯示所有文件,包括隱藏文件
    -A:顯示所有文件,但是不包括.和..
    -l:以長列表格式顯示
        drwxr-xr-x.  22 root root 4096 Jun 17 09:31 var
            drwxr-xr-x :第一位表示文件類型 -(f):表示普通文件 l:表示軟鏈接文件 
                            d:表示目錄  b:塊設備 c:字符設備 p:管道 s:套接字
                         2-4位表示屬主權限
                         5-7位表示屬組權限
                         8-10位表示其他人權限
            22:表示單位符號  文件被硬鏈接的次數
            root:文件所有者
            root:文件所屬組
            4096;文件大小(-h 以易讀的方式顯示)
            Jun 17 09 :31:文件最後一次被修改的時間(時間戳)
                顯示時間戳:stat 路徑  顯示指定文件的元數據
            var:文件名
    -d:不會顯示目錄下的文件,只顯示目錄本身的屬性
    -h:以易讀的方式顯示文件大小
    -r:把文件名按照降序方式顯示
    -R:遞歸顯示,會把目錄及其子目錄的內容列出來
    -i:產看iNode節點的信息
4.dirname:取路徑的目錄名
5.basename:取的基名

時間戳管理工具:顯示時間戳:stat 路徑 顯示指定文件的元數據

三個時間戳:
    access time:最近一次訪問時間
    modify time:最近一次修改時間
    change time:改變時間(文件的元數據發生改變)
查看文件狀態:stat
touch:可以修改atime和mtime為當前系統時間,文件不存在則創建
        touch 選項  參數
        -a或-m -t,指定修改atime和mtime,默認兩個都修改,格式[[CC]YY]MMDDhhmm[.ss]
        -c:如果文件不存在,則不創建文件

文件查看命令

1.cat 連接文件並顯示出來
    -A:顯示所有非正常的符號
    -E:顯示行結束符
    -T:顯示制表符
    -v:顯示其他的非打印字符
    -n:對顯示的行進行編號
    -b:打印行號(空行不標號)
2.tac:逆序顯示文件
    -E:顯示行結束符,在行尾添加$,不作為文件內容
    -T:顯示制表符
    -n:顯示行編號
3.more:基於顯示器查看的過濾信息
    -d:顯示翻頁及退出提示
4.less:和more的用法相同
5.head:顯示文件的前幾行,默認為10行
    -c:指定獲取前幾個字節
    -n:指定獲取前幾行
6.tail:獲取文件後幾行  和head用法相同
    -c:指定獲取後幾個字節
    -n:指定獲取後幾行
    -f:跟蹤顯示文件追加的新內容
7.watch:用於動態執行命令
    watch 選項 ‘命令‘
        -n:指定刷新時間
        watch -n1 ‘cat /etc/fstab‘
            每一秒鐘執行一次cat /etc/fstab
8.hexdump:以十六進制顯示二進制文件內容

回顯命令

echo;顯示輸出的內容或變量
    -e:允許使用轉義字符  
         \n ;換行  \t:制表符
        \a 發出警告聲
        \b 退格鍵
        \c 最後不加上換行符號
        \e escape,相當於\033
        \r 回車,即光標移至行首,但不換行
        \\ 插入\字符
        \0nnn 插入nnn(八進制)所代表的ASCII字符
        echo -e ‘\033[43;31;5mmagedu\e[0m‘
        \xHH插入HH(十六進制)所代表的ASCII數字(man 7 ascii)
    echo "$PATH" 變量會被替換   -->雙引號表示強引用
    echo ‘$PATH‘ 變量不會被替換  -->單引號表示弱引用
    echo `command ....` 會打印出命令的執行結果
which:顯示命令對應的程序文件路徑
        --skip-alias:禁止顯示別名
whereis:用於顯示二進制文件、手冊頁等
whatis:顯示命令幫助信息的位置,使用mkwhatis命令可將當前系統上所有的幫助手冊與之相對
        應的關鍵字創建為一個數據庫

文件管理類命令:

mkdir:創建目錄
    -p:即使目錄已存在也不會報錯
        如果目錄不存在,而且父目錄也不存在,則會創建所有的父目錄
    -v:顯示創建目錄的詳細信息
    -m:創建目錄時直接指定目錄權限
rmdir:刪除空目錄
tree:列出目錄的層級結構
    -d:僅顯示目錄
    -L +#:僅顯示對應的數字的層級
    -P pattern:只顯示指定的pattern匹配到的路徑
cp:復制文件
    格式:cp  源文件1 源文件2.... 目的文件或目錄
          cp -t 目錄 源文件1 源文件2....
          cp -r 目錄1 目錄2
    選項:
        -i:交互式
        -r:遞歸復制目錄及目錄下的所有內容
        -a:歸檔,會保留源文件的所有屬性
        -u --update:只復制源比目標更新文件或目標不存在的文件
        -b:目標存在,覆蓋前先備份,形式為 filename~
        --backup=numbered:目標存在,覆蓋前先備份加數字後綴
    練習:
        1、每天將/etc/目錄下所有文件,備份到/data獨立的子目錄下,並要求子目錄格式為
         backupYYYY-mm-dd,備份過程可見
            cp -r /boot/ /data/bootback`date +%F`
mv:移動文件  用法和cp類似(可用於重命名)
    選項:
        -i:交互式
        -f:強制
rm:刪除目錄或文件
    -f:強制
    -r:遞歸,用於刪除目錄
    -i:交互式

命令別名:

alias:管理命令別名,列出當前shell進程中所有可用的命令別名
    alias  別名=‘命令 選項’   僅對當前shell進程有效
        僅對當前用戶生效:~/.bashrc  
        對所有用戶有效:/etc/bashrc
    unalias: unalias 別名  撤銷別名  -a:撤銷所有
只使用原命令:\COMMAND或者`conmmand`

重新加載配置文件:

.+ /path/to/config_file 或者 source + /path/to/config_file

bash快捷鍵:

Ctrl+l:相當於clear,清屏
Ctrl+a:把光標直接跳至命令行首部
Ctrl+e:把光標直接跳至命令行尾部
Ctrl+c:取消命令執行
Ctrl+u:刪除光標前的所有內容
Ctrl+k:刪除光標後的所有內容

screen命令:實現相當於共享桌面的功能,前提 兩個遠程電腦通過同樣的賬戶登進在了同一個服務器上

創建新screen會話
    screen –S [SESSION]
加入screen會話
    screen –x [SESSION]
退出並關閉screen會話
    exit
剝離當前screen會話
    Ctrl+a,d
顯示所有已經打開的screen會話
    screen -ls
恢復某screen會話
    screen -r [SESSION]

查看系統信息:

查看系統版本:cat /etc/os-release 或者 lsb命令
查看內核版本:uname -a
插卡cpu信息:lscpu
查看內存信息:free   -m:以M的格式顯示
查看硬盤信息:lsblk或者fdisk -l

讓系統重新對硬盤進行掃描:

echo "---" > /sys/class/scsi_host/host0/scan;echo "---" > /sys/class/scsi_host/host1/scan;echo "---" > /sys/class/scsi_host/host2/scan

inode:索引節點,按特定格式組織的能存儲單個文件的所有屬性信息(在一個分區中inode節點唯一)

地址指針:指向文件在內存中的存儲位置
    直接指針:間接指針:三級指針......
inode 位圖:對位保存inode空閑與否的狀態信息

cp和inode的關系:

在執行cp命令的時候:
    先分配一個空閑的inode號,然後在inode表中生成新條目,並在目錄中創建一個目錄項,將
    名稱與inode編號關聯,最後拷貝數據生成新的文件

rm和inode的關系:

在執行cp命令的時候:
    先減少鏈接數,釋放inode編號到空閑列表中,然後刪除指向內存地址的指針,實際上刪除的
    時候,數據不會再硬盤中被立刻刪除,數據會被標記為未使用的狀態,然後等待新的數據寫入

mv和inode的關系:

當目標文件和源文件在同一個文件系統時:
    在指定的位置創建新的文件名並將其與之父目錄相關聯,並將新的文件名與之前的inode節
    點關聯,最後刪除原文件與其父目錄的對應,inode節點不會變
當目標文件和源文件在不同的文件系統時:
    相當於先執行cp,再執行rm

軟鏈ln -s 目標文件 鏈接文件

指向另一個文件的鏈接:訪問路徑,大小為指定字符串的長度,不增加目標文件inode的引用
計數,inode節點與源文件不同,源文件刪除後軟連接文件不能訪問

硬鏈接:ln 目標文件 鏈接文件

    不能對目錄進行,不能跨文件系
    多個文件指向一個inode的不同路徑,創建文件的硬鏈接即為inode創建新的引用路徑,會增
    加其引用計數,新建的硬鏈接文件的inode節點數與源文件相同,指針都指向相同的存儲地址

文件系統空間占用等信息查看工具:

df:查看以掛載的文件系統的使用情況 
    -h:以易讀的方式顯示
    -i:顯示分區可用的inode個數
    -P:使用Posix兼容的格式輸出
du:查看某目錄總體空間的占用狀態
    du 選項 目錄
        -h:以易讀的方式顯示
        -s:總體大小之和

Linux運維之路 基礎篇:Linux基礎命令(一)