Linux Shell介紹:常用命令整理
作者:Reathin
Linux內核版本分為三個部分,主版本號、次版本號、末版本號,次版本號是奇數為開發板,偶數為穩定版。
一、Linux
1.Linux版本介紹
內核版本分為三個部分,主版本號、次版本號、末版本號,次版本號是奇數為開發板,偶數為穩定版。
發行版本:
- RedHat:經過專業測試
- Fedora:社區發行,版本較新,但是沒有經過專業測試。(也是redhat發行)
- CentOS:用RedHat的源代碼編譯,但是把RedHat的商標等去掉。但是沒有一些技術支持。
- 桌面安裝:Debian,Ubuntu等。
2.常見目錄
/ 根目錄
/root root用戶目錄
/home/username 普通用戶目錄
/etc 配置文件目錄
/bin 命令目錄
/sbin 管理命令目錄
/usr/bin | /usr/sbin 系統預裝的其他命令
二、系統命令
1.幫助命令
man 是 manual 的縮寫
man 幫助用法演示
#man ls
man 也是一條命令,分為9章,可以使用man命令獲得man的幫助
#man 7 man
help
shell(命令解釋器)自帶的命令成為內部命令,其他的是外部命令
內部命令使用 help 幫助
#help cd
外部命令使用help幫助
#ls --help
可以通過type來判斷一個命令是內部還是外部命令
#type ls
#type cd
2.文件管理
顯示當前的目錄:
pwd 顯示當前的目錄名稱
文件查看:
ls 查看當前目錄下的文件
ls / /root 這樣會同時查看根目錄和 /root目錄下的文件
常用參數
-l 長格式顯示文件
-a 顯示隱藏文件
-r 逆序顯示(默認按照文件名排序)
-t 按照時間順序顯示 ls -l -r -t (會按照時間逆向排序) ls -lrt
-R 遞歸顯示 -h 人性化顯示、 -d 只顯示目錄
更改當前的操作目錄:
cd 更改當前的操作目錄
cd /path/to/... 絕對路徑
cd ./path/to/... 相對路徑
cd ../path/to/... 相對路徑
目錄文件的創建與刪除:
mkdir 建立空目錄
mkdir a
常用參數
-p 遞歸創建多級文件夾
rmdir 刪除空文件夾
rmdir a
rm 可以刪除非空目錄及文件
常用參數
-r 刪除目錄
-f 強制刪除,不提示
需要注意,rm -rf 后面可以跟多個目錄
不要出現 rm -rf / usr 這種,會從根目錄開始刪除
復制和移動目錄:
cp 復制文件和目錄
cp /root/a /tmp
常用參數
-r/R 遞歸復制目錄
-v 顯示過程
-p 保留文件原有更新時間(屬性)
-a 時間戳+所有權+復制連接文件屬性而非檔案本身 -f 強行覆蓋 -i 覆蓋之前先行提示
mv 移動文件或者重命名
mv /a /other
mv /a /tmp
mv /a /tmp/b(移動+重命名)
常用參數
-i 覆蓋文件前提示
3.通配符
常用通配符:
* 匹配任何字符串
? 匹配1個字符串
[xyz] 匹配xyz任意一個字符
[a-z] 匹配一個范圍
[!xyz]或者[^xyz] 不匹配
4.文本內容查看
cat 文本內容顯示到終端
顯示全部
head 查看文件開頭
head test.txt 默認查看前10行
head -5 test.txt
head -c 20 runoob_notes.log 顯示文件前 20 個字節
tail 查看文件結尾
tail -1000f catalina.out
常用參數
-f 文件內容更新后,顯示信息同步更新
wc 統計文件內容信息
wc -l /tmp/test.txt 查看文件有多少行
-c或--bytes或——chars:只顯示Bytes數;
-l或——lines:只顯示列數;
-w或——words:只顯示字數。
more 分行顯示
less
5.打包和壓縮
最早的Linux備份介質是磁帶,使用的命令是tar。可以打包后的磁帶文件進行壓縮儲存,壓縮的命令是 gzip 和 bzip2,經常使用的擴展名是 .tar.gz .tar.bz2 .tgz。
tar 打包命令
常用參數
c 打包
x 解包
f 指定操作類型為文件 v 顯示進度 P 使用絕對路徑
打包
tar cf /tmp/etc-backup.tar /etc 把 /etc 這個文件夾打包放在/tmp/etc-backup.tar會提示,但是也能成功:tar: Removing leading `/' from member names
tar cPf /tmp/etc-backup.tar /etc 使用絕對路徑 (沒有提示)
tar czf /tmp/etc-backup.tar.gz /etc (tar集成了gzip和bzip2)
tar cjf /tmp/etc-backup.tar.bz2 /etc (壓縮比例更高)
解包
tar xf /tmp/etc-backup.tar -C /root 把 tar包解壓到 /root 目錄下
tar zxf /tmp/etc-backup.tar.gz -C /etc
tar zjf /tmp/etc-backup.tar.gz -C /etc
6.vi
四種模式:
正常模式(Normal-mode)
插入模式(Insert-mode)
命令模式(Command-mode)
可視模式(Visual-mode)
i 進入插入模式
i是當前光標
I是光標當行開頭
a是光標后一位
A是光標當行結尾
o下一行,會產生一個空行
O上一行,會產生一個空行
v進入可視模式
:進入命令模式
esc返回正常模式
正常模式下:
hjkl可以控制上下左右
yy表示復制當行,p可以粘貼
3yy表示復制三行
y$ 表示復制從光標到當行結尾
dd d$表示剪切
操作錯誤,u可以撤銷,ctrl+r重做
x表示刪除當前光標的字符
r可以替換當前字符
:set nu 可以查看目前是第幾行
數字 + G可以到數字對應的行
g移動到第一行
G移動到最后一行
^來到光標所在行的開頭,$來到光標所在行的結尾
命令模式
:w /root/test.txt 文件新建的,可以保存一個新文件
:w 文件已經存在的情況下,保存
:wq 保存退出
:q! 強制退出
:! 執行linux命令,看完后回車重新回到vim
/x 查找x字符,n查找下一個,shift+n上一個
:s/old/new 用新字符替換舊字符(只正對光標所在的行)
:%s/old/new 用新字符替換舊字符(整個文本,但只替換一個)
:%s/old/new/g 用新字符替換舊字符(整個文本,全部替換)
:3,5s/x/X/g 3-5行內全部替換,替換一個就去掉g
:set nu 顯示行號
:set nonu 不顯示行號
以上是單次修改的,如果要修改默認配置
vim /etc/vimrc
可視模式
三種進入可視模式的方式
v 字符可視模式
V 行可視模式
ctrl + v 塊可視模式
配合d和I(大寫i)命令可以進行塊的便利操作
需要在塊的所有行之前加入一些字符,選中塊,I的時候會在選中的塊的第一行的第一個光標處,輸入字符,連續兩次esc。
選中塊,d,然后選中的塊就會被刪除
7.用戶與權限管理
useradd 新建用戶
useradd user1 (可以用 id user1 來驗證是否存在)
創建一個用戶后,自動在 /home建立Home目錄,并且創建一些隱藏文件。同時,在 /etc/passwd 這個文件里會加入新用戶user1的數據,/etc/shadow里面也有會相關數據(密碼相關)。如果沒有組的話,創建一個同名的組。
userdel 刪除用戶
userdel user1
userdel -r user1 同時刪除Home目錄
passwd 修改用戶密碼
passwd user1
passwd更改當前用戶密碼
/etc/passwd 和 /etc/shadow 里面的數據也被刪除
usermod 修改一個用戶賬戶
usermod -d /home/other user1 Home目錄從 /home/user1 改成 /home/other
chage 修改用戶生命周期 設置用戶密碼的過期時間,甚至用戶本身的過期時間
8.組管理命令
groupadd 新建用戶組
groupadd group1
useradd user1
usermod -g group1 user1 把user1這個用戶的組改成group1
useradd -g group1 user2 新建用戶user2時就把它放到group1組下
groupdel 刪除用戶組 groupdel group1 刪除組group1
9.用戶切換
su 切換用戶
su - USERNAME 使用 login shell 方式切換用戶
su USERNAME 不完全切換,比如還是在 /root下而不會自動跳轉到用戶家目錄
sudo 以其他用戶身份執行命令
visudo 設置需要使用sudo的用戶(組)
10.用戶和用戶組的配置文件介紹
/etc/passwd 用戶配置文件,7個字段
user3:x:1003:1003::/home/user3:bin/bash
user3:用戶名稱
x:是否需要密碼驗證,x表示需要,空表示不需要
1003:用戶的uid,用戶的id信息,唯一識別用戶的標識。root是0。
1003:用戶的gid,表示組id信息
第五個字段:注釋
/home/user3:Home目錄
/bin/bash:用戶登錄后的命令解釋器。/sbin/nologin 表示不能登錄
/etc/shadow 保存用戶和用戶密碼相關信息的
第一個字段:用戶名稱
第二個字段:用戶加密過后的密碼(看到也沒用,經過處理,即使相同的密碼也會顯示不同)
/etc/group 用戶組相關的配置文件,4個字段
group:x:10:another
group:組的名稱
x:是否需要密碼驗證
10:gid
another:其他組設置,說明another這個用戶的第二個組是group比如輸入 id user1uid=1001(user1) gid=1001(group1) 組=1001(group1)id anotheruid=1002(another) gid=1002(another) 組=1003(group) 查找another信息,發現他的第二個組是group
11.文件和目錄的權限表示方法
文件類型
- 普通文件
d 目錄文件
b 塊特殊文件
c 字符特殊文件
l 符號鏈接
f 命名管道
s 套接字文件
文件權限的表示方法
字符權限表示方法
r 讀
w 寫
x 執行
數字權限的表示方法
r=4
w=2
x=1
文件權限的表示方法
rwxrwxrwx
第一個表示文件屬主的權限,第二個表示文件屬組的權限,第三個表示其他用戶的權限
創建新文件有默認權限,根據umask值計算,屬主和屬組根據當前進程的用戶來設定
目錄權限的標識方法
x 進入目錄
rx 顯示目錄內的文件名
wx 修改目錄內的文件名
12.文件權限的修改方法和數字表示方法
修改權限命令(測試的時候別用root,root不受限制)
chmod 修改文件、目錄權限
chmod u+x /tmp/testfile u表示屬主
chmod u=rwx /tmp/testfile
chmod g-r /tmp/testfile g表示屬組
chmod 0-r /tmp/testfile o表示其他用戶
chmod a+r /tmp/testfile a表示所有
chmod 755 /tmp/testfile如果屬主沒有權限,所屬的組有權限,以屬主為準,還是沒有權限。
chown 更改屬主、屬組
chown user1 /test 把test這個目錄的屬主改成user1
chown :group /test 把test這個目錄的屬組給成group chown user1:group /test 一起修改
chgrp 可以單獨更改屬組、不常用
linux一般創建一個文件默認會賦予666權限,然后根據用的umask值來計算。
用戶默認umask值為022,所以一般是 666-022=644,對應rw-r--r--
13.特殊權限
SUID 用于二進制可執行文件,執行命令時取得文件屬主權限
如,/usr/bin/passwd
SGID 用于目錄,在該目錄下創建新的文件和目錄,權限自動更改為該目錄的屬組
文件共享時使用
SBIT 用于目錄,該目錄下新建的文件和目錄,僅root和自己可以刪除
如 /tmp
三、網絡管理
1.網絡狀態查看
net-tools VS iproute
1. net-tools
ifconfig
route
netstat
2. iproute2
ip
ss
網卡名稱:
ifconfig查看網卡名稱
· eth0 第一塊網卡(網絡接口)
· 你的第一個網絡接口可能叫做下面的名字
· eno1 板載網卡
· ens33 PCI-E網卡
· enp0s3 無法獲取物理信息的 PCI-E 網卡
· CentOS7使用了一致性網絡設備命名,以上都不匹配則使用eth0
當工作中大量管理網卡,所有設備的網卡最好都是以 eth0 命名,這樣可以批量操作。
網絡接口命名修改
網卡命名規則受 biosdevname 和 net.ifnames 兩個參數影響
編輯 /etc/default/grup 文件,增加 biosdevname=0 net.ifnames=0
更新 grub
# grub2-mkconfig -o /boot/grub2/grub.cfg
重啟
# reboot
組合,biosdevname=0 net.ifnames=0,則網卡名為 eth0
biosdevname=1 net.ifnames=0,則網卡名為 em1
biosdevname=0 net.ifnames=1,則網卡名為 ens33
ifconfig:
普通用戶要使用ifconfig,要使用 /sbin/ifconfig
如果只想要看某一張網卡,可以 ifconfig 網卡名
mii-tool eth0 查看網卡物理連接情況
route -n 查看網關(路由),使用 -n 參數不解析主機名(把ip解析成域名)
網絡配置命令:
ifconfig <接口> <IP地址> [netmask 子網掩碼] 設置網卡的ip地址
ifup <接口> 啟用網卡
ifdown <接口> 禁用網卡
網關配置命令:
添加網關
route add default gw <網關ip>
route add -host <指定ip> gw <網關ip>
route add -net <指定網段> netmask <子網掩碼> gw <網關ip>
2.網絡故障排除
ping 檢測是否連接到主機
ping www.baidu.com
traceroute 跟蹤當前主機到目標主機的網絡狀態,-w 1超時最多等1秒
traceroute -w 1 www.baidu.com
mtr 顯示自己主機的網絡狀態
nslookup 域名解析成ip
nslooup www.baidu.com
telnet 檢測端口
telnet www.baidu.com 80
tcdump 網絡抓包 -i any 抓取所有網卡里的數據包,-n 把域名解析成 ip ,port 80 抓取指定端口 host 10.0.0.1 抓取當前主機到某個主機的數據包
tcpdump -i any -n port 80
tcpdump -i any -n host 10.0.0.1
tcpdump -i any -n host 10.0.0.1 and port 80
tcpdump -i any -n host 10.0.0.1 and port 80 -w /tmp/filename 捕獲并且保存
netstat 監聽地址 -n 域名轉換,-t 顯示tcp ,-p 進程 ,-l tcp狀態 listen
netstat -ntpl
ss 跟netstat一樣,參數也一樣,顯示的格式不一樣
網絡服務管理程序分為兩種,分別是 SysV 和 systemd(centos7)
service network status|start|stop|restart
網絡配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0 (網卡配置項)
/etc/hosts
四、軟件包管理
1.rpm
rpm 命令常用參數
-q 查詢軟件包 rpm -qa 查詢所有軟件包 rpm -q vim-common 查詢某個軟件包
-i 安裝軟件包 rpm -i vim-enhanced-7.4.160-5.el7.x84_64.rpm (要全稱)
-e 卸載軟件包 rpm -e vim-enhanced (只要名字,不需要版本號等)用 rpm 安裝的問題:如果一個軟件包依賴其他軟件包,那么就會安裝失敗。需要操作者自己解決依賴關系。
2.yum
CentOS yum源
http://mirror.centos.org/centos/7/
國內鏡像
https://opsx.alibaba.com/mirror
yum 配置文件
/etc/yum.repos.d/CentOS-Base.repo
可以修改配置文件
[base]
name=CentOS-$releasever - Base -mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
或者直接用別人已經寫好的配置文件
wget -O /etc/yum.repo.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo需要清除緩存yum makecache
常用選項
install 安裝軟件包
remove 卸載軟件包
list |grouplist 查看軟件包
update 升級軟件包
3.其他安裝方式
二進制安裝
源代碼編譯安裝
wget https://openresty.org/download/openresty-1.15.8.1.tar.gz
tar zxf openresty-VERSION.tar.gz
cd openresty-VERSION/
./configure --prefix=/usr/local/openresty
make -j2 (用2核編譯)
make isntall
4.升級內核
rpm 格式內核
查看內核版本
uname -r
升級內核版本
yum install kernel-3.10.0 這種方式一般不能升級到最新
epel軟件倉庫會有較高的軟件版本。yum install epel-release -y
升級已安裝的其他軟件包和補丁
yum update 除了升級內核,還會升級軟件包。正常不要使用。
源代碼編譯安裝內核
yum install gcc gcc-c++ make ncurses-devel openssl-devel elfutils-libelf-devel
下載并解壓縮內核
https://www.kernel.org
tar xvf linux-5.1.10.tar.xz -C /usr/src/kernels
配置內核編譯參數
cd /usr/src/kernels/linux-5.1.10/
make menuconfig | allyesconfig | allnoconfig
make allyesconfig (無腦全選)
使用當前系統內核配置
cp /boot/config-kernelversion.platform /usr/src/kernels/linux-5.1.10/.config
查看cpu
lscpu
編譯
make j2 all
安裝內核
make modules_install
make install
五、進程管理
1.進程的概念和查看進程
進程-運行中的程序,從程序開始運行到終止的整個生命周期是可管理的
查看命令
ps
-e 表示所有的終端運行的進程
-f 顯示更多信息,比如 UID、PPID(父進程)、CMD(命令的完整路徑)
-L 多顯示 LWP ,線程信息
ps -eLf 常用命令
pstree 查看進程樹
top 動態查看進程信息top -p 進程號
結論:
進程也是樹形結構
進程和權限有著密不可分的關系
2.進程的優先級調整
調整優先級
nice 范圍從 -20 到 19,值越小優先級越高,搶占資源就越多
nice -n 10 ./rest.sh 啟動的時候調整為 10
renice 重新設置優先級
renice -n 15 19312 已經處于啟動的情況下進行調整。根據進程號
進程的作業控制
&符號,后臺運行
./test.sh &
jobs 把處于后臺運行的程序調到前臺顯示
jobs 能得到一個編號
fg 編號,可以調到前臺
ctrl +z,把已經處于前臺的程序調到后臺,狀態會stop
3.信號
信號是進程間通信方式之一,典型用法是:終端用戶輸入中斷命令,通過信號機制停止一個程序的運行。
使用信號的常用快捷鍵和命令
kill -l 查看所有的信號
SIGINT 通知前臺進程組終止進程 ctrl + c,2號信號
SIGKILL 立即結束程序,不能被阻塞和處理 kill -9 pid ,9號信號
4.守護進程和系統日志
守護進程(精靈進程)
使用 nohup 與 & 符號配合運行一個命令 (nohup進程不是守護進程)
nohup 命令使進程忽略 hangup(掛起)信號。關掉終端這個進程依然可以運行,忽略輸入并且把輸出打印到 nohup.out
守護進程(daemon)和一般進程有什么差別呢?
開機自啟,守護進程不需要終端,輸出可以打印到特殊的文件中,進程所占用的目錄是根目錄。cd /proc/ 這個目錄是內存信息,相應的進程會有進程號同名的目錄。
使用 screen 命令,進入screen環境后,如果遠程連接斷掉了,可以通過screen恢復工作現場
screen 進入 screen 環境
ctrl +a然后再單獨按d退出(detached)screen 環境
screen -ls 查看 screen 的會話
screen -r sessionid 恢復會話系統日志文件 /var/log系統常規日志:messages內核運行情況:dmesg安全日志 secure定時任務日志 cron
六、內存和磁盤管理
1.內存和磁盤使用率查看
內存使用率查看
free
-m 以兆的方式顯示
-g 以G的方式顯示,但是會被四舍五入。一般不用
top
磁盤使用率的查看
fdisk
-l 查看
磁盤分區一塊硬盤最多分15個分區
df 既能夠看到分區,又能夠看到掛載到的目錄
-h 人性化可讀
du (實際占用的空間)
-h 人性化顯示
-s 只顯示總計
du與ls的區別
du 是實際占用的,ls算上空洞數據。
2.常見文件系統
Linux 支持多種文件系統,常見的有:
ext4(centos6)
xfs(centos7)
NTFS(需安裝額外軟件,window常用,有版權)
3.磁盤分區和掛載
常用命令
fdisk
mkfs
parted
mount
常見配置文件
/etc/fstab
用fdisk創建分區(一個硬盤設備可以創建多個分區,也可以創建一個)
1:fdisk -l 查看有幾個硬盤設備及分區
2:fdisk /dev/sdc (比如有設備sdc,則可以針對sdc進行分區)
3:之后 m 鍵是幫助
4:n 表示新建一個分區
5:新建分區時,需要選擇主分區和擴展分區,其中 p表示主分區,最多有4個。e表示擴展分區(里面可以建立邏輯分區)。一般把一塊硬盤劃分為一個主分區。使用擴展分區時,只能建立3個主分區。
6:選擇區分編號1-4
7:指定分區扇區大小,默認2048
8:指定分區大小。默認全部。可以 + 20G等可以選擇分區大小
9:q 表示退出,分區不生效。w 表示生效
建立完分區后,需要對分區進行格式化。
mkfs.ext4 mkfs.xfs等命令
mkfs.ext4 /dev/sdc1
然后要進行操作,linux里都是文件級別的操作,需要掛載到某個目錄下
mkdir /mnt/sdc1
mount /dev/sdc1 /mnt/sdc1 掛載上去
對/mnt/sdc1的讀寫就會落入sdc1設備上
1、一個硬盤
2、進行分區
3、格式化
4、掛載
5、對指定目錄進行操作
需要注意的事情:
如果一個硬盤大于 2T ,不能使用 fdisk 進行分區,需要使用 parted
parted /dev/sdd
help 獲取幫助
mount 進行掛載是臨時的,不是固化的
vim /etc/fstab
在文件中新增下面一句話
/dev/sdc1 /mnt/sdc1 ext4 defaults(表示權限)0 0
4.系統綜合狀態查詢
使用 sar 命令查看系統綜合狀態
sar -u 1 10 CPU的查看,每隔1秒做采樣,采樣10次,
sar -r 1 10 看內存
sar -b 1 10 IO的情況(磁盤讀寫)
sar -d 1 10 查看每塊磁盤的讀寫
sar -q 1 10 查看進程
使用第三方命令查看網絡流量
yum install epel-release
yum install iftop (網絡情況)
iftop -p (默認eth0)
責任編輯:趙寧寧
來源:
沐雨花飛蝶