一、權限擴展
文件權限管理之: 隱藏權限防止root誤刪除
文件屬性添加與查看
[root@linux-server ~]# touch file1 file2 file3
1.查看文件屬性
[root@linux-server ~]# lsattr file1 file2 file3
---------------- file1
---------------- file2
---------------- file3
2.設置權限
[root@linux-server ~]# chattr +a file1 #不允許修改,只允許追加
[root@linux-server ~]# chattr +i file2 #不允許做任何操作
[root@linux-server ~]# chattr +A file3
[root@linux-server ~]# lsattr file1 file2 file3
-----a---------- file1
----i----------- file2
-------A-------- file3
i:即Immutable,系統不允許對這個文件進行任何的修改
a:即Append Only,系統只允許在這個文件之后追加數據,不允許任何覆蓋這個文件
A:即Atime,告訴系統不要修改對這個文件的最后訪問時間
測試效果
[root@linux-server ~]# echo 111 > file1 #覆蓋,只允許追加
-bash: file1: Operation not permitted
[root@linux-server ~]# rm -rf file1 #不能刪除
rm: cannot remove ‘file1’: Operation not permitted
[root@linux-server ~]# echo 111 >> file1 #追加
?
[root@linux-server ~]# echo 111 > file2
-bash: file2: Permission denied
[root@linux-server ~]# echo 111 >> file2
-bash: file2: Permission denied
[root@linux-server ~]# rm -rf file2
rm: cannot remove ‘file2’: Operation not permitted
[root@linux-server ~]# mv file2 file4
mv: cannot move ‘file2’ to ‘file4’: Operation not permitted
?
取消權限
[root@linux-server ~]# chattr -a file1
[root@linux-server ~]# chattr -i file2
二、進程管理
關于進程 process
What is a process? 什么是進程 Process states 進程狀態
什么是進程?
進程是已啟動的可執行程序的運行實例,是程序運行的過程,動態的,有生命周期及運行狀態。程序: 二進制文件,靜態 /bin/date, /usr/sbin/httpd,/usr/sbin/sshd, /usr/sbin/nginx
查看進程 process
靜態查看進程
[root@linux-server ~]# ps aux | less
參數解釋:
ps :process nsapashot
a 只能查看系統里面運行的所有終端進程
u 顯示進程擁有者
x 顯示系統內所有進程
f 顯示進程之間的父子關系
-------------------
[root@linux-server ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
============================================================================
USER: #運行進程的用戶
PID: #進程ID
%CPU: #CPU占用率
%MEM: #內存占用率
VSZ 進程占用的虛擬內存大小
RSS 占用的物理內存大小
STAT: #進程狀態 ---了解
? 表示沒有占用終端
R 運行
S 可中斷睡眠 Sleep
D 不可中斷睡眠
T 停止的進程
Z 僵尸進程
X 死掉的進程
START: #進程的啟動時間
TIME: #進程占用CPU的總時間
COMMAND: #進程文件,進程名
?
進程狀態--了解
Sl 以線程的方式運行
Ss s進程的領導者,父進程
R+ +表示是前臺的進程組
S< <優先級較高的進程
SN N優先級較低的進程查看tty的方法:
[root@linux-server ~]# tty
? 表示這個進程開啟的時候沒有占用終端
查看進程(二)
[root@linux-server ~]# ps -ef
參數解釋:
-e 顯示所有進程
-l 長格式顯示
-f 完整格式
UID ? ? ? 用戶ID PID ? ? ? 進程ID PPID ? ? 父進程ID C ? ? ? ? CPU占用率 STIME ? ? 開始時間 TTY ? ? ? 開始此進程的TTY----終端設備 TIME ? ? 此進程運行的總時間 CMD ? ? ? 命令名
查看單個PID
[root@linux-server ~]# yum install -y httpd #安裝apache軟件
[root@linux-server ~]# systemctl start httpd #啟動
[root@linux-server ~]# cat /var/run/httpd/httpd.pid
1043
查看指定PID
[root@linux-server ~]# ps aux | grep sshd
root 1043 0.0 0.2 105996 4120 ? Ss 01:32 0:00 /usr/sbin/sshd -D
grep:過濾
查看端口
[root@linux-server ~]# yum install lsof #安裝軟件包
[root@linux-server ~]# lsof -i:80 #端口號,這能查看帶端口的進程
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 64249 root 4u IPv6 1373628 0t0 TCP *:http (LISTEN)
?
#注意:端口號只有整數,范圍是從0 到65535
參數解釋:
FD:文件描述符,應用程序通過文件描述符識別該文件。
DEVICE:指定磁盤的名稱
SIZE:文件的大小
#查網絡進程和正在監聽的端口
[root@linux-server ~]# netstat -lntp
參數詳解:
-a 顯示全部的進程
-u 顯示udp
-n 以數字的新式顯示協議名稱
-t tcp
-p:顯示進程的名稱和pid
-l :只顯示正在被監聽的端口
?
參數解釋:
recv-Q:網絡接收隊列
send-Q:網路發送隊列
Foreign Address:與本機端口通信的外部請求[root@linux-server ~]# w #看已經登陸到終端的進程信息,遠程登陸會有ip 地址
?
部分參數解釋:
USER –登錄用戶名.
TTY –登錄用戶使用的終端名.
FROM –登錄用戶來源的主機名或IP地址.
LOGIN@ –用戶登錄時間.
WHAT –用戶當前的進程及選項/參數。
動態查看進程
top、htop
[root@linux-server ~]# top #動態顯示信息,三秒刷新一次。
在工作中必須監控的東西 load average(平均負載)等待cpu處理的隊列長度 也是個數。 1分鐘 ? 第一個數字 5分鐘 ? 第二個數字 15分鐘 第三個數字 ====================== 計算cpu負載:load average的三個值: 0.10, 0.16, 0.12,分別除cpu的個數,得出的值,如果值大于1那么那時候的負載高。
top操作
[root@linux-server ~]# top
h|? 幫助
> 往下翻頁
< 往上翻頁
M 按內存排序
P 按cpu排序
q 退出
z 彩色顯示
W 保存
=============================
PR 優先級
VIRT 進程使用的虛擬內存總量,單位kb。
RES 進程使用的、未被換出的物理內存大小,單位kb。
SHR 共享內存大小,單位kb
top - 16:26:45 up 14:54, 3 users,load average: 0.05, 0.06, 0.05 Tasks: 129 total, 2 running, 127 sleeping, 0 stopped, 0 zombie
內容 | 含義 |
---|---|
16:26:45 | 表示當前時間 |
up 14:54 | 系統遠行時間,格式為時:分 |
3 users | 當前登陸用戶數 |
load average: 0.05, 0.06, 0.05 | 系統負載,即任務隊列的平均長度。 三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值 |
129 total | 進程總數 |
2 running | 正在運行的進程數 |
127 sleeping | 睡眠的進程數 |
0 stopped | 停止的進程數 |
0 zombie | 僵尸進程數 |
%Cpu (s) : 0.2 us, 1.0 sy, 0.0 ni, 98.8 id,0.0 wa, 0.0 hi, 0.0 si, 0.0 st
內容 | 含義 |
---|---|
0.2 us | 用戶空間占用CPU百分比 |
1.0 sy | 內核空間占用CPU百分比 |
0.0 ni | 用戶進程空間內改變過優先級的進程占用CPU百分比 |
98.9 id | 空閑CPU百分比 |
0.0 wa | 等待輸入輸出的CPU時間百分比 |
0.0 hi | 硬中斷(Hardware IRQ)占用CPU的百分比 |
0.0 si | 軟中斷(Software Interrupts)占用CPU的百分比 |
0.0 st | 用于有虛擬cpu的情況,用來指示被虛擬機偷掉的cpu時間 |
KiB Mem : 2031912 total, 1549816 free, 155372 free, 326724 buff/cache
內容 | 含義 |
---|---|
2031912 total | 物理內存總量 |
1549816 free | 使用的物理內存總量 |
155372 used | 空閑內存總量 |
326724 buff/cache | 用作內核緩存的內存量 |
KiB Swap: 2097148 total, 2097148 free, 0 used, 1674648 avail Mem
內容 | 含義 |
---|---|
2097148 total | 交換區總量 |
2097148 free | 使用的交換區總量 |
0 used | 空閑交換區總量 |
1674648 Avail Mem | 緩沖的交換區總量 |
ni: nice值 id: cpu空閑率 wa: cpu等待,等待輸入/輸出的進程占用的 CPU 百分比。如果使用率過高,表示硬盤該換了
進程優先級 nice
nice 值越高:表示優先級越低,例如+19,該進程容易將CPU 使用量讓給其他進程。 nice 值越低:表示優先級越高,例如-20,該進程更不傾向于讓出CPU。 指令: renice <優先級> -p <PID> # 一般不調整
進程控制
按pid殺死進程
kill,pkill 語法: kill 信號 PID ? #信號也是進程間通信的一種方式
[root@linux-server ~]# kill -l #查看所有信號
-1 HUP 重新加載進程或者重新加載配置文件,PID不變
-9 KILL 強制殺死
-15 TERM 正常殺死(這個信號可以默認不寫)
-18 CONT 激活進程
-19 STOP 掛起進程
案例一
給vsftpd進程發送信號1,15 vsftpd信號測試
[root@linux-server ~]# yum install -y vsftpd #安裝vsftpd
[root@linux-server ~]# systemctl start vsftpd #啟動
[root@linux-server ~]# ps aux | grep vsftpd
root 59363 0.0 0.0 53212 576 ? Ss 16:47 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
?
[root@linux-server ~]# kill -1 59363 #發送重啟信號,例如vsftpd的配置文件發生改變,希望重新加載
[root@linux-server ~]# ps aux | grep vsftpd
root 59363 0.0 0.0 53212 748 ? Ss 16:47 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
[root@linux-server ~]# kill 59363 #正常殺死進程,信號為-15可以默認不寫。我們可以使用systemctl stop vsftpd 停止服務。
[root@linux-server ~]# ps aux | grep vsftpd
root 62493 0.0 0.0 112660 968 pts/0 S+ 16:51 0:00 grep --color=auto vsftpd
?進程狀態解釋--了解:
+:表示運行在前臺的進程
S+:休眠狀態
T+:暫停,掛起狀態
s:父進程
案例二
給vsftpd進程發送信號-9, vsftpd信號測試
[root@linux-server ~]# systemctl start vsftpd
[root@linux-server ~]# ps aux | grep vsftpd
root 67003 0.0 0.0 53212 572 ? Ss 16:57 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 67089 0.0 0.0 112660 972 pts/0 S+ 16:57 0:00 grep --color=auto vsftpd
[root@linux-server ~]# kill -9 67003 #強制殺死,一般用于不能正常停止的情況下
[root@linux-server ~]# ps aux | grep vsftpd
root 67190 0.0 0.0 112660 972 pts/0 S+ 16:57 0:00 grep --color=auto vsftpd
案例三
使用pkill 殺死vsftpd進程
[root@linux-server ~]# systemctl start vsftpd
[root@linux-server ~]# ps -aux | grep vsftpd
root 73399 0.0 0.0 53212 572 ? Ss 17:05 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 73499 0.0 0.0 112660 968 pts/0 S+ 17:05 0:00 grep --color=auto vsftpd
[root@linux-server ~]# pkill -9 vsftpd #使用pkill可以指定進程名字
[root@linux-server ~]# ps -aux | grep vsftpd
root 73643 0.0 0.0 112660 968 pts/0 S+ 17:05 0:00 grep --color=auto vsftpd
作業控制
作業控制之jobs:
作業控制指的是控制正在運行的進程的行為。比如,用戶可以掛起一個進程或者放到后臺去運行,等一會兒再繼續執行該進程。
實戰案例
[root@linux-server~]# sleep 7000 & #&:讓命令或者程序后臺運行
[1] 5441
[root@linux-server ~]# sleep 8000 #ctrl+z 把程序放到后臺(這方法會讓程序在后臺暫停)
^Z
[2]+ Stopped sleep 8000
?
[root@linux-server ~]# jobs #查看后臺的工作號
[1]- Running sleep 7000 &
[2]+ Stopped sleep 8000
[root@linux-server ~]# bg %2 #讓暫停的程序在后臺運行,%是用來修飾job number,2就是job number。(程序的工作號)
[2]+ sleep 8000 &
[root@linux-server ~]# jobs
[1]- Running sleep 7000 &
[2]+ Running sleep 8000 &
?
[root@linux-server ~]# fg %1 #將后臺的程序調到前臺
sleep 7000
?
[root@linux-server ~]# jobs
[2]+ Running sleep 8000 &
[root@linux-server ~]# kill -9 %2 #通過kill殺死進程
[root@linux-server ~]# jobs
[2]+ Killed sleep 8000
[root@linux-server ~]# jobs #在次查看沒有了
三、常用命令
查看當前CPU負載
[root@linux-server ~]# uptime 17:35:01 up 16:02, 3 users, load average: 0.00, 0.02, 0.05
查看內存使用
[root@linux-server ~]# free -m total used free shared buff/cache available
Mem: 1984 154 1508 8 321 1632
Swap: 2047 0 2047
?
-m:單位M
linux啟動過程
1. 加電 2. 加載bios設置 3. 加載grub, 4. 加載內核系統到內存當中 5. 加載配置文件 6. 加載內核模塊 7. 完成相應的初始化工作和啟動相應的服務 8. 啟動系統進程 9. 出現登錄界面 10. 開機啟動完成
查看系統的版本和內核
[root@linux-server ~]# cat /etc/redhat-release #查看版本
CentOS Linux release 7.4.1708 (Core)
[root@linux-server ~]# uname -a #看查正在運行的內核版本
Linux linux-server 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@linux-server ~]# uname -r #查看內核版本
3.10.0-693.el7.x86_64
修改主機名
[root@linux-server ~]# hostnamectl set-hostname xxxx #主機名,修改完之后斷開與終端連接,然后在重新連接即可。
查看主機名
[root@linux-server ~]# hostname
跳板機(堡壘機)的作用
1 身份驗證 2 屏幕錄制,防止員工對服務器做有害的操作 3 批量操作 一次性操作2-200臺機器
安裝過操作系統嗎?怎么安裝?
1.小批量設備,使用U盤安裝 (調整bios參數從U盤啟動) 2.大批量設備搭建PXE裝機系統,從網絡批量安裝 (調整網絡啟動項,從網絡啟動)
上傳下載
# yum install -y lrzsz
上傳
# rz
下載
# sz 文件