一、Linux常見命令 file:查看文件類型(windows用擴展名識別文件類型) 語法:file [options] [args] -b:顯示結果時,不顯示文件名 -c:顯示執行file命令的執行過程(file是如何判斷文件類型),便於排錯或分析命令執行過程 -i:輸出MIME類型的字元串 -L ...
一、Linux常見命令
file:查看文件類型(windows用擴展名識別文件類型)
語法:file [options] [args]
- -b:顯示結果時,不顯示文件名
- -c:顯示執行file命令的執行過程(file是如何判斷文件類型),便於排錯或分析命令執行過程
- -i:輸出MIME類型的字元串
- -L:查看軟連接對應文件類型
- -f:查看文件中文件名的類型
cat:一次性查看整個文件
語法:cat [option] [args]
從鍵盤輸入創建一個新文件:
# cat >test.txt << EOF
> ajsncj//鍵盤輸入
> ajsbja
> ajsbj
> EOF//鍵盤輸入結束
向現有文件中追加數據:
# cat >>file_name <<EOF
> sdfsdf
> sdfsd
> EOF
把等多個文件內容合併到一個文件輸出:
cat file1 file2 >file3
-n:顯示文件內容是時顯示行號(包括空行)
-b:顯示文件內容是時顯示行號(不包含空行)
-s:當文件中有多個空行時合併為一個空行
-E:每個結尾加$
cp:複製文件或目錄
語法:cp [options]
-f:強制複製
-r:遞歸複製目錄
-s:為某個文件創造符號連接(軟連接),而不是複製文件
-l:硬連接
-b:覆蓋已有文件前,對目標文件進行備份
-p:複製文件時保留文件原有屬性
-d:當複製軟鏈接文件時,把目標文件或目錄也會創建為軟鏈接,並指向最原始的文件
-i 覆蓋前詢問
mv:move,西東或從命令文件和目錄(目標和源文件同一目錄是重命名)
-b:移動前先備份
-f:強制移動
-i:移動前詢問
-t:將多個文件移動到同一個目錄(目錄在前,後面跟文件)
rm:remove刪除
-i:刪除前詢問
-d:刪除可能存在數據的目錄
-f:強制刪除
-v:顯示命令執行過程
-r:遞歸刪除整個目錄
mkdir:創建空目錄
-m:創建目錄時同時設置許可權
-p:遞歸創建目錄
-v:顯示創建目錄的過程
touch:創建新文件或者修改時間戳
-a:只改變訪問時間
-c:不創建文件
-d:使用指定時間戳創建文件,而不使用系統時間
-t:使用指定格式時間戳創建文件,而不使用系統時間
-f:解決與BSD系列UNIX系統相容性問題
-m:只改變動時間
tree:查看目錄樹(=ls -R)
which:查看命令所在的路徑
whereis:查看命令所在的路徑,源代碼文件,幫助信息所在的文件
-b:只查看文件所在的位置(等同於which命令)
-m:只查看幫助信息所在的位置
-s:支持看源代碼所在的位置
二、用戶管理
新建用戶命令:useradd uername
- /etc/default/useradd
# useradd defaults file
GROUP=100//
HOME=/home//
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
- /etc/skel/
- /etc/login.defs
創建用戶時,可以設置新用戶可登陸系統的實踐範圍
rm -f /var/run/yum.pid
passwd:設置密碼
man 5 shadow
三、進程管理
進程的概念:
可以定義為:可併發執行的程式在一個數據集合上的運行過程。進程可以申請和擁有系統資源。傳統操作系統中,進程是一個可以獨立調度的基本單位(現代操作系統中為線程)。進程是一個動態的概念,它是“活的”,它有產生、運行、消亡的過程。進程與程式不是等同概念,程式是一個靜態的概念,是指令和數據的集合,作為一種文件可長期存放在存儲介質中。
進程的相關概念:父子關係 進程狀態 優先順序
1、進程狀態:
task_uninterruptible:不可中斷睡眠 mkdir:系統調用,硬體:I/O 1ms
task_interruptible:可中斷睡眠
stopped:停止狀態(不能被調入CPU運行)
zombie:僵屍狀態(結束父進程才能夠退出當前進程的僵屍狀態):進程運行完成後沒有釋放CPU和記憶體資源
2、進程優先順序:
0-139數字,共140個優先順序,數字越小,優先順序越高
0-99:系統分配優先順序(用戶不可控優先順序)
100-139:nice值 (用戶可控優先順序);-20到19;root用戶可以任意調整nice值;普通用戶只能調整0-19
高優先順序進程:獲取更多的CPU運行時長,更優先的讓CPU執行
進程的特性:
動態性
併發性
獨立性
非同步性
CPU分環運行:
0環:特權環,運行內核
1-2環:庫文件
3環:進程環
task struct:進程的數據結構(存放在記憶體的內核空間中),相當於進程式控制制塊
task struct結構:狀態 進程信息和內核棧 運行列表(指令等) MM(記憶體管理):memory mangement PID:進程ID號 群組信息 用戶信息 文件系統 文件描述符等,同時也維護頁表寄存器
進程記憶體結構:
forbidden:內核空間
program text:指令
data+bss:全局變數
heap:堆空間,進程運行時調用的數據等
shared library:共用庫
stack:棧空間,局部變數
線程的概念:
現代操作系統中,將傳統的進程分離,即將資源申請和調度分開,進程作為資源的申請和擁有的單位,而進程作為調度的基本單位。thread:線程,輕量級進程
線程與進程的比較:
調度
併發性
擁有資源
系統開銷
lock:死鎖 自旋鎖等
由於臨界區的存在導致了該概念的產生,臨界區使用原則:忙則等待、有限等待、空閑讓進、讓權等待
進程管理命令:ps top pstree pgrep pidof kill killall bg fg jobs
ps:process status:進程狀態查看,運行ps那個時刻系統進程狀態;BSD風格(不使用連字元),sys V風格(使用連字元),GNU長選項(使用兩個連字元)
a:顯示和終端有關的進程
u:顯示進程用戶的信息
x:顯示和終端無關的進程
-e:顯示所有進程信息
-l:顯示進程長格式
-F:顯示進程的完整信息
ps aux:結果解析
USER:該進程是有哪個用戶發起的
PPID:父進程號
PID:進程號 /proc目錄存放著進程相關的信息 在CentOS7:PID為1的進程是systemd 在CentOS6 中PID為1的進程是init進程,PID為1的進程是系統中所有進程的父進程
%CPU:該進程占用的CPU百分比
%MEM:該進程占用記憶體的百分比
VSZ:虛擬記憶體集(計算進程所占物理記憶體時,物理記憶體包括共用庫的空間)
RSS:常駐記憶體集(進程中不能被交換出去的數據)
TTY:運行在哪個終端
STAT:進程狀態
D:不可中斷睡眠狀態
S:可中斷睡眠狀態
R:運行狀態
T:停止狀態
Z:僵屍狀態
s:session leader:會話的領導者
<:優先順序較高的進程(用戶不可控)
N:優先順序較低的進程(用戶可控進程)
l:多線程進程
L:在記憶體中鎖定分頁
+:前臺進程組中的進程
START:進程啟動時間
TIME:該進程在CPU中實際運行的時長
COMMAND:該進程命令名稱
ps -elF:結果解析
PRI:系統分配的優先順序(用戶不可更改)
NI:nice值,nice值的修改會影響pri的值,他們的總和不變
調整進程的nice值:調整正在運行進程的nice
renice [nice_num] PID
指定進程運行的nice值(讓某個命令以指定nice運行)
nice -n [nice_num] COMMAND
top:動態查看進程狀態,每隔3秒刷新一次進程狀態信息
top結果解析:
第一行:當前系統時間 系統運行時長 登錄系統的用戶個數 過去1分鐘,5分鐘,15分鐘平均負載
第二行:進程總數 正在運行的進程數 睡眠的進程數 停止狀態進程數 僵屍狀態進程數
第三行(按1鍵可以查看每個CPU的信息):CPU相關信息: us:用戶進程所占CPU百分比 sy:系統進程所占CPU百分比 ni:nice所占CPU百分比 id:空閑進程所占CPU百分比 hi:硬體中斷所占CPU百分比 si:軟體中斷所占CPU百分比 st:被hypervisor偷走的CPU的百分比
第四行:物理記憶體相關信息
第五行:交換分區相關信息
top互動式命令:
M:按所占記憶體百分比進行排序
P:按所占CPU備份比進行排序
T:按進程運行時長進行排序
c:是否顯示COMMAND列完整路徑
l:是否顯示top第一行
t:是否顯示top中第二行和第三行
m:是否顯示記憶體的相關信息
k:殺死某個進程
q:退出top進程
pstree:查看進程樹(查看父子進程關係)
pgrep:查看某個進程PID號 pgrep process_name
pidof:查看某個進程PID號 pidof process_name
kill:殺死某個進程(向進程傳遞某個信號)
-l:查看信號列表:
1:SIGHUP:不停止服務的情況下,重新讀取配置文件,並且應用配置文件中的設置
2:SIGINT:Ctrl+c 中斷某個進程
9:SIGKILL:強制殺死某個進程
15:SIGTERM:終止某個進程(預設信號),相當於會有預警
kill語法:
kill -sig_num PID
kill -sig_name PID
kill %num:殺死後臺的某個作業,%不能省略,num為使用jobs命令查看時的序號
信號:進程間的通信(IPC)
記憶體共用等
killall:殺死整個進程樹,用法同kill
bg:把進程調入後臺繼續運行
fg:把後臺的進程調入前臺運行
fg num:將後臺序號為num的進程調入前臺
jobs:查看後臺運行的作業
+:下一次將要運行的後臺作業
前臺-->後臺:
ctrl+z:把正在運行的進程調入後臺,並停止運行
&:啟動時直接調入後臺運行,末尾加上該符號
四、任務計劃
任務計劃:調度性的任務
分為:
一次性任務計劃:at、batch
周期性任務計劃:cron、anacron
一次性任務計劃:
(一)at命令
1、at:設置系統在某一個時間點執行的任務,執行結果以郵件的方式發送給任務發起者
依賴atd服務,所以需要:
# systemctl start atd
# systemctl enable atd
# systemctl status atd
2、語法:
# at data_time
at>at_command1 //輸入需要執行的命令
at>at_command2
at>ctrl+d 保存退出
data_time:時間日期寫法
絕對時間:
HH:MM:具體時間點
DD.MM.YY:天.月.年
YY-MM-DD:年-月-日
MM/DD/YY:月/日/年
HH:MM YY-MM-DD:
相對時間:
at now+3minutes:從任務計劃創建開始計時,3分鐘以後執行
3、與at命令相關的文件:
Linux中設置at任務後,會在/var/spool/at/目錄生成at任務計劃的文件,按照文件名的排序順序執行
許可權:
/etc/at.allow:at任務計劃的白名單,僅允許此文件中的用戶執行at
/etc/at.deny:at任務計劃的黑名單,僅拒絕次文件中的用戶執行at
系統先查找/etc/at.allow,再去查找/etc/at.deny,如果兩個文件都沒有,可以執行
4、at命令:設置at任務計劃
-l:查看系統中at任務列表,相當於atq
-r:刪除系統中的at任務列表,相當於atrm
-d:刪除系統中的at任務列表,相當於atrm
-c:列出後續at任務的具體指令內容
(二)batch
1、batch:用法和at相同,不過batch任務計劃是在CPU空閑時執行(當CPU的平均負載小於0.8時,uptime:查看CPU的平均負載)
依賴batchd服務,所以需要:
# systemctl start batchd
# systemctl enable batchd
# systemctl status batchd
2、語法:
# batch data_time
batch>batch_command1
batch>batch_command2
batch>ctrl+d 保存退出
data_time:時間日期寫法:
絕對時間:
HH:MM:具體時間點
DD.MM.YY:天.月.年
YY-MM-DD:年-月-日
MM/DD/YY:月/日/年
HH:MM YY-MM-DD:
相對時間:
at now+3minutes:從任務計劃創建開始計時,3分鐘以後執行
周期性任務計劃:
系統周期性任務:
日誌輪換:logrotate
登錄文件分析:logwatch任務
創建locate資料庫:updatedb
創建man幫助信息資料庫:CentOS6:makewathis CentOS7:mandb
RPM軟體登錄文件的創建
與網路相關的分析行為:
用戶周期性任務:
cron:設置周期任務計劃
anacron:當cron周期性任務由於某種原因沒有執行,anacron重新執行cron任務
(一)cron
1、cron:
依賴crond服務,所以需要:
# systemctl startcrond
# systemctl enablecrond
# systemctl statuscrond
2、相關文件:
許可權控制文件:
/etc/cron.allow和/etc/cron.deny
/etc/cron.allow:白名單
/etc/cron.deny:黑名單,預設情況下系統只保留/etc/cron.deny
cron相關的配置文件:
/etc/crontab:cron配置文件
/etc/cron.d/:cron輔助配置文件目錄
/var/spool/cron/:cron任務計劃的配置文件目錄,用戶設置完cron任務後,會生成以用戶名名稱的cron文件
/etc/crontab文件解析:
SHELL=/bin/bash:cron任務計劃執行使用的shell程式
PATH=/sbin:/bin:/usr/sbin:/usr/bin:cron任務計劃命令搜索地址
MAILTO=root:cron任務計劃執行結果發送給哪個用戶
/etc/daily/ /etc/hourly/ /etc/monthly/ /etc/weekly/,這些目錄下存放了固定的周期性任務
cron.hourly:cron工具去執行
cron.daily,cron.weekly cron.monthly是由anacron工具去執行
3、操作:
crontab:設置/查看/刪除等cron任務計劃,執行結果以郵件方式發送給任務發起者
-e:會通過文本格式建立,在文本中編輯cron任務內容,語法見下文
-u:為指定用戶設置cron任務計劃(只有root用戶能夠使用)
-l:查看cron任務列表
-r:刪除所有的cron列表
設置任務語法:
系統設置:
分 時 日 月 周 用戶 命令
用戶設置:
分 時 日 月 周 命令
時間取值範圍:
分鐘:0-59
小時:0-23
日期:1-31
月份:1-12或jan,feb,mar,apr ...
周:0-7或sun,mon,tue,wed,thu,fri,sat,其中0和7都代表周日
時間的特殊寫法:
通配:*代表任意時間 10 17 * * * cat /etc/fstab
離散時間段:,(逗號) 5,15,30,45,56 17 * * * cat /etc/fstab
連續時間段:-(中橫線) 00 23 * * 1-5 cat /etc/fstab
間隔時間段:*/n */5 * * * * cat /etc/fstab 00 10 */5 * * cat /etc/fstab(分不能通配)
4、cron設置任務計劃時註意事項:
CPU和記憶體資源集中使用時的問題:
# vim /etc/crontab
1,6,11,16,21,26,31,36,41,46,51,56 * * * * root COMMAND1
取消一些不必要的輸出:設置命令時可以重定向輸出
時間的檢驗:設置時間時,周與日月不可並存
安全的檢驗:通過/var/log/cron的內容查看cron任務計劃中是否有非法任務
環境變數:系統命令查找和cron任務命令位置由$PATH變數決定,設置cron任務時,使用命令的絕對路徑
(二)anacron
1、anacron:當cron周期性任務由於某種原因(如關機)沒有執行,anacron重新執行cron任務
2、語法:
anacron [options] [job]
-s:依據時間記錄文件去判斷是否執行
-f:強制執行
-n:立刻運行未執行的任務,不需要延時
3、anacron執行流程:
1:由/etc/anacrontab分析到cron.daily天數為1天
2:由/var/spool/anacron/cron.daily取出最近一次執行anacron時間戳
3:由2步驟分析出的時間戳和cron任務進行比較,查看哪些cron任務超過1天時間沒有執行
4:準備執行指令,根據/etc/anacrontab的設置,將延時執行
5:延時時間過後,執行指令