目錄
前言
1. shell語言
2. 執行命令的必備知識
3.?常用系統工作命令
4. 系統狀態檢測命令
5. 查找定位文件命令
6. 文本文件編輯命令
7. 文件目錄管理命令
前言
悟已往之不諫,知來者之可追。實迷途其未遠,覺今是而昨非。舟遙遙以輕飏,風飄飄而吹衣。問征夫以前路,恨晨光之熹微。
本系列依照《Linux就該這么學》第二版隨書學習練習操作,將一些課本上不順暢的地方,全部以最簡方式免費開源展示給大家,資源大家可以自行百度,學習起來我們既要多巴胺也要內啡肽。
第一章寫完感覺挺簡單的,沒想到第二章直接爆炸,居然寫了兩天,怕大家看不下去,推薦一首天王的歌,邊聽邊學:<周杰倫 - 夜曲>,雖然大家做著一樣的事情,但是不同的階段還是會有不一樣的感受的,希望這段學習的旅程能給大家一些思考,不要麻木做事,問師參學今何解,云在青天水在瓶。
1. shell語言
英文中的殼叫作Shell,我們在行業中也將用戶終端程序稱之為Shell,方便好記。Shell就是終端程序的統稱,它充當了人與內核(硬件)之間的翻譯官,用戶把一些命令“告訴”終端程序,它就會調用相應的程序服務去完成某些工作。現在包括紅帽系統在內的許多主流Linux系統默認使用的終端是Bash(Bourne-Again SHell)解釋器,這個Bash解釋器主要有以下4項優勢:通過上下方向鍵來調取執行過的Linux命令;命令或參數僅需輸入前幾位就可以用Tab鍵補全;具有強大的批處理腳本;具有實用的環境變量功能。
2. 執行命令的必備知識
常見的執行Linux命令的格式是:命令名稱 ? ? [命令參數] ? ? [命令對象]
命令名稱:就是語法中的“動詞”,表達的是想要做的事情,例如創建用戶、查看文件、重啟系統等操作。
命令參數:用于對命令進行調整,讓“修改”過的命令能更好地貼合工作需求,達到事半功倍的效果。
Linux命令參數的長格式與短格式示例
長格式 | man --help |
短格式 | man -h |
切換到root用戶下,體驗一下man命令
[centos8@localhost root]$ su -
Password: ?
Last login: Mon Nov ?6 16:58:17 PST 2023 on pts/0
[root@localhost ~]# ?
[root@localhost ~]# man man
man命令中常用按鍵
按鍵 | 作用 |
空格鍵 | 向下翻一頁 |
PaGe down | 向下翻一頁 |
PaGe up | 向上翻一頁 |
home | 直接前往首頁 |
end | 直接前往尾頁 |
/ | 從上至下搜索某個關鍵詞,如“/linux” |
? | 從下至上搜索某個關鍵詞,如“?linux” |
n | 定位到下一個搜索到的關鍵詞 |
N | 定位到上一個搜索到的關鍵詞 |
q | 退出幫助文檔 |
man命令中幫助信息結構和意義
結構名稱 | 代表意義 |
NAME | 命令的名稱 |
SYNOPSIS | 參數的大致使用方法 |
DESCRIPTION | 介紹說明 |
EXAMPLES | 演示(附帶簡單說明) |
OVERVIEW | 概述 |
DEFAULTS | 默認的功能 |
OPTIONS | 具體的可用選項(帶介紹) |
ENVIRONMENT | 環境變量 |
FILES | 用到的文件 |
SEE ALSO | 相關的資料 |
HISTORY | 維護歷史與聯系方式 |
Tab鍵:實現對命令、參數或文件的內容補全,兩次tab可以調出所有可能的命令
Ctrl+C組合鍵:終止當前進程的運行
以下命令執行效果是每1s刷新一次系統負載情況,直到按下Ctrl+c組合鍵時才停止運行。
[root@localhost ~]# watch -n 1 uptime
+
Ctrl+D組合鍵:鍵盤輸入結束。
Ctrl+L組合鍵:清空當前終端中已有的內容。
3.?常用系統工作命令
echo命令:用于在終端設備上輸出字符串或變量提取后的值,語法格式為“echo [字符串] [$變量]”
字符串
[root@localhost ~]# echo weihongbin
weihongbin
$變量
[root@localhost ~]# echo $SHELL
/bin/bash
date命令:用于顯示或設置系統的時間與日期,語法格式為“date [+指定的格式]”
參數 | 作用 |
%S | 秒(00~59) |
%M | 分鐘(00~59) |
%H | 小時(00~23) |
%I | 小時(00~12) |
%m | 月份(1~12) |
%p | 顯示出AM或PM |
%a | 縮寫的工作日名稱(例如:Sun) |
%A | 完整的工作日名稱(例如:Sunday) |
%b | 縮寫的月份名稱(例如:Jan) |
%B | 完整的月份名稱(例如:January) |
%q | 季度(1~4) |
%y | 簡寫年份(例如:20) |
%Y | 完整年份(例如:2020) |
%d | 本月中的第幾天 |
%j | 今年中的第幾天 |
%n | 換行符(相當于按下回車鍵) |
%t | 跳格(相當于按下Tab鍵) |
默認格式
[root@localhost ~]# date
Mon Nov ?6 17:27:55 PST 2023
“年-月-日 小時:分鐘:秒”
[root@localhost ~]# date "+%Y-%m-%d %H:%M:%S"
2023-11-06 17:29:16
設置為2020年11月1日8點30分
[root@localhost ~]# date -s "20231107 9:34:00"
Tue Nov ?7 09:34:00 PST 2023
參數%j可用來查看今天是當年中的第幾天
[root@localhost ~]# date "+%j"
311
timedatectl命令:用于設置系統的時間,語法格式為“timedatectl [參數]”
timedatectl命令參數以及作用
參數 | 作用 |
status | 顯示狀態信息 |
list-timezones | 列出已知時區 |
set-time | 設置系統時間 |
set-timezone | 設置生效時區 |
查看系統時間與時區
[root@localhost ~]# timedatectl status ?
? ? ? ? ? ? ? Local time: Tue 2023-11-07 10:59:14 PST
? ? ? ? ? Universal time: Tue 2023-11-07 18:59:14 UTC
? ? ? ? ? ? ? ? RTC time: Tue 2023-11-07 03:06:47
? ? ? ? ? ? ? ?Time zone: America/Los_Angeles (PST, -0800)
System clock synchronized: no
? ? ? ? ? ? ?NTP service: active
? ? ? ? ?RTC in local TZ: no
時區不是上海(Asia/Shanghai),可以手動進行設置
[root@localhost ~]# timedatectl set-timezone Asia/Shanghai ?
網絡授時NTP:編輯文件 "/etc/ntp.conf",根據情況修改文件內容為:
driftfile ?/var/lib/ntp/drift
pidfile ? /var/run/ntpd.pid
logfile /var/log/ntp.log
restrict ? ?default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
server 127.127.1.0
fudge ?127.127.1.0 stratum 10
server ntp.aliyun.com iburst minpoll 4 maxpoll 10
restrict ntp.aliyun.com nomodify notrap nopeer noquery
查看一下時間是否準確:date
reboot命令:用于重啟系統
[root@localhost ~]# reboot
poweroff命令:用于關閉系統
[root@localhost ~]# poweroff
wget命令:用于在終端命令行中下載網絡文件,語法格式為“wget [參數] 網址”
wget命令中的參數以及作用
參數 | 作用 |
-b | 后臺下載模式 |
-P | 下載到指定目錄 |
-t | 最大嘗試次數 |
-c | 斷點續傳 |
-p | 下載頁面內所有資源,包括圖片、視頻等 |
-r | 遞歸下載 |
遞歸下載并存到指定網址目錄
[root@localhost ~]# wget -r -p https://**
ps命令:用于查看系統中的進程狀態,語法格式為“ps [參數]”
ps命令中的參數以及作用
參數 | 作用 |
-a | 顯示所有進程(包括其他用戶的進程) |
-u | 用戶以及其他詳細信息 |
-x | 顯示沒有控制終端的進程 |
Linux系統中有5種常見的進程狀態,分別為運行、中斷、不可中斷、僵死與停止
R(運行):進程正在運行或在運行隊列中等待。
S(中斷):進程處于休眠中,當某個條件形成后或者接收到信號時,則脫離該 ? 狀態。
D(不可中斷):進程不響應系統異步信號,即便用kill命令也不能將其中斷。
Z(僵死):進程已經終止,但進程描述符依然存在, 直到父進程調用wait4()系統函數后將進程釋放。
T(停止):進程收到停止信號后停止運行。
高優先級(<)、低優先級(N)、被鎖進內存(L)、包含子進程(s)多線程(l)5種補充形式
執行ps aux
命令
USER | PID | %CPU | %MEM | VSZ | RSS | TTY | STAT | START | TIME | COMMAND |
進程的所有者 | 進程ID號 | 運算器占用率 | 內存占用率 | 虛擬內存使用量(單位是KB) | 占用的固定內存量(單位是KB) | 所在終端 | 進程狀態 | 被啟動的時間 | 實際使用CPU的時間 | 命令名稱與參數 |
root | 1 | 0.0 | 0.5 | 244740 | 10636 | ? | Ss | 07:54 | 0:02 | |
root | 2 | 0.0 | 0.0 | 0 | 0 | ? | S | 07:54 | 0:00 | |
root | 3 | 0.0 | 0.0 | 0 | 0 | ? | I< | 07:54 | 0:00 | |
root | 4 | 0.0 | 0.0 | 0 | 0 | ? | I< | 07:54 | 0:00 | |
root | 5 | 0.0 | 0.0 | 0 | 0 | ? | I< | 07:54 | 0:00 | |
root | 6 | 0.0 | 0.0 | 0 | 0 | ? | I< | 07:54 | 0:00 | |
root | 7 | 0.0 | 0.0 | 0 | 0 | ? | S | 07:54 | 0:00 | |
root | 8 | 0.0 | 0.0 | 0 | 0 | ? | I | 07:54 | 0:00 | |
root | 9 | 0.0 | 0.0 | 0 | 0 | ? | S | 07:54 | 0:00 |
pstree命令:用于以樹狀圖的形式展示進程之間的關系
[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
? ? ? ?├─NetworkManager───2*[{NetworkManager}]
? ? ? ?├─VGAuthService
? ? ? ?├─3*[abrt-dump-journ]
? ? ? ?├─abrtd───2*[{abrtd}]
? ? ? ?├─alsactl
? ? ? ?├─anacron
? ? ? ?├─atd
? ? ? ?├─auditd─┬─sedispatch
? ? ? ?│ ? ? ? ?└─2*[{auditd}]
? ? ? ?├─avahi-daemon───avahi-daemon
top命令:用于動態地監視進程活動及系統負載等信息
第1行:系統時間、運行時間、登錄終端數、系統負載(3個數值分別為1分鐘、5分鐘、15分鐘內的平均值,數值越小意味著負載越低)。
第2行:進程總數、運行中的進程數、睡眠中的進程數、停止的進程數、僵死的進程數。
第3行:用戶占用資源百分比、系統內核占用資源百分比、改變過優先級的進程資源百分比、空閑的資源百分比等。其中數據均為CPU數據并以百分比格式顯示,例如“99.9 id”意味著有99.9%的CPU處理器資源處于空閑。
第4行:物理內存總量、內存空閑量、內存使用量、作為內核緩存的內存量。
第5行:虛擬內存總量、虛擬內存空閑量、虛擬內存使用量、已被提前加載的內存量。
nice命令:用于調整進程的優先級,語法格式為“nice優先級數字 服務名稱”
PR和NI值代表的是進程的優先級,數字越低(取值范圍是-20~19),優先級越高
-g 匹配進程組ID
-n 設置優先級別
-p 匹配進程ID
-u 匹配用戶ID
[root@bogon ~]# nice -n -20 bash
pidof命令:用于查詢某個指定服務進程的PID號碼值,語法格式為“pidof [參數] 服務名稱”
每個進程的進程號碼值(PID)是唯一的,可以用于區分不同的進程
[root@bogon ~]# pidof sshd
1861 1843 1046
kill命令:用于終止某個指定PID值的服務進程,語法格式為“kill [參數] 進程的PID”
使用kill命令把上面用pidof命令查詢到的PID所代表的進程終止掉
[root@bogon ~]# kill 2156
有時系統會提示進程無法被終止,此時可以加參數-9,表示最高級別地強制殺死進程
[root@bogon ~]# kill -9 2156
killall命令:用于終止某個指定名稱的服務所對應的全部進程,語法格式為“killall [參數] 服務名稱”
[root@bogon ~]# pidof sshd
1861 1843 1046
[root@bogon ~]# killall sshd
[root@bogon ~]# pidof sshd
4. 系統狀態檢測命令
ifconfig命令:用于獲取網卡配置與網絡狀態等信息,語法格式為“ifconfig [參數] [網絡設備]”主要查看的就是網卡名稱、inet參數后面的IP地址、ether參數后面的網卡物理地址(又稱為MAC地址),以及RX、TX的接收數據包與發送數據包的個數及累計流量(即下面紅色的信息內容):
[root@bogon ~]# ifconfig ?
ens160:
flags=4163 ?mtu 1500
? ? ? ?inet
192.168.227.134
?netmask 255.255.255.0 ?broadcast 192.168.227.255
? ? ? ?inet6 fe80::20c:29ff:fe57:4d51 ?prefixlen 64 ?scopeid 0x20
? ? ? ?ether
00:0c:29:57:4d:51
?txqueuelen 1000 ?(Ethernet)
? ? ? ?RX packets 2178 ?bytes 194630 (
190.0 KiB
)
? ? ? ?RX errors 0 ?dropped 0 ?overruns 0 ?frame 0
? ? ? ?TX packets 1286 ?bytes 855375 (
835.3 KiB
)
? ? ? ?TX errors 0 ?dropped 0 overruns 0 ?carrier 0 ?collisions 0
uname命令:用于查看系統內核版本與系統架構等信息,語法格式為“uname [-a]”一般要固定搭配上-a參數來完整地查看當前系統的內核名稱、主機名、內核發行版本、節點名、壓制時間、硬件名稱、硬件平臺、處理器類型以及操作系統名稱等信息:
[root@bogon ~]# uname -a
Linux bogon 4.18.0-348.el8.x86_64 #1 SMP Tue Oct 19 15:14:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
查看當前系統版本的詳細信息:
[root@bogon ~]# cat /etc/redhat-release ?
CentOS Linux release 8.5.2111
uptime命令:用于查看系統的負載信息,顯示當前系統時間、系統已運行時間、啟用終端數量以及平均負載值等信息。平均負載值指的是系統在最近1分鐘、5分鐘、15分鐘內的壓力情況(下面紅色的信息部分),負載值越低越好(負載值保持在1左右,在生產環境中不要超過5就好):
[root@bogon ~]# uptime ?
10:01:39 up ?1:09, ?1 user, ?
load average: 0.00, 0.00, 0.00
free命令:用于顯示當前系統中內存的使用量信息,語法格式為“free [-h]”在使用free命令時,可以結合使用-h參數以更人性化的方式輸出當前內存的實時使用量信息:
[root@bogon ~]# free -h
內存總量 | 已用量 | 空閑量 | 共享使用的內存量 | 緩存的內存量 | 可用量 |
? ? ? ? ? ? ?total ? ? ? ?used ? ? ? ?free ? ? ?shared ?buff/cache ? available
Mem: ? ? ? ? ?1.7Gi ? ? ? 335Mi ? ? ? 1.0Gi ? ? ? 9.0Mi ? ? ? 432Mi ? ? ? 1.3Gi
Swap: ? ? ? ? 2.0Gi ? ? ? ? ?0B ? ? ? 2.0Gi
who命令:用于查看當前登入主機的用戶終端信息,有遠程用戶,還會顯示出來訪者的IP地址
[root@bogon ~]# who
登陸的用戶名 | 終端設備 | 登陸到系統的時間(遠程IP) |
root ? ? pts/0 ? ? ? ?2023-11-08 08:54 (192.168.227.1)
last命令:用于調取主機的被訪記錄
[root@bogon ~]# last
root ? ? pts/0 ? ? ? ?192.168.227.1 ? ?Wed Nov ?8 08:54 ? still logged in
reboot ? system boot ?4.18.0-348.el8.x Wed Nov ?8 08:52 ? still running
root ? ? pts/0 ? ? ? ?192.168.227.1 ? ?Tue Nov ?7 08:57 - crash ?(23:54)
root ? ? tty1 ? ? ? ? ? ? ? ? ? ? ? ? ?Tue Nov ?7 08:57 - crash ?(23:55)
ping命令:用于測試主機之間的網絡連通性,語法格式為“ping [參數] 主機地址”ping一下自己(上方紅色ip)
ping命令中參數及作用
參數 | 作用 |
-c | 總共發送次數 |
-l | 指定網卡名稱 |
-i | 每次間隔時間(秒) |
-W | 最長等待時間(秒) |
[root@bogon ~]# ping -c 2
192.168.227.134
PING 192.168.227.134 (192.168.227.134) 56(84) bytes of data.
64 bytes from 192.168.227.134: icmp_seq=1 ttl=64 time=0.055 ms
64 bytes from 192.168.227.134: icmp_seq=2 ttl=64 time=0.072 ms
--- 192.168.227.134 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1004ms
rtt min/avg/max/mdev = 0.048/0.049/0.050/0.001 ms
tracepath命令:用于顯示數據包到達目的主機時途中經過的所有路由信息,語法格式為“tracepath [參數] 域名”使用tracepath命令追蹤數據包到達目的主機時途中的所有路由信息,以分析是哪臺設備出了問題:
[root@bogon ~]# tracepath www.baidu.com
1?: [LOCALHOST] ? ? ? ? ? ? ? ? ? ? ?pmtu 1500
1: ?bogon ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0.284ms ?
1: ?bogon ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0.246ms ?
2: ?no reply
netstat命令:用于顯示如網絡連接、路由表、接口狀態等的網絡相關信息,語法格式為“netstat [參數]”可以查看到網絡狀態的方方面面信息:
netstat命令中參數及作用
-a | 顯示所有連接中的Socket |
-p | 顯示正在使用的Socket信息 |
-t | 顯示TCP協議的連接狀態 |
-u | 顯示UDP協議的連接狀態 |
-n | 使用IP地址,不使用域名 |
-l | 僅列出正在監聽的服務狀態 |
-i | 顯示網卡列表信息 |
-r | 顯示路由表信息 |
顯示詳細的網絡狀況:
[root@bogon ~]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address ? ? ? ? ? Foreign Address ? ? ? ? State ? ? ?
tcp ? ? ? ?0 ? ? ?0 0.0.0.0:sunrpc ? ? ? ? ?0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?
tcp ? ? ? ?0 ? ? ?0 bogon:domain ? ? ? ? ? ?0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?
tcp ? ? ? ?0 ? ? ?0 0.0.0.0:ssh ? ? ? ? ? ? 0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?
tcp ? ? ? ?0 ? ? ?0 localhost:ipp ? ? ? ? ? 0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?
tcp ? ? ? ?0 ? ? ?0 localhos:x11-ssh-offset 0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?
tcp ? ? ? ?0 ? ?172 bogon:ssh ? ? ? ? ? ? ? bogon:57126 ? ? ? ? ? ? ESTABLISHED
tcp6 ? ? ? 0 ? ? ?0 [::]:sunrpc ? ? ? ? ? ? [::]:* ? ? ? ? ? ? ? ? ?LISTEN ? ? ?
tcp6 ? ? ? 0 ? ? ?0 [::]:ssh ? ? ? ? ? ? ? ?[::]:* ? ? ? ? ? ? ? ? ?LISTEN ? ? ?
tcp6 ? ? ? 0 ? ? ?0 localhost:ipp ? ? ? ? ? [::]:* ? ? ? ? ? ? ? ? ?LISTEN ? ? ?
tcp6 ? ? ? 0 ? ? ?0 localhos:x11-ssh-offset [::]:* ? ? ? ? ? ? ? ? ?LISTEN ? ? ?
udp ? ? ? ?0 ? ? ?0 bogon:domain ? ? ? ? ? ?0.0.0.0:* ? ? ? ? ? ? ? ? ? ? ? ? ?
udp ? ? ? ?0 ? ? ?0 0.0.0.0:bootps ? ? ? ? ?0.0.0.0:* ?
顯示網卡列表:
[root@bogon ~]# netstat -i
Kernel Interface table
Iface ? ? ? ? ? ? MTU ? ?RX-OK RX-ERR RX-DRP RX-OVR ? ?TX-OK TX-ERR TX-DRP TX-OVR Flg
ens160 ? ? ? ? ? 1500 ? ? 3820 ? ? ?0 ? ? ?0 0 ? ? ? ? ?1913 ? ? ?0 ? ? ?0 ? ? ?0 BMRU
lo ? ? ? ? ? ? ?65536 ? ? ? 26 ? ? ?0 ? ? ?0 0 ? ? ? ? ? ?26 ? ? ?0 ? ? ?0 ? ? ?0 LRU
virbr0 ? ? ? ? ? 1500 ? ? ? ?0 ? ? ?0 ? ? ?0 0 ? ? ? ? ? ? 0 ? ? ?0 ? ? ?0 ? ? ?0 BMU
history命令:用于顯示執行過的命令歷史,語法格式為“history [-c]”
[root@bogon ~]# history ?
? ?1 ?ll
? ?2 ?pidof sshd
? ?3 ?ifconfig ?
? ?4 ?uname -a
? ?5 ?cat /etc/redhat-release ?
歷史命令會被保存到用戶家目錄中的.bash_history文件中。Linux系統中以點(.)開頭的文件均代表隱藏文件
[root@bogon ~]# cat ~/.bash_history
ll
清空當前用戶在本機上執行的Linux命令歷史記錄信息:
[root@bogon ~]# history -c
“!編碼數字”的命令格式重復執行某一次的命令記錄:
[root@bogon ~]# history
?106 ?ll
[root@bogon ~]# !106
ll
total 2167564
-rw-r--r--. ? 1 root ? ?root ? ? 587202560 Nov ?8 15:53 560
-rw-------. ? 1 root ? ?root ? ? ? ? ?2788 Nov ?9 ?2023 anaconda-ks.cfg
sosreport命令:用于收集系統配置及架構信息并輸出診斷文檔,簡單收集系統的運行狀態和服務配置信息,紅色的部分是收集好的資料壓縮文件以及校驗碼,將其發送給技術支持人員即可:
[root@bogon ~]# sosreport ?
Please note the 'sosreport' command has been deprecated in favor of the new 'sos' command, E.G. 'sos report'.
Redirecting to 'sos report '
sosreport (version 4.1)
This command will collect diagnostic and configuration information from
this CentOS system and installed applications.
An archive containing the collected information will be generated in
/var/tmp/sos.wasb39e_ and may be provided to a CentOS support
representative.
Any information provided to CentOS will be treated in accordance with
the published support policies at:
? ? ? ?Community Website :
https://www.centos.org/
The generated archive may contain data considered sensitive and its
content should be reviewed by the originating organization before being
passed to any third party.
No changes will be made to system configuration.
Press ENTER to continue, or CTRL-C to quit.
此處按下回車鍵進行確認
Please enter the case id that you are generating this report for []: ?
此處按下回車鍵進行確認
Setting up archive ...
Setting up plugins ...
...
Your sosreport has been generated and saved in:
/var/tmp/sosreport-bogon-2023-11-08-xvluhty.tar.xz
Size 15.10MiB
Owner root
sha256 83cef5b4398ad35aa4c06c3a0cbcfb2bacefc0faa2c03beb6df84220a34832d6
Please send this file to your support representative.
5. 查找定位文件命令
pwd命令:用于顯示用戶當前所處的工作目錄
[root@bogon ~]# pwd
/root
cd命令:用于切換當前的工作路徑,語法格式為“cd [參數] [目錄]”“cd -”命令返回到上一次所處的目錄,使用“cd ..”命令進入上級目錄,以及使用“cd ~”命令切換到當前用戶的家目錄,使用“cd ~username”命令切換到其他用戶的家目錄
[root@bogon ~]# cd /etc/
[root@bogon etc]# cd -
/root
[root@bogon ~]# cd ..
[root@bogon /]# cd ~
[root@bogon ~]# ?
ls命令:用于顯示目錄中的文件信息,語法格式為“ls [參數] [文件名稱]”使用ls命令的-a參數可以看到全部文件(包括隱藏文件),使用-l參數可以查看文件的屬性、大小等詳細信息,使用-d參數可以查看目錄屬性信息
[root@bogon ~]# ls -al
total 48
dr-xr-x---. ?5 root root ?280 Nov ?8 11:06 .
dr-xr-xr-x. 17 root root ?245 Nov ?6 14:39 ..
-rw-------. ?1 root root 2788 Nov ?6 11:37 anaconda-ks.cfg
-rw-------. ?1 root root ? ?3 Nov ?7 17:21 .bash_history
tree命令:用于以樹狀圖的形式列出目錄內容及結構
[root@bogon ~]# tree
.
├── anaconda-ks.cfg
└── original-ks.cfg
0 directories, 2 files
find命令:用于按照指定條件來查找文件所對應的位置,語法格式為“find [查找范圍] 尋找條件”
find命令中參數及作用
參數 | 作用 |
-name | 匹配名稱 |
-perm | 匹配權限(mode為完全匹配,-mode為包含即可) |
-user | 匹配所有者 |
-group | 匹配所有組 |
-mtime -n +n | 匹配修改內容的時間(-n指n天以內,+n指n天以前) |
-atime -n +n | 匹配訪問文件的時間(-n指n天以內,+n指n天以前) |
-ctime -n +n | 匹配修改文件權限的時間(-n指n天以內,+n指n天以前) |
-nouser | 匹配無所有者的文件 |
-nogroup | 匹配無所有組的文件 |
-newer f1 !f2 | 匹配比文件f1新但比f2舊的文件 |
-type b/d/c/p/l/f | 匹配文件類型(后面的字幕字母依次表示塊設備、目錄、字符設備、管道、鏈接文件、文本文件) |
-size | 匹配文件的大小(+50KB為查找超過50KB的文件,而-50KB為查找小于50KB的文件) |
-prune | 忽略某個目錄 |
-exec …… {}\; | 后面可跟用于進一步處理搜索結果的命令 |
獲取該目錄中所有以host開頭的文件列表
[root@bogon ~]# find /etc -name "host*" -print
/etc/host.conf
/etc/hosts
/etc/nvme/hostnqn
/etc/nvme/hostid
/etc/avahi/hosts
/etc/hostname
搜索權限中包括SUID權限的所有文件
[root@bogon ~]# find / -perm -4000 -print
/usr/bin/fusermount
/usr/bin/chage
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/mount
找出所有歸屬于子用戶的文件并復制到/root/findresults目錄中
先查一下自己的子用戶
[root@bogon ~]# cat /etc/passwd
centos8:x:1000:1000:centos_8:/home/centos8:/bin/bash
[root@bogon ~]# find / -user centos8 -exec cp -a {} /root/findresults/ \;
[root@bogon ~]# ll
total 20
-rw-------. ? 1 root ? ?root ? ?2788 Nov ?6 11:37 anaconda-ks.cfg
drwx------. 116 centos8 centos8 8192 Nov ?8 14:32 findresults
-rw-------. ? 1 root ? ?root ? ?2106 Nov ?6 11:37 original-ks.cfg
locate命令:用于按照名稱快速搜索文件所對應的位置,語法格式為“locate文件名稱”使用locate命令時,先使用updatedb命令生成一個索引庫文件,這個庫文件的名字是/var/lib/mlocate/mlocate.db,后續在使用locate命令搜索文件時就是在該庫中進行查找操作
[root@bogon ~]# updatedb
[root@bogon ~]# ll /var/lib/mlocate/mlocate.db ?
-rw-r-----. 1 root slocate 3764716 Nov ?8 14:48 /var/lib/mlocate/mlocate.db
[root@bogon ~]# locate whereis
/usr/bin/whereis
/usr/share/bash-completion/completions/whereis
/usr/share/man/man1/whereis.1.gz
whereis命令:用于按照名稱快速搜索二進制程序(命令)、源代碼以及幫助文件所對應的位置,語法格式為“whereis命令名稱”
[root@bogon ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
which命令:用于按照指定名稱快速搜索二進制程序(命令)所對應的位置,語法格式為“which命令名稱”主要為了找到命令本身所在的路徑
[root@bogon ~]# which locate
/usr/bin/locate
[root@bogon ~]# which whereis
/usr/bin/whereis
6. 文本文件編輯命令
cat命令:用于查看內容較少純文本文件,語法格式為“cat [參數] 文件名稱”-n參數表示展示行數
[root@bogon ~]# cat -n anaconda-ks.cfg ?
? ? 1 #version=RHEL8
? ? 2 # Reboot after installation
? ? 3 reboot
? ? 4 # Use graphical install
? ? 5 graphical
more命令:用于查看內容較多純文本文件,語法格式為“more [參數] 文件名稱”more命令會在最下面使用百分比的形式來提示您已經閱讀了多少內容;還可以使用空格鍵或回車鍵向下翻頁
[root@bogon ~]# more anaconda-ks.cfg ?
? ? #version=RHEL8
? ? # Reboot after installation
? ? reboot
? ? # Use graphical install
? ? graphical
...
--More--(60%)
head命令:用于查看純文本文件的前N行,語法格式為“head [參數] 文件名稱”
查看文本中前3行的內容:
[root@bogon ~]# head -n 3 anaconda-ks.cfg ?
#version=RHEL8
# Reboot after installation
reboot
tail命令:用于查看純文本文件的后N行或持續刷新文件的最新內容,語法格式為“tail [參數] 文件名稱”
查看文本中后3行的內容(最新):
[root@bogon ~]# tail -n 3 anaconda-ks.cfg ?
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
持續刷新一個文件的內容:
[root@bogon ~]# tail -f /var/log/messages
Nov ?8 14:44:42 bogon systemd[1]: Started Network Manager Script Dispatcher Service.
Nov ?8 14:44:42 bogon systemd[1]: systemd-tmpfiles-clean.service: Succeeded.
Nov ?8 14:44:42 bogon systemd[1]: Started Cleanup of Temporary Directories.
tr命令:用于替換文本內容中的字符,語法格式為“tr [原始字符] [目標字符]”
把某個文本內容中的英文全部替換為大寫:
[root@bogon ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z]
wc命令:用于統計指定文本文件的行數、字數或字節數,語法格式為“wc [參數] 文件名稱”
wc命令中參數及作用
參數 | 作用 |
-l | 只顯示行數 |
-w | 只顯示單詞數 |
-c | 只顯示字節數 |
統計當前系統中有多少個用戶
[root@bogon ~]# wc -l /etc/passwd
47 /etc/passwd
stat命令:用于查看文件的具體存儲細節和時間等信息,語法格式為“stat文件名稱”Linux系統中的文件包含3種時間狀態,分別是Access Time(內容最后一次被訪問的時間,簡稱為Atime),Modify Time(內容最后一次被修改的時間,簡稱為Mtime)以及Change Time(文件屬性最后一次被修改的時間,簡稱為Ctime)
使用state命令查看文件的這3種時間狀態信息:
[root@bogon ~]# stat anaconda-ks.cfg
?File: anaconda-ks.cfg
?Size: 2788 ? ? ? Blocks: 8 ? ? ? ? ?IO Block: 4096 ? regular file
Device: 10303h/66307d Inode: 35912821 ? ?Links: 1
Access: (0600/-rw-------) ?Uid: ( ? ?0/ ? ?root) ? Gid: ( ? ?0/ ? ?root)
Context: system_u:object_r:admin_home_t:s0
Access: 2023-11-08 11:05:37.154849436 +0800
Modify: 2023-11-06 11:37:22.053500992 +0800
Change: 2023-11-06 11:37:22.053500992 +0800
Birth: 2023-11-06 11:37:21.963500146 +0800
grep命令:用于按行提取文本內容,語法格式為“grep [參數] 文件名稱”
-n參數用來顯示搜索到的信息的行號
-v參數用于反選信息(即沒有包含關鍵詞的所有信息行)
grep命令中參數及其作用
參數 | 作用 |
-b | 將可執行文件(binary)當作文本文件(text)來搜索 |
-c | 僅顯示找到的行數 |
-i | 忽略大小寫 |
-n | 顯示行號 |
-v | 反向選擇——僅列出沒有“關鍵詞”的行。 |
使用grep命令查找出當前系統中不允許登錄系統的所有用戶的信息:
[root@bogon ~]# grep /sbin/nologin /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
cut命令:用于按“列”提取文本內容,語法格式為“cut [參數] 文件名稱”
提取出passwd文件中的用戶名信息,即提取以冒號(:)為間隔符號的第一列內容:
[root@bogon ~]# cut -d : -f 1 /etc/passwd
root
bin
daemon
diff命令:用于比較多個文件之間內容的差異,語法格式為“diff [參數] 文件名稱A 文件名稱B”使用--brief參數來確認兩個文件是否相同,使用-c參數來詳細比較出多個文件的差異之處
做倆文件,復制一樣的內容,稍微改一行
[root@bogon ~]# vim test1
[root@bogon ~]# vim test2
[root@bogon ~]# diff --brief test1 test2
Files test1 and test2 differ
[root@bogon ~]# diff -c test1 test2
*** test1 2023-11-08 15:24:51.300664734 +0800
--- test2 2023-11-08 15:25:20.331739086 +0800
***************
*** 2,8 ****
?bin
?daemon
?adm
! lp
?sync
?shutdown
?halt
--- 2,8 ----
?bin
?daemon
?adm
! LP
?sync
?shutdown
?halt
uniq命令:用于去除文本中連續的重復行,語法格式為“uniq [參數] 文件名稱”
[root@bogon ~]# uniq test2
root
bin
daemon
sort命令:用于對文本內容進行再排序,語法格式為“sort [參數] 文件名稱”
sort命令中參數及作用
參數 | 作用 |
-f | 忽略大小寫 |
-b | 忽略縮進與空格 |
-n | 以數值型排序 |
-r | 反向排序 |
-u | 去除重復行 |
-t | 指定間隔符 |
-k | 設置字段范圍 |
默認會按照字母順序進行排序:
[root@bogon ~]# sort test1
-u參數進行去重操作:
[root@bogon ~]# sort -u test1
-n參數進行數字排序操作:
[root@bogon ~]# sort -n test1
用-t參數指定間隔符:,用-k參數指定第3列,用-n參數進行數字排序/etc/passwd文件:
[root@bogon ~]# sort -t : -k 3 -n /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
7. 文件目錄管理命令
touch命令:用于創建空白文件或設置文件的時間,語法格式為“touch [參數] 文件名稱”
touch命令中參數及作用
參數 | 作用 |
-a | 僅修改“讀取時間”(atime) |
-m | 僅修改“修改時間”(mtime) |
-d | 同時修改atime與mtime |
用touch命令把修改后的文件時間設置成修改之前的時間(隱藏文件修改事實):
[root@bogon ~]# touch -d "2023-11-09 15:44" anaconda-ks.cfg
[root@bogon ~]# ls -l anaconda-ks.cfg ?
-rw-------. 1 root root 2788 Nov ?9 ?2023 anaconda-ks.cfg
mkdir命令:用于創建空白的目錄,語法格式為“mkdir [參數] 目錄名稱”
-p參數來遞歸創建出具有嵌套層疊關系的文件目錄:
[root@bogon ~]# mkdir -p /a/b/c
[root@bogon ~]# tree /a
/a
└── b
? ?└── c
2 directories, 0 files
cp命令:用于復制文件或目錄,語法格式為“cp [參數] 源文件名稱 目標文件名稱”目標文件是目錄,則會把源文件復制到該目錄中;目標文件也是普通文件,則會詢問是否要覆蓋它;目標文件不存在,則執行正常的復制操作
?cp命令中參數及作用
參數 | 作用 |
-p | 保留原始文件的屬性 |
-d | 若對象為“鏈接文件”,則保留該“鏈接文件”的屬性 |
-r | 遞歸持續復制(用于目錄) |
-i | 若目標文件存在則詢問是否覆蓋 |
-a | 相當于-pdr(p、d、r為上述參數) |
[root@bogon ~]# ll test1
-rw-r--r--. 1 root root 48 Nov ?8 15:24 test1
[root@bogon ~]# cp -a test1 test2
cp: overwrite 'test2'? ?
[root@bogon ~]# ll test2
-rw-r--r--. 1 root root 48 Nov ?8 15:25 test2
mv命令:用于剪切或重命名文件,語法格式為“mv [參數] 源文件名稱 目標文件名稱”默認會把源文件刪除,只保留剪切后的文件。如果在同一個目錄中將某個文件剪切后還粘貼到當前目錄下,其實也就是對該文件進行了重命名操作:
[root@bogon ~]# mv test1 test3
[root@bogon ~]# ll test3
-rw-r--r--. 1 root root 48 Nov ?8 15:24 test3
rm命令:用于刪除文件或目錄,語法格式為“rm [參數] 文件 ? ?名稱”
rm命令中參數及作用
參數 | 作用 |
-f | 強制執行 |
-i | 刪除前詢問 |
-r | 刪除目錄 |
-v | 顯示過程 |
rm命令后-f參數來強制刪除。-r參數刪除目錄:
[root@bogon ~]# rm -rf test3
[root@bogon ~]# ll test3
ls: cannot access 'test3': No such file or directory
dd命令:用于按照指定大小和個數的數據塊來復制文件或轉換文件,語法格式為“dd if=參數值of=參數值count=參數值bs=參數值”
?dd命令中參數及作用
參數 | 作用 |
if | 輸入的文件名稱 |
of | 輸出的文件名稱 |
bs | 設置每個“塊”的大小 |
count | 設置要復制“塊”的個數 |
dd命令從/dev/zero設備文件中取出一個大小為560MB的數據塊,然后保存成名為560的文件:
[root@bogon ~]# dd if=/dev/zero of=560 count=1 bs=560M
1+0 records in
1+0 records out
587202560 bytes (587 MB, 560 MiB) copied, 3.56762 s, 165 MB/s
[root@bogon ~]# ls -hl 560
-rw-r--r--. 1 root root 560M Nov ?8 15:53 560
使用dd命令來壓制出光盤鏡像文件(首先確保虛擬機設置設備連接且使用iso映像文件):
(時間太長我直接ctrl+c終止了,需要打包的可以試試應該是10.1G)
[root@bogon ~]# dd if=/dev/cdrom of=RHEL-server-8.5.iso
3188193+0 records in
3188192+0 records out
1632354304 bytes (1.6 GB, 1.5 GiB) copied, 541.769 s, 3.0 MB/s
file命令:用于查看文件的類型,語法格式為“file文件名稱”
使用file命令來查看文件類型:
[root@bogon ~]# file anaconda-ks.cfg ?
anaconda-ks.cfg: ASCII text
tar命令:用于對文件進行打包壓縮或解壓,語法格式為“tar參數 文件名稱”Linux系統中,主要使用的是.tar、.tar.gz或.tar.bz2格式
tar命令中參數及作用
參數 | 作用 |
-c | 創建壓縮文件 |
-x | 解開壓縮文件 |
-t | 查看壓縮包內有哪些文件 |
-z | 用Gzip壓縮或解壓 |
-j | 用bzip2壓縮或解壓 |
-v | 顯示壓縮或解壓的過程 |
-f | 目標文件名 |
-p | 保留原始的權限與屬性 |
-P | 使用絕對路徑來壓縮 |
-C | 指定解壓到的目錄 |
“tar -czvf壓縮包名稱.tar.gz要打包的目錄”命令把指定的文件進行打包壓縮;解壓命令為“tar -xzvf壓縮包名稱.tar.gz”
[root@bogon ~]# tar -zcvf test.tar.gz test2 ?
test2
[root@bogon ~]# tar -zxvf test.tar.gz
test2
上一章把多用戶圖形改成了文本,有好多人不適應,所以我們也可以通過軟鏈換回來,命令如下:
[root@bogon ~]# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target