【小白入門 通俗易懂】2021韓順平 一周學(xué)會Linux

Shell:

橋接模式:同一個網(wǎng)段下設(shè)置IP地址,虛擬系統(tǒng)可以和外部系統(tǒng)通訊。
NAT模式:網(wǎng)絡(luò)地址轉(zhuǎn)換模式,可以與外部通訊(單向),不造成IP沖突

直接復(fù)制安裝好的虛擬機(jī)文件(在VirtualMachine里)
VM內(nèi)打開.vmx文件

boot 存放啟動linux時的核心文件
root 系統(tǒng)管理員的用戶主目錄
lib 系統(tǒng)開機(jī)所需的動態(tài)連接共享庫
bin 存放經(jīng)常使用的指令
etc 存放配置文件
usr 存放應(yīng)用程序和文件
dev 類似于windows的設(shè)備管理器,把所有的硬件用文件的形式存儲
mnt 臨時掛載別的文件系統(tǒng)
i 進(jìn)入編輯模式
:q! 強(qiáng)制退出并且不保存
一般模式下(指令不會出現(xiàn),但可能有提示):
yy 拷貝當(dāng)前行
5yy 拷貝當(dāng)前行向下5行
p 粘貼
dd 刪除當(dāng)前行
5dd 刪除當(dāng)前行向下5行
G 定位到文檔的最末行
gg 定位到最首行
u 撤銷動作
5 shift+g 定位到第5行
命令行下:
/關(guān)鍵字 查找關(guān)鍵字,找到后按n選擇找到的內(nèi)容
:set nu 顯示行號
:set nonu 取消顯示行號
shutdown -h now 立即關(guān)機(jī) 相當(dāng)于halt
shutdown -h 1 一分鐘后關(guān)機(jī) -h(halt)
shutdown -r now 重啟 相當(dāng)于reboot
sync 把內(nèi)存的數(shù)據(jù)同步到磁盤
su 登錄為root用戶
root創(chuàng)建用戶,每個用戶對應(yīng)一個目錄
useradd jacky 添加用戶jacky,該用戶的目錄在/home/jacky
useradd -d /home/test king 指定目錄添加用戶
userdel jacky 刪除用戶jacky
userdel -r jacky 刪除用戶jacky及其家目錄
passwd 用戶名 設(shè)定密碼
pwd 顯示當(dāng)前用戶所在目錄
who am i 查看當(dāng)前用戶(第一次登錄的用戶)
groupadd 組名 添加組
groupdel 組名 刪除組
useradd -g HGD P 添加用戶P,并將其放入HGD組
usermod -g TGD P 將P放入TGD組
/etc/passwd 記錄用戶信息

/etc/shadow 口令配置文件

/etc/group 組的配置文件


查看當(dāng)前默認(rèn)級別:
systemctl get-default
設(shè)定默認(rèn)級別:
- 多用戶有網(wǎng)絡(luò) systemctl set-default multi-user.target
- 圖形界面 systemctl set-default graphical.target
- 進(jìn)入開機(jī)界面按e進(jìn)行編輯
- 找到linux*16 ...... UTF-8 在后面輸入 空格init=/bin/sh,接著輸入CTRL+X 進(jìn)入單用戶模式
- 在光標(biāo)閃爍的地方輸入: mount -o remount,rw / 回車
- 輸入passwd回車,然后輸入兩次新密碼(別用小鍵盤輸入),成功的話會顯示passwd.........
- 輸入touch /.autorelabel回車
- 輸入exec /sbin/init等待
man ls 獲取關(guān)于ls的信息(空格下滑)
ls -a 列出所有文件(包括隱藏)
(linux下隱藏文件以.開頭)
ls -l 單列輸出(更詳細(xì))縮寫ll
-a -l 可以組合使用即 -la
ls -la /root 顯示root下的內(nèi)容
help命令(獲得shell內(nèi)置命令的幫助信息)
pwd 當(dāng)前工作目錄的絕對路徑
絕對路徑與相對路徑:

cd 回到自己的家目錄
mkdir -p ~/animal/tiger 創(chuàng)建多級目錄
rmdir 刪除空目錄
rm -rf 強(qiáng)制刪除目錄 -rf(recursive force遞歸強(qiáng)制刪除不提示)
touch a.txt 創(chuàng)建空文件
cp -r source dest 將source下的所有文件拷貝到dest(-r recursive遞歸復(fù)制)
\cp -r source dest 強(qiáng)制覆蓋(dest內(nèi)有source的情況下)
mv oldNameFile newNameFile 重命名(同一目錄下)
mv 源目錄 目標(biāo)目錄 移動整個目錄
cat -n 文件名 顯示行號查看文件
cat 文件名 | more 顯示文件的一部分
more的快捷鍵

less 文件名 分屏查看文件內(nèi)容

echo $PATH 輸出環(huán)境變量到控制臺
head -5 文件 查看文件前5行(默認(rèn)10行)
tail -5 文件 顯示文件后五行(默認(rèn)10行)
tail -f 文件 實時監(jiān)控文件更新
echo "hello" > mydata.txt 將顯示終端的內(nèi)容輸出到mydata.txt,相當(dāng)于直接往文件里寫入數(shù)據(jù)(覆蓋)
echo "hello" >> mydata.txt將顯示終端的內(nèi)容輸出到mydata.txt,相當(dāng)于直接往文件里寫入數(shù)據(jù)(追加)
ln 軟鏈接即符號鏈接

ln -s /root /home/myroot 為/root創(chuàng)建軟鏈接myroot(快捷方式)(也可以為文件創(chuàng)建軟連接)
rm /home/myroot 刪除軟鏈接
history 查看歷史命令
history 10 查看最近10條命令
!5 執(zhí)行歷史上的第5條指令
查看日期

設(shè)置日期

find 搜索范圍 選項

find /home -name hello.txt 在/home下查找按名字查找hello.txt
find / -size +200M 根目錄下查找大于200M(M,k,G)的文件(+大于 -小于)
updatedb 更新locate數(shù)據(jù)庫
locate hello.txt 快速定位hello.txt文件
which ls 查看指令ls在哪個目錄
cat a.txt | grep -n "hello" 從a.txt中查找hello,grep過濾查找,顯示行號
grep -n "hello" /home/hello.txt
上面兩條指令相同

選項:

gzip 文件 壓縮文件(原文件消失)
gunzip 文件.gz 解壓文件
zip -r myhome.zip /home/ 壓縮目錄/home
unzip -d /opt/tmp myhome.zip 將myhome.zip解壓到指定目錄/opt/tmp
tar [選項] XXX.tar.gz 文件 打包文件(原文件仍然存在)
-x, --extract 從存檔展開文件
-c, --create 建立新的存檔

- tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt 把pig.txt和cat.txt兩個文件壓縮為pc.tar.gz
- tar -zcvf pc.tar.gz /home/ 將/home文件夾壓縮成pc.tar.gz
- tar -zxvf pc.tar.gz 將pc.tar.gz解壓到當(dāng)前目錄
- tar -zxvf /home/myhome.tar.gz -C /opt/tmp2 將myhome.tar.gz解壓到目錄/opt/tmp2下
想把帶.gz的文件解壓,就添加選項-z
想把文件壓縮為.gz,就添加選項-c
壓縮命令總結(jié)與對比:


上圖中的①②③對應(yīng)了下圖的權(quán)限①②③
分別是
所有者對該文件的權(quán)限
所屬組對該文件的權(quán)限
其他用戶對該文件的權(quán)限

ls -ahl 查看文件所有者
-a 列出所有文件
-h 以KB MB GB來顯示文件大小
-l 顯示詳細(xì)信息
三個選項可以重疊使用
chown tom a.txt 將a.txt的所有者改為tom(tom必須存在)
groupadd monster 創(chuàng)建組monster
useradd -g monster fox 創(chuàng)建用戶fox并將其放入組monster
chgrp monster a.txt 將a.txt的組修改為monster
usermod -g monster cat 將用戶cat修改到組monster
usermod -d /home/fox cat 改變用戶cat登錄的初始目錄為/home/fox (用戶需要有進(jìn)入到新目錄的權(quán)限)
刪除一個文件的前提是對該文件所在的目錄有寫權(quán)限w
目錄權(quán)限:
x 可以對目錄中的文件內(nèi)容進(jìn)行修改

ll 顯示的內(nèi)容

chown tom /home/abc.txt 將文件所有者修改為tom
chown -R tom /home/kkk 將目錄kkk下所有文件的所有者都修改為tom
chgrp john abc.txt 將文件abc的組修改為john
- groupadd sx, groupadd yg
- useradd -g sx ts, useradd -g yg wk, useradd -g yg bj, useradd -g sx ss
- passwd ts ts
- vim monkey.java
- chmod 760 monkey.java
- vim monkey.java
- usermod -g yg ss
- vim monkey.java

3、直接將文件命名為aa,在4中運(yùn)行./aa會直接執(zhí)行aa中的文本
定時重復(fù)執(zhí)行命令
定時重復(fù)執(zhí)行程序
crontab -e
在打開的文件中輸入:
*/1 * * * * ls -l /etc/ > /tmp/to.txt
每隔1分鐘往to.txt文件中寫入(覆蓋)目錄etc的內(nèi)容
時間規(guī)則如下:

每個占位符這樣寫 */n ,n為數(shù)字
特殊符號:

P54
1、*/1 * * * * date >> /tmp/mydate
每隔1分鐘,就將當(dāng)前日期信息追加到/tmp/mydate文件中
2、定時執(zhí)行腳本:
在腳本文件my.sh中寫入(注意執(zhí)行權(quán)限)
date >> /home/mycal
cal >> /home/mycal
crontab -e
*/1 * * * * /home/my.sh
每隔1分鐘
3、crontab -e
0 2 * * * mysqldump -u root -proot testdb > /home/db.bak
每天凌晨2點將mysql數(shù)據(jù)庫testdb備份到文件db.bak中
crontab -l 列出任務(wù)調(diào)度
crontab -r 終止任務(wù)調(diào)度
一次性定時計劃任務(wù)(每60s )
ps -ef 檢測當(dāng)前運(yùn)行的進(jìn)程
-e 顯示所有進(jìn)程 -f 全格式顯示進(jìn)程
ps -ef | grep atd 檢測atd是否在運(yùn)行

at命令格式:
at [選項] [時間]
Ctrl + D 結(jié)束at命令的輸入(按兩次)
選項:

多種設(shè)定時間的方式:

at now + 2 minutes (按兩次Ctrl+D)
/root/my.sh
2分鐘后執(zhí)行腳本my.sh
案例:

lsblk 查看設(shè)備掛載情況

一塊硬盤的三個分區(qū)sda1 sda2 sda3分別掛載到三個掛載點/boot [SWAP] /
lsblk -f 更詳細(xì)的信息
linux硬盤分類:

- 虛擬機(jī)添加磁盤
- 為磁盤分區(qū):
fdisk /dev/sdb
輸入:
n以添加新分
p主分區(qū)
1 1個分區(qū)
回車
回車
w 寫入 退出
- 格式化新分區(qū)
mkfs -t ext4 /dev/sdb1
- 掛載(臨時,重啟后失效)
mkdir newdisk (自己選擇目錄)
mount /dev/sdb1 /newdisk
卸載硬盤:
umount /dev/sdb1 或
umount /newdisk
永久掛載:
vim /etc/fstab 進(jìn)入fstab
yy p 拷貝一份

df -h 查看磁盤使用情況
du -h /home 查看/home的磁盤占用情況

ls -l /opt | grep "^-" 只顯示以-開頭,這樣就篩選出了目錄中的所有文件
ls -l /opt | grep "^-" | wc -l 統(tǒng)計目錄中的文件數(shù)量
ls -l /opt | grep "^d" | wc -l 統(tǒng)計目錄中的目錄數(shù)量
ls -lR /opt | grep "^-" | wc -l 統(tǒng)計目錄中文件的個數(shù),包括子目錄的下的文件
ls -lR /opt | grep "^d" | wc -l 統(tǒng)計目錄中文件的個數(shù),包括子目錄的下的文件
tree /home 以樹狀顯示目錄
yum install tree 安裝tree指令
第十三章 網(wǎng)絡(luò)配置

虛擬網(wǎng)絡(luò)編輯器設(shè)定虛擬機(jī)IP
同一個網(wǎng)段能ping通,則兩臺主機(jī)能通訊
想從虛擬機(jī)ping虛擬網(wǎng)卡,需要關(guān)閉防火墻
- 自動獲取IP:
每次自動獲取的IP可能不一樣
- 指定IP(將ip改為192.168.200.130):
編輯:
vim /etc/sysconfig/network-scripts/ifcfg-ens33

修改虛擬網(wǎng)絡(luò)編輯器
vim /etc/hostname 修改主機(jī)名
如何ping主機(jī)名:
- Windows
在C:\Windows\System32\drivers\etc\hosts文件中指定
192.168.200.130 CentOS777
- Linux
在/etc/hosts文件中指定
192.168.200.1 Hasee-laptop
(虛擬網(wǎng)卡的ip)
DNS:Domain Name System 域名和IP的映射
主機(jī)名解析按以下順序進(jìn)行:
瀏覽器緩存→DNS緩存→hosts文件→DNS服務(wù)器

第十四章 進(jìn)程管理
運(yùn)行起來的程序就是進(jìn)程
占有屏幕的進(jìn)程:前臺
否則:后臺

ps -aux | more 顯示詳細(xì)信息

ps詳解

案例:以全格式顯示當(dāng)前所有的進(jìn)程,查看進(jìn)程的父進(jìn)程
ps -ef 全格式顯示當(dāng)前所有進(jìn)程
-e 顯示所有進(jìn)程 -f 全格式
ps -ef | grep sshd 查看sshd及其父進(jìn)程

上圖中進(jìn)程間的關(guān)系(父→子):
1→1115→1781
systemd→sshd→root@pts/0(xshell)
kill [選項] PID
killall 進(jìn)程名稱 (該操作會終止子進(jìn)程)
選項: -9 強(qiáng)迫進(jìn)程立即停止
案例
- killall gedit 終止文本編輯器
- kill 11421 踢掉進(jìn)程號為11421的遠(yuǎn)程登錄用戶
- kill sshd 終止sshd服務(wù) /bin/systemctl start sshd.service 重啟sshd服務(wù)
- ps -aux | grep bash 查詢bash進(jìn)程號 kill -9 10487 強(qiáng)制終止終端
pstree 以樹狀的形式顯示進(jìn)程
pstree -p 以樹狀的形式顯示進(jìn)程(帶PID)
patree -u 以樹狀的形式顯示進(jìn)程(帶UID)
服務(wù)(service)的本質(zhì)就是進(jìn)程,但是是運(yùn)行在后臺的,通常會監(jiān)聽某個端口,等待其他程序的請求,比如mysqld, sshd等,因此又稱之為守護(hù)進(jìn)程。
服務(wù)即守護(hù)進(jìn)程及其端口號:

service管理指令:

service network stop 關(guān)閉網(wǎng)絡(luò),端口監(jiān)聽也會關(guān)閉(xshell失效)
查看系統(tǒng)自啟服務(wù)
ll /etc/init.d
Linux開機(jī)流程:

chkconfig 設(shè)定服務(wù)在不同運(yùn)行級別的自啟動


systemctl status firewalld 查看防火墻狀態(tài)
systemctl start firewalld (臨時)啟動防火墻自啟
systemctl stop firewalld (臨時)關(guān)閉防火墻自啟
systemctl disable firewalld (永久)關(guān)閉防火墻自啟
以上設(shè)定全部立即生效
打開防火墻的指定端口

netstat -anp | more 查看端口信息
動態(tài)監(jiān)控進(jìn)程top
top 默認(rèn)3s刷新進(jìn)程


zombie僵死進(jìn)程:沒有釋放內(nèi)存的已結(jié)束進(jìn)程
在監(jiān)控中按鍵以排序

u 選擇特定用戶
k 終止指定進(jìn)程
netstat -an 查看系統(tǒng)網(wǎng)絡(luò)情況,結(jié)果按一定順序排列輸出
選項:-p 顯示更多信息,如PID,進(jìn)程名
netstat -anp | grep sshd 查看進(jìn)程sshd的信息

Local Address 本地地址
Foreign Address 外部地址
第17章 Shell編程
#!/bin/bash 開頭
執(zhí)行腳本的方法:
- 給腳本設(shè)定+x權(quán)限,然后./hello.sh
- sh + 腳本執(zhí)行
set 查看系統(tǒng)變量
unset 撤銷變量
readonly B=2 設(shè)定靜態(tài)變量,該變量不能被unset
A=$var 在.sh文件中引用系統(tǒng)變量
Shell變量不能用數(shù)字開頭,等號兩側(cè)無空格,變量一般為大寫

export TOMCAT_HOME=/opt/tomcat 將shell變量輸出為環(huán)境變量(全局變量),TOMCAT_HOME代表了路徑/opt/tomcat
source 配置文件 讓修改后的配置信息生效
TOMCAT_HOME可以在其他.sh文件中使用,輸出TOMCAT_HOME:
echo "tomcat_home=$TOMCAT_HOME"
shell腳本的多行注釋:
:<<!
ABC
ACB
!
位置參數(shù)變量,獲取執(zhí)行腳本時,輸入的參數(shù),例:
./var.sh 100 200
100和200就是執(zhí)行腳本時輸入的參數(shù),如何獲得此參數(shù)?
在腳本中這樣表示:
$1 $2.... $9 第一個參數(shù),第二個參數(shù)...第9個參數(shù)
$0 代表命令本身
另外:
$* $@都表示所有的參數(shù)
$# 表示所有參數(shù)的個數(shù)
位置參數(shù)的例子,在var.sh中輸入:

執(zhí)行var.sh文件:

Shell設(shè)計者事先定義好的變量

使用案例:

基本語法:
- $((運(yùn)算式))
- $[運(yùn)算式]
- expr m + n 運(yùn)算符前后的空格不能省略A=`expr n + m`,運(yùn)算符:- \* / %
基本語法:
[ condition ] 中括號內(nèi)非空返回true
[ condition ] && echo OK || echo notok condition滿足,則執(zhí)行echo OK || echo notok


第一題:
if [ "ok" = "ok" ]
then
echo "equal"
fi
第二題:
if [ 23 -ge 22 ]
then
echo "大于"
fi
第三題:
if [ -f /root/shcode/aaa.txt ]
then
echo "存在"
fi
if [ 判斷式 ]
then
代碼
elif [ 判斷式 ]
then
代碼
fi
編寫一段代碼:
輸入的參數(shù)大于等于60,輸出及格了,小于60,輸出沒及格

case語法:
案例:當(dāng)命令行參數(shù)為1時,輸出周一,是2,則輸出周二,其他情況輸出other
- 語法1

- 語法2

- 案例1

- 案例2

while [ 判斷式 ]
do
程序
done
案例:

read讀取控制臺輸入:

案例:

read -p " " NUM
read -t 10 -p " " NUM2
basename 返回完整路徑最后/的部分,常用于獲取文件名(可以直接寫在終端中)
語法:

案例:返回/home/aa/test.txt的test.txt的部分
dirname 返回路徑
dirname /home/aaa/test.txt
自定義函數(shù),基本語法:
function無中括號,值無中括號

案例:




Ubuntu
sudo passwd 設(shè)定root用戶初始密碼

sudo apt-get update 更新源
sudo apt-get install package 安裝包
sudo apt-get remove package 刪除包
sudo apt-get source package 下載該包的源代碼
sudo apt-get remove vim 卸載vim
sudo apt-cache show vim 獲取vim信息
- 更新源服務(wù)器列表(換源):
echo ' ' > /etc/apt/sources.list 清空(先備份)
復(fù)制鏡像地址到sources.list
apt是apt-get的改進(jìn)版,但
sudo apt install vim 和sudo apt-get install vim運(yùn)行結(jié)果沒有區(qū)別
netstat -anp | more 查看端口情況
SSH:

ubuntu上要手動安裝ssh:
sudo apt install openssh-server
啟動ssh服務(wù)端:
service sshd restart
不同ubuntu相互登錄:
ssh john@192.168.157.133
登出:
exit或logout
第二十三章 Linux內(nèi)核
操作系統(tǒng):進(jìn)程管理、內(nèi)存管理、文件系統(tǒng)、(驅(qū)動程序和網(wǎng)絡(luò))
內(nèi)核源碼:

main.c :
