Linux概述
- Linux是一個操作系統(tǒng)OS
- 開源
- MacOS基于Darwin,Darwin基于FreeBSD開發(fā)。
- Linux基于Minix(開發(fā)重寫),Minix基于Unix開發(fā)梆暮。
- Linux一切皆文件
分層示意圖
開源協(xié)議
- BSD。伯克利開源協(xié)議,免費自由可隨意修改大莫,基于此協(xié)議開發(fā)的軟件可以不開源,便于用于商業(yè)使用官份。蘋果
- GPL只厘。免費自由可隨意修改烙丛,基于此協(xié)議開發(fā)的軟件可以也必須開源。(GNU 自由軟件計劃羔味,GNU is Not Unix )
Linux發(fā)行版本
- suse俄國人發(fā)明河咽,歐洲使用比較廣泛,因為界面比ubuntu還好看赋元。
- CentOS和Ubuntu都是開源免費版忘蟹。
- debian更遵循GPL協(xié)議。
- Android內核也是基于Linux,加上了JAVA運行環(huán)境的移動端操作系統(tǒng)搁凸。
Linux安裝
- CentOS包管理工具:rpm,yum(更高級)
- ubuntu包管理工具:apt
- CentOS比ubuntu穩(wěn)定媚值,性能更好,而界面沒有ubuntu好看护糖。ubuntu更適合做個人電腦的操作系統(tǒng)褥芒。
- 2024.6后CentOS7redhat不再維護和開源新的后續(xù)版本,目前的可能分支是Rocky.(因為CentOS Stream算是跟fedora差不多的激進版本嫡良,不屬于穩(wěn)定版本)
主機名:hadoop100
靜態(tài)IP:
root : 123456
log:12345
模擬linux服務器
- VMWare (workstation pro)
- Docker
- Virtual Box
創(chuàng)建虛擬機
- 處理器數量锰扶。表示有幾個cpu,有幾個插槽寝受。
- 每個處理器的內核數量坷牛。一個cpu有幾個核心。
- 如果有超頻技術的話羡蛾,一個內核又可以超頻為2個或者n個邏輯內核漓帅。(虛擬機不考慮該邏輯)
- 虛擬磁盤表示用文件、文件夾來模擬磁盤痴怨。
- 作為服務器語音選擇英文忙干,學習可以選擇中文。
- GNOME桌面浪藻。(KDE桌面更華麗捐迫,但更損耗性能)
- 分盤(將一塊硬盤邏輯上隔離開,物理上還是一塊硬盤)
- window從C盤開始分區(qū)是因為A\B盤都是軟盤爱葵。
- 創(chuàng)建分區(qū)——掛載點
- 使用標準分區(qū)
- /boot ,引導分區(qū)施戴,注意掛載引導程序,1G.
- /swap ,交換分區(qū)萌丈。作為虛擬的擴展內存赞哗。當內存滿的時候用于擴展內存交換。一般設置為虛擬內存的1-2倍大小辆雾。4G
- / , 默認分區(qū)肪笋,剩下的磁盤都分配到該分區(qū)。
- 文件系統(tǒng)選擇
- ext4 ,第四代擴展文件系統(tǒng)。
- xfs ,比ext4更高性能的文件系統(tǒng)藤乙。
- swap, 交換分區(qū)專用的文件系統(tǒng)猜揪。
- KDUMP 系統(tǒng)崩潰后的處理功能,虛擬機沒必要開啟坛梁,真實服務器才需要而姐。
- 創(chuàng)建用戶設置密碼。生產上不能直接使用root用戶划咐,權限太大拴念,創(chuàng)建合適的用戶和對應的用戶權限去操作才行。
網絡類型
- 橋接網絡——R尖殃。虛擬機與實際物理機對于局域網(如路由器構造的局域網)來說是平等的丈莺。
- 網絡地址轉換——NAT划煮。虛擬機完全依托于物理主機跟外界訪問送丰。相當于把物理主機當成虛擬的路由器。對外是同一個IP弛秋。(安全性更高器躏,外部不知道我們的虛擬機的IP,相當于保護起來了蟹略。)
Linux文件系統(tǒng)
- Linux終端就是命令解釋層:shell(包裝后的命令解釋層登失,真實的命令解釋層是開機啟動后的黑屏命令解析層)
- 打開多個終端,切換不同的用戶就可以使用不同的用戶去執(zhí)行命令挖炬。
- root用戶提示符:# 揽浙,其他用戶提示符$
- ~:表示當前主文件夾位置,可以設置意敛。
- / :表示根目錄
- bin [binary]:二進制目錄馅巷,存放可直接執(zhí)行的常用命令,實際目錄位置是 的usr/bin
- sbin[system binary]:系統(tǒng)級的二進制目錄草姻,存放的是系統(tǒng)管理員root這個超級用戶能夠使用的命令钓猬,實際目錄位置是 的usr/sbin
- lib[library]: 庫目錄,存放系統(tǒng)和應用程序所需要的共享庫文件撩独,類似于window的system32(動態(tài)鏈接庫dll)里裝的文件敞曹。 實際目錄位置是 的usr/lib
- lib64:存放64位相關的庫目錄,實際目錄位置是 的usr/lib64
- boot :引導啟動所需要的文件存放的目錄
- dev[device] :設備目錄,硬件設備對應的文件映射综膀,把硬件設備當成文件來管理澳迫。
- etc :存放配置文件的目錄
- home : 用戶主目錄文件夾。系統(tǒng)創(chuàng)建的每個用戶在home文件夾下都有一個對應用戶名稱的目錄文件夾剧劝。
- root :root用戶的主文件夾橄登。
- opt[option] :可選目錄,一般第三方軟件都放這個目錄下面。
- media :可移動媒體設備的掛載點目錄示绊,u盤或者光驅插入后就掛載在這個目錄下锭部。
- mnt[mount] :另外一個可移動設備的掛載點。
- proc[process] : 進程的映射目錄面褐。系統(tǒng)用來對當前進程的映射拌禾,不要去動它。
- run :存放系統(tǒng)當前運行時的文件信息展哭。系統(tǒng)重啟后會清理該目錄湃窍,也不要動它。
- srv[service] :存放服務相關的目錄
- sys[system]: 存放硬件相關的系統(tǒng)信息
- tmp[temporary] :存放臨時性文件目錄匪傍。
- usr[user] :存放應用程序和用戶相關的文件信息您市,很重要。
- var[variable]:存放可變的文件役衡,一般放日志之類經常修改的文件茵休。
經常使用存放的目錄:
- home
- opt
- tmp
- root
- var
- etc
有個小箭頭表示是個快捷鍵,真實目錄位置要看詳情手蝎。
VIM文本編輯器
emacs:神之編輯器榕莺,可擴展性好。
vim打開的文件是帶顏色區(qū)分的棵介,vi沒有钉鸯。
- : wq ,write quit ,寫入并保存(原來只是寫到緩沖區(qū))邮辽。
- u[undo] ,撤回唠雕,可以一直撤回。不想保存剛剛i進入后的更改吨述,可以在按esc進入一般模式后按u表示回退更改的操作岩睁。
- yy ,復制一行, 8yy就是復制8行
- p 锐极,粘貼笙僚,6p 粘貼6次。注意三粘貼在光標所在的行
- dd,刪除一行灵再, 5d,刪除當前行即下面的5行肋层。
- 結合^
表示復制光標到當前行介紹的文本栋猖。^:正則開始,
$`正則結束。 - yw 汪榔,復制當前單詞蒲拉。
- dw, 刪除光標所在單詞,需要移動到詞的第一個字母。
- r ,替換
- gg ,移動到文檔頭,G/L雌团,移動到最后一行
- 3G,跳轉到第三行燃领。指定行跳轉位置。
- :set nu 設置文本的行號锦援。結合指定行跳轉猛蔽。
- :set nonu 取消行號。
- o 灵寺,換一行插入
- :q! 曼库,強制不保存退出
- / ,查找 n,查找下一個,N(shift + n)略板,查找上一個
- :%s/old/new/g ,全文替換(g表示global全局替換毁枯,沒有加g則只替換第一個)
vim三種不同的模式
常見語法
編輯模式輸入
網絡配置
B類局域網的IP地址是172開頭的,C類局域網的IP地址是192開頭的叮称。
本機顯示的IPv4地址就是本機在該局域網的IP地址种玛,要看自己在公網的IP地址可以直接百度
-
ifconfig [interface config],linux查看ip地址的命令颅拦,window是ipconfig
- mac查看bridge100列
- linux查看ens33列
同一個局域網里面蒂誉,前三位一樣教藻,最后一位不一樣的兩臺機器可以互相通信距帅、且不沖突。
NAT [network address transfer] 括堤,網絡地址轉換碌秸,本質就相當于通過虛擬一個路由器和虛擬網卡來虛擬一個局域網出來。因此會看到虛擬機的IP網段和物理機的IP網段不一致的情況抱完,可能一個192開頭一個172開頭少欺。
-
設置靜態(tài)IP御毅,避免重啟后DHCP動態(tài)分配IP地址導致的變化,影響我們通過IP進行測試使用恩敌。通過修改配置文件實現(xiàn)。
- 找到網絡腳本配置文件進行修改横媚。
-
設置主機名纠炮,通過修改配置文件實現(xiàn)。
- vim /etc/hostname ,重啟生效灯蝴。
-
hosts文件恢口,域名或者主機名與IP的映射通訊錄文件。方便通信或者做本地測試訪問穷躁。
- vim /etc/hosts
修改靜態(tài)IP步驟
1耕肩、找到配置文件路徑
2、修改網絡腳本配置文件,BOOTPROTO修改為static,增加IP地址,網關猿诸,DNS1,子關掩碼(沒有也行)
三種虛擬機連接模式
橋接模式:
NAT模式:
NAT虛擬了一個網卡婚被,一個路由器,因此網卡分配.1,路由器分配.2 作為網關梳虽。
系統(tǒng)管理
進程和服務的區(qū)別:
一個正在執(zhí)行的程序或命令摔寨,都被叫做進程(process);啟動后一直存在,常駐內存的進程怖辆,一般叫做服務(service)是复。
centOS7保留NetworkManager,不建議使用network 服務竖螃。
服務使用語法:
systemctl start|stop|restart|status|enable|disable 服務名
enable/disable 開啟/關閉 開機自啟動
查看服務的方法:
/usr/lib/systemd/system
.target 表示一組服務的集合
進入設置服務是否開機時自啟動:
在終端窗口敲: setup 回車淑廊,就會進入設置,選擇系統(tǒng)服務回車
空格鍵可以打* 特咆,表示自啟動,tab鍵往下移動到退出鍵退出季惩。
查看當前l(fā)inux系統(tǒng)的運行級別:
systemctl get-default
如果是圖形化界面會返回:graphical.target
設置運行級別:
systemctl set-default graphical.target
init 3 切換到3,多用戶的命令行模式
init 5 切換到5腻格,圖形化界面模式
centOS 6的防火墻服務叫 iptables
centOS 7的防火墻服務叫 firewalld ,后綴d表示這是個守護進程
防火墻本質就是一張ip:port表集合画拾,用于校驗ip是否放行的表。
防火墻的開啟關閉語法與上面相同:
systemctl start|stop|restart|status|enable|disable firewalld
linux關機前需要進行數據同步sync菜职,從內存同步到硬盤中青抛。因為linux的預讀遲寫的優(yōu)化操作。
關機命令
linux啟動加載過程
Shell常用命令
- bash[Bourre Again Shell]酬核,是在Bourre Shell的基礎上發(fā)展來的面向用戶的交互命令窗口蜜另,所以叫bash.
- sh 就是bash命令終端的打開命令。打開bash終端嫡意,其實是執(zhí)行了sh,我們所有的命令就是在bash這個終端上解釋執(zhí)行的举瑰。
幫助命令
- man[manual],幫助手冊的意思蔬螟,用于獲取幫助信息此迅。
- help ,help命令只能用于內置命令的獲取幫助信息,外部命令不行旧巾,外部命令一般可以使用: --help 來查看幫助信息耸序。
#type 命令可以用于判斷一個命令是內置命令還是外部命令
type cd
type exit
type useradd
#如果是內置命令要查看幫忙文檔,則要多加一個 -f 選項
man -f cd
#其他查看幫助命令,man命令是最全的菠齿。
man ls
#help命令只能用于內置命令的獲取幫助信息佑吝,外部命令不行
help cd
#外部命令一般可以使用: --help 來查看幫助信息。
ls --help
文件目錄類
- 以點開頭的文件和文件夾都是隱藏文件,如: .loacl .bash_profile绳匀,可以使用ls -a 來查看所有包括隱藏的文件
- \表示執(zhí)行原生命令芋忿,不帶選項參數炸客。因為部分命令是帶有別名的。
- 注意tail -f 監(jiān)控文件更新時戈钢,通過vim修改文件去追加數據痹仙,tail是無法監(jiān)控到的,因為vim編輯保存后的文件其對應的索引文件會更新成新的值殉了,本質上表示這是個新的文件开仰。tail就跟蹤不到更新了,tail是根據索引文件的值來跟蹤文件的更新的。
- 硬鏈接與軟連接的區(qū)分:硬連接指向的是相同的文件的inode,軟連接有自己的inode薪铜,軟連接存放的是指向文件的地址众弓,而這個文件再指向其自己的文件inode.
#顯示當前工作目錄的絕對路徑 [print working directory]
pwd
#列出文件內容 [list] -a: 表示all,查看所有包括隱藏的所有文件
ls -a
# -l :表示long,長數據串列出,包含文件的屬性和權限等隔箍。
ls -l / ll
#第一個是-表示文件谓娃,d表示這是個文件夾
-rw-r--r--. 1 root root 1671 5月 21 23:27 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 5月 21 23:27 公共
#切換路徑, ..表示上一級目錄 .表示當前目錄
cd ../dev
# 返回上一次路徑所在位置,可用于在兩個路徑下不同地切換。
cd -
#cd 后面不加路徑表示切換到主文件夾
cd
#創(chuàng)建文件夾 make directory蜒滩,下面是在當前路徑下創(chuàng)建文件夾
mkdir test
#創(chuàng)建絕對路徑下名字叫dev的文件夾
mkdir /dev
#創(chuàng)建指定路徑下的嵌套文件夾滨达,沒有則創(chuàng)建對應文件夾 -p:parents
mkdir -p /d/e/f
#移除文件夾
rmdir /dev
#多嵌套路徑下移除文件夾,不好用俯艰,還是使用rm -rf
rmdir -p /d/e/f
#創(chuàng)建空的新文件
touch hello.text
vim hello.text
#創(chuàng)建指定路徑下的文件
touch /data/hi.text
#復制文件或目錄 cp:copy
cp [選項] source dest
cp hello.text /data/
#如果復制的目標文件是已有的文件捡遍,那會提示是否覆蓋該文件,y表示yes,n表示no竹握。
cp hello.text hi.text
#加反斜杠\ 表示強制復制并覆蓋, \表示執(zhí)行原生命令画株,不帶選項參數
\cp hello.text hi.text
#復制文件夾及其文件夾下的所有文件和文件夾
cp -r /data/log /backup/data/log
#刪除 -f 強制刪除 -r 遞歸刪除
rm [選項] deleteFile
rm -rf /backup
#刪庫到跑路
rm -rf /*
#移動文件
mv hello.text /data
#移動文件并重命名為hi.text
mv hello.text /data/hi.text
#對文件做重命名
mv hello.text hi.text
#查看文件內容 catch ,適用于查看內容小的文件
cat hello.text
#查看文件內容并顯示行號
cat -n hello.text
#分屏查看文件內容
more hello.text
#分屏查看文件內容 less ,跳到開頭shift + G,跳到最后G
less hello.text
#查看帶有別名的命令
alias
#出參
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
#輸出到控制臺,-e 表示支持反斜線控制的字符轉換
echo "hello world"
#換行輸出
echo -e "hello \n world"
#使用echo 配合 >> 追加文本或者配置到文件下
echo "hello world" >> config.yml
# > 表示覆蓋 涩搓, >>表示追加到文件末尾
#查看系統(tǒng)環(huán)境變量
#顯示所有環(huán)境變量
echo $
#顯示path環(huán)境變量
echo $PATH
#查看文件頭部內容
head hi.text
#查看文件頭部內容前200行
head -n 200 hi.text
#輸出文件尾部內容
tail hi.text
tail -n 200 hi.text
# -f 實時追蹤文件的更新污秆,跟蹤最后200行
tail -200f hi.text
#查看文件的索引號
ls -i hi.text
#創(chuàng)建軟連接ln,也就是快捷方式 -s:soft
ln -s [文件或目錄] [軟連接名]
#在想要生成軟連接的位置去執(zhí)行
# 屬性值首字l表示這個是軟連接
ln -s /data/logs mylog
#想要查看軟連接對應的物理路徑,使用-P
pwd -P
#刪除軟連接
rm mylog
#rm -rf mylog/ 注意:帶后面的斜杠會把軟連接對應的真實目錄下的內容刪掉
#創(chuàng)建硬連接 不加 -s,當前文件的鏈接數不包含軟連接的數量昧甘,是指硬連接的數量。
ln /data/logs hardlog
#查看已執(zhí)行過的歷史命令
history
#顯示10條歷史命令
history 10
#清空歷史命令記錄
history -c
more語法
less語法
時間日期類
#獲取當前日期
date
#獲取當前年份
date +%Y
#獲取格式化的日期
date "+%Y-%m-%d %H:%M:%S"
2024-06-05 20:05:55
#獲取當前時間戳
date +%s
#獲取計算的時間,1天前
date -d "1 days ago"
#獲取日歷
cal
#獲取當前月的前后3個月日歷
cal -3
cal 2024
用戶權限類
- 新建用戶默認在自己同名的組里面战得,一個用戶可以屬于多個組充边。
#添加新用戶
useradd 用戶名
#添加新用戶到某個組
useradd -g 組名 用戶名
#設置用戶的密碼
passwd 用戶名
#判斷當前是否有這個用戶
id 用戶名
id zhangsan
#查看所有系統(tǒng)用戶
less /etc/passwd
#切換用戶 su: switch user
su 用戶名
su zhangsan
#切換到用戶主目錄
cd ~
#返回當前使用的是哪個用戶
who am i (最外層會話是哪個用戶)
whoami (當前會話是哪個用戶)
#設置普通用戶具有root權限,需要先給該用戶添加到sudoers文件名單中
sudo ls
#修改sudoers文件
vim /etc/sudoers
#刪除用戶 ,用戶會被刪除,用戶主文件夾還在
userdel zhangsan
#刪除用戶且刪除其主文件夾
userdel -r zhangsan
#新建一個組
groupadd 組名
groupadd dev
#修改組名
groupmod -n new old
#刪除組
groupdel 組名
#修改用戶所屬組
usermod -g 組名 用戶名
usermod -g dev zhangsan
sudoers增加權限名單
文件權限類
- UGO:user group other權限常侦。
- vim 強制保存 :wq! 時浇冰,如果執(zhí)行保存的用戶沒有sudo權限是不能強制保存的。
#改變權限 chmod ,ugoa表示希望對哪個權限部分做更改聋亡,a表示全部
# +表示增加權限肘习,-表示刪除權限,=賦予權限坡倔。不能有空格
chmod a=rwx hi.text
#給用戶加執(zhí)行權限
chmod u+x hi.text
#4=r 2=w 1=x
#對文件修改最大權限
chmod 777 hi.text
#對文件夾及其子文件夾下所有文件設置權限用 -R
chmod -R 777 /data/logs
#用戶可讀寫漂佩,所屬組和其他可讀
chmod 644 hi.text
#改變文件或文件夾所有者 u -R表示遞歸操作 recursive
chown 用戶 文件/文件夾
chown log hi.text
#改變文件或文件夾所在組
chgrp 用戶組 文件/文件夾
chgrp happy hi.text
一個文件UGO三種不同的權限
修改權限
搜索查找類
#人類可讀話展示詳情脖含,文件大小會按M K 去展示而不是默認的kb單位
# -h human 人類可讀
ls -lh
#查詢命令所在的位置
which ls
which which
#或者用這個查詢命令所在的位置
whereis locate
#查找文件或者目錄,會從指定目錄向下遞歸遍歷查找
find [搜索文件夾] [選項]
#查找當前文件夾
find -name "log"
#根據文件名稱查找
find /usr -name "log"
#模糊查找
find /usr -name "*log"
#根據文件所屬用戶名查找文件投蝉,即屬主
find /usr -user devlop
#根據文件大小來查找文件养葵,查找size 超過10M的文件
find /usr -size +10M
#快速定位文件路徑,在所有文件中查找
locate hello.text
#因為locate是根據索引數據庫建立的搜索機制,所以新創(chuàng)建的數據要執(zhí)行刷新操作把更新刷到locate上
updatedb
#grep過濾查找及|管道符 -n 顯示匹配的行號
grep -n [查找關鍵詞] [查找的文件]
grep -n boot develop.log
#管道就是把前面的處理結果通過| 管道傳遞給下一個命令處理
#將ls的文件名通過管道進行過濾出帶有l(wèi)og的數據出來
ls|grep "log*"
#grep wc :word count 統(tǒng)計關鍵詞出現(xiàn)次數 瘩缆,空格表示分詞
grep "boot" develog.log| wc
壓縮和解壓類
- gzip /gunzip只能對文件進行壓縮解壓
- gzip 壓縮后的文件后綴就是原文件名.gz
- zip /unzip對文件和文件夾都能進行壓縮解壓
- zip 壓縮后的文件后綴就是原文件名.zip
- zip兼具打包和壓縮的功能
- tar是打包命令关拒,結合gzip進行壓縮得到.gz后綴的文件 ,tar的壓縮效率更高庸娱,一般用tar進行打包壓縮
#壓縮文件
gzip hi.text
#解壓文件
gunzip hi.text.gz
#壓縮文件目錄及其子文件夾着绊,遞歸 -r
# [myroot.zip壓縮后的文件名,可以放路徑熟尉,則表示要把文件壓縮在指定路徑下 的文件] [/root 表示要壓縮的目錄文件夾]
zip -r myroot.zip /root
#解壓縮 -d:指定解壓后的文件夾存放位置
unzip -d /backup myroot.zip
#打包并壓縮文件目錄
#[mytar.tar.gz 指定打包后的名稱] [/root 打包的文件夾畔柔,可以用空格隔開打包多個文件]
tar -zcvf mytar.tar.gz /root
tar -zcvf mytar.tar.gz hello.text hi.text
#解壓解包 -C 表示指定解壓到哪個文件夾下
tar -zxvf mytar.tar.gz -C /tmp
gzip壓縮文件
zip
tar
磁盤管理類
- 個人電腦硬盤一般用SATA ,服務器追求性能用SCSI
- 設置自動掛載光盤則需要修改配置文件/etc/fstab
- 硬盤掛載需要三步驟,虛擬機添加硬盤需要reboot重啟
- 分區(qū)
- 對分區(qū)按照指定的不同的文件系統(tǒng)類型進行格式化
- 設置掛載點
#以樹形結構展示產品文件夾目錄臣樱,需要安裝tree命令
yum install tree
#展示指定目錄樹形結構
tree /
tree ./
tree /root
#查看文件和目錄占用磁盤的空間大小 du: disk usage
du /root
# -h :human -s :sum -a :all
#查看總數
du -sh
#查看所有文件夾統(tǒng)計
du -ah
#只查看到第幾層級的統(tǒng)計 ,1表示就只看第一層目錄結構
du --max-depth=1 -ah
#查看磁盤剩余空間情況 df: disk free -h:human readable 加/表示查看指定分區(qū)
df -h /
#查看所有分區(qū)的磁盤剩余空間情況
df -h
#下面這些都是基于內存的文件系統(tǒng)
tmpfs
devtmpfs
#查看內存的使用情況
free -h
#查看設備掛載情況 lsblk :list block MOUNTPOINT:掛載點
# -f 查看詳細信息,可以查看UUID靶擦,用于配置開啟自動掛載光盤
lsblk -f
#IDE 硬盤對應 hda,hdb...
#SATA 、SCSI sda,sdb ...
#虛擬化媒體設備 vda,vdb...
#查看待掛載的光盤
ll /dev/|grep sr0
#創(chuàng)建掛載點文件夾作為掛載位置
mkdir /mnt/cdrom
#光盤掛載/卸載 mount /umount 一般掛載到/mnt文件夾上
mount [-t vfstype] [-o options] device dir
#手動掛載光盤 要掛載的光盤位置 掛載到的位置/mnt/cdrom
#注意如果是圖形化界面會自動掛載上雇毫,不需要執(zhí)行mount掛載
mount /dev/cdrom /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
#卸載光盤掛載玄捕,后面是設備的位置/dev開頭
umount /dev/cdrom
#查看當前的分區(qū)和掛載點來確認移動硬盤的位置
lsblk
#查看硬盤分區(qū)詳情
fdisk -l
#查看到硬盤分區(qū)名稱
#1硬盤掛載/卸載 fdisk 硬盤設備名
fdisk /dev/nvme0n2
#輸入m查看幫助
n
w
#2指定硬盤的文件格式 make file system
mkfs -t xfs /dev/nvme0n2
#如果指定不了硬盤文件格式要求-f 強行格式化的語句
mkfs.xfs -f /dev/nvme0n2
#3掛載到掛載點上,掛載到/home/log下,表示該目錄文件夾下存的內容實際是存儲在/dev/nvme0n2 這塊硬盤上
mount /dev/nvme0n2 /home/log
#卸載可以給設備名稱棚放,也可以直接給掛載點位置,因為是一一對應的枚粘。
umount /home/log
umount /dev/nvme0n2
磁盤使用情況查看
外接光盤掛載
設置自動掛載光盤
硬盤分區(qū)最多16個分區(qū)
根據英文注釋知道對應命令意思
進程管理類
一個正則執(zhí)行的程序或命令,就叫做進程(PID)-process
啟動之后一直存在飘蚯,常駐內存的進程馍迄,叫做服務-service
服務名稱后面帶d,是守護進程。
-
注意局骤,命令的參數帶-的是UNIX風格攀圈,不帶-的是BSD風格。
- 如不帶-:ps aux|grep 'java'
- 帶-:ps -ef|grep 'java'
系統(tǒng)級別的進程的父進程大部分都是2號進程:PID=2
用戶級別的進程的父進程大部分都是1號進程:PID=1
watchdog:看門狗峦甩,主要用來監(jiān)控進程狀態(tài)的赘来。
ps命令像個快照,top是直播凯傲,實時監(jiān)控犬辰。
#查看進程狀態(tài) process status
#ps只顯示當前用戶調用的線程和終端的線程
ps
# 也可以不加管道過濾,就是查看所有進程
#ps -ef 還多展示PPID,也就是當前進程的父進程 :process parent id
ps -ef
ps aux|grep 'java'
ps -ef|grep 'java'
#使用分頁查看列表
ps -ef| less
#查看遠程登錄的進程
ps -ef|grep sshd
#終止進程 可以通過pid或進程名稱處理冰单, -9表示強制終止
kill -9 1233
#表示進程名稱是firefox的都終止幌缝,也就是關掉所有瀏覽器
killall firefox
#謹慎使用killall
#終止遠程連接進行,注意執(zhí)行這個后就無法進行遠程登錄連接诫欠,因為sshd這個服務進程也被終止了涵卵,只能從物理機上進行登錄浴栽,打開sshd遠程服務,才能再被遠程連接上缘厢。
killall sshd
systemctl start sshd
#-9是一個信號值吃度,可以通過-l命令查看
kill -l
#查看進程數
pstree
#分頁查看,按q退出
pstree |less
#-p 顯示pid -u 顯示進程所屬用戶
pstree -p
pstree -u
#沒有該命令則執(zhí)行安裝
yum install pstree
#實時監(jiān)控系統(tǒng)進程狀態(tài)贴硫,默認3s刷新一次椿每,按q退出
top
#按 shift m 表示按內存大小排序
#按 shift p 表示按cpu占用大小排序
#按 shift n 表示按進程號大小排序
#按 u 可以輸入過濾用戶
#按 k 可以輸入要終止的進程PID,再輸入終止信號 9 終止進程
#設置每個多少秒刷新,10s刷新
top -d 10
#監(jiān)控某個進程英遭,指定pid -p
top -p 2393
# -i idle 表示每次刷新間隔期間一直是S间护,睡眠狀態(tài)的就不展示,用于監(jiān)控目前的活躍進程
top -i
顯示網絡狀態(tài)和端口占用信息
- socket :ip + port
- socket相當于一個門
- 端口號范圍:0到65535
- 0.0.0.0 表示本地的所有地址
- 0.0.0.0:123 表示所有地址的123端口
- 127.0.0.1 本機地址。
- ssh遠程 連接的端口號是22
# netstat 查看進程網絡信息,加grep是用于查找
netstat -anp
netstat -anp|grep 進程號
#查看網絡端口號占用情況
netstat -nlp
netstat -nlp| grep 端口號
進程狀態(tài)
ps aux
ps -ef
終止進程
pstree
實時監(jiān)控系統(tǒng)進程狀態(tài)
ni:nice 表示進程謙讓的優(yōu)先級挖诸,nice值越高汁尺,執(zhí)行優(yōu)先級越低,表示老實謙讓度高多律,容易被插隊痴突。
系統(tǒng)定時任務
- 定時做備份、清理等任務
#crontab 打開定時任務服務,查看狀態(tài)
systemctl status crond
#查看定時任務列表 l:list
crontab -l
#新增標記定時任務 e:edit
crontab -e
#編輯定時任務,每個1分鐘追加hello world 到 hello.text文件中
*/1 * * * * echo "hello world" >> /root/hello.txt
#通過tail 查看追加的日志
tail -20f hello.txt
crontab
軟件包管理
- rpm,redhat package manager,紅帽軟件包管理工具 狼荞,centOS用
- apt是ubantu的辽装。
- .rpm就是安裝包,安裝包的路徑一般在/packages路徑下
- rpm 安裝時如果有其他的依賴而本機沒有時會按照失敗相味,提示先安裝依賴**
- 一鍵智能化安裝軟件拾积,包含安裝安裝包依賴的依賴包,使用YUM
- YUM:yellow dog updater,motified
- 是Shell軟件包管理器丰涉,基于RPM包管理
- 類似于maven
#查詢所有安裝包文件列表 qa:query all
rpm -qa
# -qi query infomation表示查詢詳細信息
rpm -qi|grep firefox
#卸載軟件
rpm -e firefox
#不檢查依賴關系直接刪除,不推薦
rpm -e nodeps firefox
#安裝軟件 rpm -ivh 包全名
#install:安裝 verbose:詳細信息 hash:進度條
rpm -ivh firefox-68.1.1.x86_64.rpm
#yum 安裝firefox ,-y表示交互時都直接回答yes
yum -y install firefox
#查看已經安裝的軟件
yum list
#查找是否有firefox安裝軟件
yum list|grep firefox
#移除軟件
yum remove firefox
#修改yum源為國內鏡像方便加載
先備份本地的
再wget下載
再替換本地的
#安裝wget,wget可以通過url拉取文件
yum install wget
#wget htttp://mirro.aliyun.com/repo/ddd
wget htttp://mirro.aliyun.com/repo/ddd
yum
克隆虛擬機
- 右擊虛擬機-管理-克隆-創(chuàng)建完整克隆
- 網絡ip地址拓巧、主機名不能一樣
Shell編程
- shell是一個命令行解釋器,相當于一個翻譯器一死,把用戶命令解釋成linux內核可以理解的語言肛度,linux內核再解釋成硬件語言去操作執(zhí)行。
- sh -> bash
- sh腳本默認格式后綴是.sh摘符。這個主要是約定俗成贤斜,并不是強制秸苗,只要是可執(zhí)行文件就可以是shell腳本肥印。
- 使用bash, sh ,./hello.sh執(zhí)行可執(zhí)行文件實際是打開一個子shell來執(zhí)行狈蚤。
- 全局變量對子shell和子shell的子shell都是可見的,而局部變量只對當前shell可見带族。
- 自定義變量用小寫
- 把腳本文件拷貝到bin或sbin目錄下,就可以直接執(zhí)行hello.sh文件蟀给。會被當成一個可執(zhí)行命令蝙砌。
- 想要腳本可直接執(zhí)行還有方法就是直接把腳本文件路徑添加到$PATH上阳堕。
shell腳本的格式
#第一行表示該腳本指定的默認的shell的解析器
#!/bin/sh
#!/bin/bash
#號表示注解
shell
#shell執(zhí)行腳本 不需要文件有執(zhí)行權限
bash hello.sh
sh hello.sh
#帶絕對路徑,相對路徑也行择克,不帶默認是指當前路徑下的可執(zhí)行文件
sh /data/logs/hello.sh
#增加文件的可執(zhí)行權限,可執(zhí)行文件的顏色是綠色或不一樣的顏色恬总。
chmod +x hello.sh
#當前路徑下執(zhí)行腳本,需要文件有執(zhí)行權限
./hello.shv
#使用source . 執(zhí)行文件,一般在刷新環(huán)境變量文件時使用
source .profile
. .profile
#變量
#環(huán)境變量建議大寫
#主目錄
$HOME
#當前的工作目錄
$PWD
#當前使用的shell解析器
$SHELL
#當前的系統(tǒng)用戶
$USER
#查看環(huán)境變量的值,打印到控制臺上
echo $HOME
#查看全部環(huán)境變量
env
printenv |less
#查看變量
set
#自定義變量,可以用引號進行語句賦值變量
a=3
a='hello world'
a="holy shit"
#查看變量
echo $a
#打開一個子shell肚邢,執(zhí)行bash命令即可
bash
#通過ps -f 查看當前活動的進程
ps -f
#退出該子shell
exit
#定義全局變量壹堰,需要對目前的局部變量執(zhí)行EXPROT,不要加$
export a
#如果子shell對父shell定義的全局變量做更改骡湖,可以更改贱纠,但是只對當前shell有效,就算再執(zhí)行一次exprot a也沒用
#默認變量定義是字符串响蕴,無法進行數字運算谆焊,要運算要用$(())或者$[]
c=$((5=6))
d=$[7+8]
#只讀變量,常量
readonly b=6
#刪除變量,不帶$
unset b
unset a
#腳本的入參處理浦夷,用空格隔開表示
#$0表示腳本名稱辖试,全路徑的腳步名稱
$0
#$1-$9表示第一個到第九個參數
$1
#第10個及以上參數要加{}
${15}
#獲取所有輸入參數個數,用于做參數判斷和循環(huán)處理
$#
#打印入參,$*是個整體
$*
#入參遍歷處理劈狐,是個數組
$@
#腳本的返回值,正常執(zhí)行返回0罐孝,其他情況非0
$?
#運算符 expr,要帶空格
expr 1 + 2
#乘法,需要對*進行轉譯
expr 5 \* 2
#expr要進行賦值運算要用$()或反引號``懈息,進行命令替換
a=$(5 + 2)
a= `5 + 2`
#計算表達式
$(())
$[]
#條件判斷,用test 或[]
$a= 1
test $a= hello
#[ ] 條件判斷,前后要有空格空開肾档,變量比較的等號之間也要空格開
[ $a = hello ]
#通過$?獲取最后執(zhí)行的結果 0表示成功,其他非0表示不等于
$?
#不等于 !=
[ $a != hello ]
#數值比較 - eq ne lt le gt ge
[ $a -gt 3 ]
[ 8 -gt 3 ]
#文件權限判斷
[ -r hello.sh ]
[ -w hello.sh ]
#文件類型判斷
#文件是否存在
[ -e hello.sh ]
#是否文件類型
[ -f hello.sh ]
#是否是目錄
[ -d hello.sh ]
#多條件判斷 && ||
[ -e hello.sh && -d hello.sh ]
#三元運算符
[ 8 -ge 3 ] && echo OK || echo notOK
#分支流程判斷 if [ true ];then fi:fi是if反過來辫继,類似于我們代碼if條件的{}
#用;分割的是兩個命令
;then 相當于
換行
then
# -a 就是邏輯與 all -o 就是邏輯或 or
if [ $a -gt 18 -a $a -lt 35 ]; then echo ok;fi
單if腳本語句
#! /bin/bash
if [ "$1"x = "hello"x ]
then
echo "hello world"
fi
#避免空指針的健壯性寫法
[ "$1"x = "hello"x ]
#下面這個寫法會因為沒有入參而執(zhí)行失敗
[ $1 = hello ]
多if腳本語句
#! /bin/bash
if [ "$1"x = "hello"x ]
then
echo "hello world"
else
then
echo "hi world"
fi
#! /bin/bash
if [ "$1"x = "hello"x ]
then
echo "hello world"
elif[ "$1"x = "hey"x ]
then
echo "hey world"
else
then
echo "hi world"
fi
case 腳本語句
#! /bin/bash
case $1 in
1)
echo "one"
;;
2)
echo "two"
;;
3)
echo "three"
;;
*)
echo "other"
;;
esac
#esac是case的顛倒
for循環(huán)語句
#! /bin/bash
sum=0
for(( i=1; i<=$1; i++ ))
do
sum=$[ $sum + $i ]
done
echo $sum
#使用變量要加$符號 sum=$sum+$i, +是連接符怒见,要用$[]表示運算括號起來
#(())雙小括號里面可以直接用數據的運算符號,不需要用-ge這種轉譯
#姑宽! /bin/bash
for i in {1..100} do sum=$[ $sum + $i ]; done; echo $sum
# {1..100} 表示1到100的序列
#遣耍! /bin/bash
for i in "$@" do echo $i; done;
# $@是參數數組
while循環(huán)語句
#! /bin/bash
sum = 0
i = 1
while[ $i -le $1]
do
sum = $[ $sum + $i ]
$i = $[ $i + 1 ]
done
echo $sum
#! /bin/bash
sum = 0
while[ $i -le $1]
do
let sum+=i
let i++
done
echo $sum
#let 寫法不能有空格,否則會解析報錯
read讀取控制臺輸入:IO設備輸入
#! /bin/bash
read -t 60 -p "請輸入昵稱:" name
echo "create success, $name"
函數
- 函數就是一個靈活的腳步炮车,并且可以有返回值
- 調用函數用$(函數名 函數參數)
#時間函數 +%s輸出為時間戳格式
date
date +%s
#調用函數
$(date +%s)
#路徑剪切 輸出:hello.sh
#截取最后一個/之后的路徑字符串
basename /root/hello.sh
#路徑剪切并去除后綴suffix 輸出:hello
basename /root/hello.sh .sh
#獲取文件名
#! /bin/bash
echo name: $(basename $0 .sh)
#截取最后一個/之前的路徑字符串,輸出:/root
#用于獲取路徑舵变,在該路徑創(chuàng)建文件,創(chuàng)建文件夾
dirname /root/hello.sh
#獲取當前路徑的絕對路徑瘦穆,避免創(chuàng)建文件等在相對路徑下會有問題
#思路就是先cd到當前路徑纪隙,再執(zhí)行pwd
cd $(dirname $0)
pwd
#寫成一行
echo name: $(cd $(dirname $0);pwd)
函數腳本
#! /bin/bash
function add(){
s=$[ $1 + $2]
#如果直接return會受限于最大返回值256的限制
#return $?
echo $s
}
read -p "請輸入第一個整數:" a
read -p "請輸入第二個整數:" b
sum=$(add $a $b)
echo "sum="$sum
文件歸檔,日志歸檔
通過該腳本實現(xiàn)文件的按日期歸檔
#扛或! /bin/bash
#參數判斷
if [$# -ne 1]
then
echo "參數個數有誤绵咱,請輸入一個參數作為歸檔目錄名"
exit
fi
#從參數中獲取命令名稱
if [ -d $1]
then
#打印空,表達空一行
echo
else
echo "目錄不存在"
echo
fi
#獲取文件名
DIR_NAME=$(basename $1)
#獲取絕對路徑
DIR_PATH=$(cd $(dirname $1); pwd)
#獲取當前日期
DATE=$(date +%y%m%d)
#定義生成的歸檔文件名
FILE=home_log${DIR_NAME}_$DATE.tar.gz
#定義歸檔的文件路徑及文件名稱
DEST=/data/logs/$FILE
#開始歸檔
echo "開始歸檔"
tar -czf $DEST $DIR_PATH/$DIR_NAME
#判斷壓縮結果
if [ $? -eq 0]
then
echo
echo "success"
echo "file path: $DEST"
else
echo
echo "fail"
fi
exit
添加到定時任務中
#查看定時任務列表
crontab -l
#編輯定時任務
crontab -e
#每天凌晨2點
0 2 * * * /data/logs/ge_log.sh /data/logs/home_log
正則表達式
#匹配出所有以a開頭的字符串
cat home.log|grep ^a
#匹配出所有以log結束的字符串
cat home.log|grep log$
#匹配空行字并顯示行號
cat home.log|grep -n ^$
#匹配指定字符r..t的字符串 .表示匹配1個字符
cat home.log|grep r..t
#匹配指定字符r*t的字符串, *表示0到n個字符
cat home.log|grep r*t
cat home.log|grep ^r*t$
#匹配指定區(qū)間的字符串
cat home.log|grep r[a-z]*t
cat home.log|grep r[a,b]*t
#用echo測試字符串匹配
echo "ddrrot"|grep r[a-z]*t
#匹配指定字符r$t的字符串, \表示對特殊字符轉譯
echo "r$t"|grep r\$t
#匹配手機號 -E 表示支持擴展的正則表達符號,比如{}
echo "18939998830"|grep -E ^1[345678][0-9]{9}$
文本處理工具
#截取文本第一列 -d表示要分割的符號 -f 表示要截取的列數
cut -d " " -f 1 cut.txt
#截取文本第1,2列 -d表示要分割的符號 -f 表示要截取的列數
cut -d " " -f 1,2 cut.txt
#通過管道匹配正則后再截取1,6,7列數據
cat /etc/passwd |grep bash$|cut -d ":" -f 1,6,7
# -表示第6列只有的值
cat /etc/passwd |grep bash$|cut -d ":" -f 1,6-
# 1-5列
cat /etc/passwd |grep bash$|cut -d ":" -f 1-5
#提取本機ip地址熙兔,先用grep過濾出該行,注意該行前面有空格的話1個字符位置就表示一個分割悲伶,要提取第10列
ifconfig ens33|grep netmask|cut -d " " -f 10
awk
#搜索文件以root開頭的所有行艾恼,并輸出該行的第7列
#$7表示匹配到的行,把該行對應的列以參數模式傳入到action中麸锉,用$去取參數值處理
cat /etc/passwd |awk -F ":" '/^root/{print $7}'
#搜索文件以root開頭的所有行钠绍,并輸出該行的第1和第7列,中間用逗號花沉,分割
cat /etc/passwd |awk -F ":" '/^root/{print $1","$7}'
#如果不搜索直接輸出第1和第7列
cat /etc/passwd |awk -F ":" '{print $1","$7}'
#讀取數據前和后執(zhí)行動作柳爽,{是代碼塊} BEGIN END
cat /etc/passwd |awk -F ":" 'BEGIN{print "begin search"} /^root/{print $1","$7} END{print "end search"}'
#提取值并做加法運算,用戶id加1
cat /etc/passwd |awk -F ":" '{print $3+1}'
#通過參數形式來進行運算
cat /etc/passwd |awk -v i=1 -F ":" '{print $3+i}'
#awd 內置變量 FILENAME 表示當前的文件名,如果是管道操作FILENAME是-
# NR 行號 NF 列的個數
#查看文件名及打印每一行和列數
awk -F ":" '{print "文件名:"FILENAME "行號:"NR "列數"NF}' hello.txt
#找出ifconfig中的空行的行號
ifconfig |awk '/^$/{print NR}'
ifconfig |awk '/^$/{print "找到的行號:"NR}'
#提取本機ip地址,注意awk自動過濾每行前面的空格符,所以變量是在第二列
ifconfig | awk '/netmask/{print $2}'
應用:發(fā)生消息
#查看當前在線用戶列表 who
who
#查看當前用戶
who am i
#查看當前用戶消息功能是否打開 mesg ,is y 表示打開
mesg
#查看在線用戶列表的消息功能是否打開 ,+表示打開
who -T
#開啟關閉消息功能 n表示關閉
mesg y
mesg n
#EOF 結束發(fā)送 ctrl +c 退出
#發(fā)送消息 用戶主穗,控制臺
write log pts/1
發(fā)生消息腳本
#! /bin/bash
#查看用戶是否登錄 -i 忽略大小寫 -m 1 表示只拿第一行的數據(用于匹配到多行時)
login_user=$(who|grep -i -m 1 $1|awk '{print $1}')
# -z表示判斷是否為空
if [ -z login_user ]
then
echo "$1 用戶不存在"
echo
exit
fi
#用戶是否開啟接受消息功能
mesg_flag=$(who -T|grep -i -m 1 $1|awk '{print $2}')
if [ $mesg_flag != "+"]
then
echo "$1 用戶沒有開啟消息功能"
echo
exit
fi
#確認消息體是否存在
if [ -z $2]
then
echo "沒有消息體入參"
echo
exit
fi
#提取消息體
message=$(echo $* |cut -d " " -f 2-)
#message=$($* |awk '{print $2-}')
#獲取用戶登錄的終端
login_teminal=$(who|grep -i -m 1 $1|awk '{print $2}')
#寫入消息 ,通過管道傳輸
echo $message | write $login_user $login_teminal
if [ $? !=0 ]
then
echo "fail"
else
echo "success"
fi
exit
shell
變量
運算符
條件判斷
if
case
for
while
IO控制臺交互
cut
awk
Shell命令大全拾補
- exit / bye 泻拦,退出終端。
- cd(change dirctory),切換目錄
- ifconfig [interface config]忽媒,linux查看ip地址的命令
- hostname ,查看主機名
- ls /data/logs/ | grep 'home' ,根據關鍵詞查找文件夾里的文件或文件夾争拐。(先列出列表再通過管道進行篩選)
- shutdown ,一分鐘后倒計時關機
- shutdown now ,馬上關機晦雨。
- shutdown 3 ,表示3分鐘后倒計時關機架曹,單位是分鐘。
- shutdown -c ,取消關機闹瞧。
- shutdown 15:15 ,表示在這個時間進行關機绑雄。
- poweroff ,馬上關機奥邮。
參考
Linux快捷鍵
- ctrl + alt(option) 喚起鼠標光標。
- ctrl + alt(option) + f2 ,創(chuàng)建一個真實的命令解釋層終端洽腺。
- ctrl + alt(option) +f1 ,關閉真實的命令解釋層終端脚粟,退回桌面的圖形化界面。
- ctrl + shift + + (因為+在上面蘸朋,所以要加個shift),放大終端界面和字體大小
- Ctrl + - 核无,縮小終端界面和字體大小
- Ctrl + 0 (數字0) ,回歸默認大小
- Ctrl + command 藕坯,釋放鼠標展示团南。
疑問
- mac的類似xshell的遠程登錄工具推薦?
- 遠程文件傳輸工具xftp也是炼彪,有什么mac版