【學習筆記】兄弟連LINUX視屏教程(沈超 李明)

来源:https://www.cnblogs.com/yongestcat/archive/2019/10/25/11736732.html
-Advertisement-
Play Games

發現自己的linux水平楞個瓜皮,找個視屏教程學習一哈1 linux系統簡介1.1 UNIX和Linux發展史unix發展歷史:1969年,美國貝爾實驗室的肯.湯普森開發出unix系統,1971年丹尼斯·里奇發明C語言,1973年,unix用c重寫硬體平臺的概念 也就是cpu架構PowerPC IB... ...


發現自己的linux水平楞個瓜皮,找個視屏教程學習一哈

1 linux系統簡介

1.1 UNIX和Linux發展史

unix發展歷史:1969年,美國貝爾實驗室的肯.湯普森開發出unix系統,1971年丹尼斯·里奇發明C語言,1973年,unix用c重寫

硬體平臺的概念  也就是cpu架構

PowerPC      IBM          AIX

PA-RISC       HP        HP-UX

SPARC         Sun          Solaris

IA(Intel、AMD、Cyrix、RISE…)      Red Hat Linux、Ubuntu…   linux

AIX和HP-UX是不能安裝在pc中,必須在特定的伺服器上,Solaris可以

freebsd  加州大學伯克利分校

mac也是由unix演變來的

linux發展歷史:1991年,Linus Torvalds和其他眾多愛好者開發完成

Linux是開源軟體,源碼開放的UNIX

內核官網:www.kernel.org

版本號如  2.6.18

目前最新  4.18.4

次版本是偶數是穩定版奇數是開發版,這種說法在主版本更新到3就沒了

發行版:redhat系列(yum)和debian系列(apt-get)

fedora是rhel的實驗版本,要收費

centos完全免費 社區維護

gentoo linux不適合初學者

SUSE在歐洲用的多,界面都快趕上unbuntu

KNOPPIX不用安裝,類似livecd

ubuntu界面漂亮,桌面用戶多點,server端並不多

1.2 開源軟體簡介

商業軟體是收費的

開源軟體免費但是可以收服務費

image

使用、研究、散佈及改良的自有

1.3 Linux應用領域

基於Linux的企業伺服器

www.netcraft.com 掃描和踩點網站

嵌入式應用

安卓、手機、平板、智能家電、航空、銀行、卡拉OK點歌系統、樹莓派

1.4 學習方法

善用工具

英文

忘掉windows思維方式

2 Linux系統安裝

磁碟分區

分區類型

主分區:最多4個

擴展分區:最多1個,不能寫入數據,只能掛載邏輯分區

主分區+擴展分區 最多4個

邏輯分區

格式化(高級格式化)又稱為邏輯格式化,是要在硬碟中寫入文件系統

ext4  4k  數據塊 block

i節點 inode列表

低級格式化是硬碟操作不是操作系統操作

硬體設備文件名:

IDE硬碟             hd[a-d]                     

SCSI/SATA/USB硬碟      sd[a-p]       

光碟機                    cdrom或sr0

滑鼠                     mouse

印表機(25針)                 lp[0-2]

印表機(USB)                 /dev/usb/lp[0-15]

ide 133MB  最古老, scsi都淘汰了 200MB貴伺服器

SATA3 串口硬碟 500MB/s  現在一般都是這個

邏輯分區不能占用1 2 3 4編號   5一定是第一個邏輯分區

掛載:

/ 根分區

swap分區 交換分區  記憶體1.5-2倍  不超過2G

推薦分區/boot  啟動分區 200m即可 太大無用,系統啟動都要有空閑空間,防止系統寫滿導致無法啟動,寫完之後永遠不會往這個分區再寫入數據,他永遠有空閑空間  boot分區一定是sda1第一個分區

掛載點必須是空目錄

安裝日誌:

/root/install.log:存儲了安裝在系統中的軟體包及其版本信息

/root/install.log.syslog 存儲安裝過程中留下的事件記錄

/root/anaconda-ks.cfg 已Kickstart配置文件的格式記錄安裝過程的選項設置  作為無人值守安裝的模板

linux 嚴格區分大小寫

命令全是小寫

文件名區分大小寫

tab鍵自動補全

linux中一切皆文件  設備文件是特殊的文件

永久生效都要寫入文件  寫入記憶體的都是臨時生效

linux不通過擴展名區分文件類型

linux存儲設備都必須掛載後才能使用

目錄作用

/bin  存放系統命令,普通用戶和root都可以執行

/sbin 保存和系統環境設置相關的命令,只有root能執行

/usr/bin

/usr/sbin

/boot 系統啟動目錄

/dev 設備文件

/etc  配置文件

/home 宿主目錄

/lib 系統函數庫

/lost+found/ 當系統崩潰或意外關機而產生的文件碎片。當系統啟動過程fsck工具會檢查這裡,並修複系統   每個分區都有自己的這個目錄

/media 掛載目錄   多媒體設備  光碟

/mnt 掛載目錄 u盤移動硬碟或其他操作系統分區

/misc 掛載目錄 系統建議用來掛載nfs服務的共用目錄

/opt 第三方軟體保存位置  用處不多,現在外部軟體一般放/usr/local目錄

/proc 虛擬文件系統  放記憶體中 當前系統的進程和硬體信息

/sys  虛擬文件系統  放記憶體中 存放內核相關信息

/root  root家目錄

/srv  服務數據目錄

/tmp 臨時

/usr 系統軟體資源目錄

/var 動態數據保存位置。保存緩存、日誌及軟體運行產生的文件

usr  unix system resource

伺服器不允許關機,只能重啟

重啟時應該關閉服務

不要在伺服器訪問高峰運行高負載命令

遠程配置防火牆時不要把自己踢出伺服器

合理分配許可權

定期備份重要數據和日誌

mint 預設不啟用root用戶,sudo passwd root來啟用

mint也預設不啟用ssh,sudo apt-get install openssh-server然後修改配置文件vi /etc/ssh/sshd_config 修改PermitRootLogin yes行,來允許root用戶ssh遠程登陸

3 常用命令

3.1 文件處理命令

命令格式  命令 [-選項] [參數] ls -al /etc     中括弧表示可選

個別命令不遵守此格式 多個選項可以寫一起  簡化選項和完整選項  -a  –all

目錄處理命令:

ls  list    /bin/ls  -aldh

所有者  所屬組  其他人  ugo rwx  讀寫執行許可權  777 軟鏈接 硬鏈接

-表示文件 d表示文件 l表示link

.開頭的文件表示隱藏文件   .當前目錄  ..父目錄

mkdir /bin 創建目錄   -p 表示遞歸創建 -m=mode  可以同時創建多個目錄 空格分割

cd 切換目錄 change directory  shell內置命令

pwd  /bin 顯示當前目錄

rmdir  remove empty directories  /bin   刪除空目錄

cp copy /bin   -rp   r表示遞歸 p保留文件屬性 可以複製多個文件

mv move /bin  剪切、改名 可以剪切多個

clear ctl+l  清屏

rm 刪除文件 remove /bin -rf f表示強制執行

文件處理命令:

touch /bin 創建空文件 文件名如果是有空格 加雙引號 不建議

cat 查看文件 /bin -n 顯示行號

tac 導致顯示

more 分頁顯示文件內容 /bin   空格或f 翻頁 q或Q退出 enter換行

less 同more不過可以向上翻頁  pageup 上箭頭 還可以搜索 /詞兒  高亮顯示搜索到的  n顯示下個搜索到的

head 查看前幾行 -n  預設10行

tail -fn  查看後幾行  -f實時監控

鏈接命令:

ln link /bin  ln -s [原文件] [目標文件]  -s表示軟連接  不加表示硬鏈接

軟連接類似win快捷方式,l標記許可權全是777 軟連接很小

硬鏈接和原文件的i節點相同

硬鏈接刪除源文件,目標文件依然可以使用。軟鏈接一旦刪除源文件,目標文件不可用

和cp -p的不同處 修改一處後,另外一處也會同時更新。

硬鏈接不能跨分區  硬鏈接不能對目錄使用

3.2 許可權管理命令

chmod  root和所有者可以改許可權

change the permissions mode of a file

/bin

-R 遞歸修改 mode=421 {ugoa}+-={rwx}

可以同時進行多個授權

更多的是用數字方式 777 表示擁有全部許可權

對目錄 r表示可以列出目錄內容  w表示可以在目錄中創建 刪除文件 x可以進入目錄

刪除文件的許可權是對所在目錄有寫許可權

對目錄有r許可權就一般有x許可權

chown  只有root可以改

change file ownership

chgrp

useradd

groupadd

一般誰創建的文件 誰就是所有者

一個用戶有多個組 單有個預設組  文件的創建者的預設組就是文件的所屬組

umask -S 預設許可權   u=rwx,g=rx,o=rx

創建目錄的許可權和預設許可權一樣

創建文件的許可權是預設許可權去除x許可權  防木馬病毒

umask          0022   0 特殊許可權  022  真正的許可權是777-022=755

umask 023

3.3 文件搜索命令

find  搜索會占用大量資源 不要在服務高峰期使用 window中everything挺好用的,不過沒有linux版本,並且只支持ntfs分區

/bin      find [搜索範圍] [匹配條件]

-name 根據文件名搜索  find /etc -name init

通配符  *匹配任意字元       ?匹配單個字元

-iname  忽略大小寫

搜索範圍越小越好  能不在根目錄下就不要全局搜索 嚴重耗費資源

-size 指定文件大小   +-  linux一個數據塊512B  就是0.5k   查找大於100M的文件find / -size +204800

-user  找所有者的文件

-group 找所屬組的文件

根據時間屬性查找

-amin 訪問時間 access

-cmin 文件屬性 change

-mmin 文件內容 modify

find /etc -cmin -50  查找50分鐘以內修改過文件屬性的文件 +-

連接選項  -a兩個條件同時滿足 -o兩個條件滿足任一           find / -size +163840 -a -size -204800

find /etc -name init -exec ls -l {} \;                  -exec/-ok 命令 {} \; 對搜索結果執行操作     -ok有確認詢問

-type 根據文件類型  f文件 d目錄 l軟連接

-inum 根據i節點查找        可以找硬鏈接

locate命令

/usr/bin 在文件資料庫中查找

yum install -y mlocate

會定期更新

速度快

updatedb 初始化

locate -i 不區分大小寫

/tmp目錄不被收錄  某些目錄不被收錄

which 命令搜索  which ls  還能搜到命令別名

whereis  還能搜到幫助文件

grep  -i 不區分大小寫  -v排除指定字元串  ^表示行首  反向查找 屏蔽

3.4 幫助命令

man manual /usr/bin

可以查命令幫助 也可以查配置的幫住

man ls

man services  不可以寫絕對路徑

可以    /內容   查找

man passwd 優先查命令   1一般是命令的幫住 5一般是配置文件的幫住

man 5 passwd 是查配置

whatis 可以查到命令的簡短介紹  就是幫助文檔的name部分

apropos 可以查配置文件的簡短介紹 也不要加絕對路徑

–help  只看選項 不會man那麼長

info 和man大同小異

help  可以查看shell內置命令的幫助

shell內置命令找不到路徑

3.5 用戶管理命令

useradd 加用戶

passwd 改密碼  普通用戶改自己密碼需要滿足複雜度要求

who 查看哪些用戶登錄   tty表示本地登錄 pts表示遠程終端

w 查看登錄用戶及正在幹嘛

3.6 壓縮解壓命令

絕大多數病毒很難感染壓縮文件

常用壓縮格式

.gz linux中常用格式 命令gzip  gunzip解壓縮 或者gzip -d        

壓縮比很驚人 差不多5倍

不過gzip只能壓縮文件 不能目錄

壓縮解壓均不保留源文件

.zip linux和win通用格式

zip命令 保留源文件 -r壓縮目錄

壓縮比差於gzip

unzip解壓縮  不區分文件和目錄

.tar .tar.gz可以壓縮目錄

tar命令 -z 打包同時壓縮格式為gz -c打包  -v verbose詳細  -f 指定文件名  -x解包  -j打包同時壓縮格式為bz2

.bz2   gzip的升級版

bzip2命令 -k可以保留原文件 壓縮比驚人

bunzip2 解壓縮.bz2文件 -k可以保留源文件 bzip2 -d也可以解壓

tar -xjf 可以解壓.tar.bz2文件

3.7 網路命令

write  發信息給伺服器上其他用戶,登錄了的用戶才能發信息  最初的及時通訊 ctrl+d結束

wall 給所有線上用戶發信 , writeall的意思

ping  給遠程用戶發送icmp包,檢測目標是否存在,每經過一個路由節點ttl減少1  不同系統ttl初始值不一樣 可以大概判斷對方操作系統類型 linux是64

ifconfig 查看當前網路 eth0是初始網卡  lo是迴環網卡用戶檢測tcpip是否通暢,mac地址是固話在網卡的只讀存儲器中的地址不可變

ifconfig eth0 192.0.0.0 可以臨時更改ip

mail 郵件命令 用戶不線上也可以 mail用戶名發信  mail啥都不跟收信 輸入help查看幫助 輸入序列號查看信 h可以看到信列表  d 1 刪除郵件

last 重啟信息都有 所有用戶登錄信息  非常有效 常用的命令

lastlog 同last只記錄最後一次登錄 lastlog -u 502指定用戶

traceroute 顯示數據包到主機間的路徑   凡走過必留痕跡  結果顯示**是被該節點屏蔽了

netstat 顯示網路相關信息 -t tcp協議 -u udp協議  -l 監聽 -r路由 -n 顯示ip埠

netstat -tlun 查看本機監聽的埠

netstat -an 查看本機所有的網路連接

netstat -rn 查看本機路由

tcp 傳輸控制協議 有三次握手協議  更可靠  類似打電話

udp 用戶數據報協議 更快  類似發簡訊

tcp才可以監聽埠  udp不可以  udp可以直接發送

發起埠是隨機的  目標埠才是22 80等埠

setup 修改網路, 是redhat中特有的 其他版本沒有  永久生效

yum install -y setuptool

安裝工具組件如 ntsysv(系統服務)system-config-networktui(網路服務)iptables(防火牆配置)

yum install system-config-securitylevel-tui

yum install iptables

yum install ntsysv

yum install system-config-network-tui  centos7,已經setup已經無法配置網路了,該命令中無法找到,推薦使用nmtui命令

service network restart 重啟網卡

mount 掛載

mount -t iso9660 /dev/sr0 /mnt/cdrom

/dev/cdrom 是/dev/sr0的軟連接

-t iso9660 可以不寫 預設就是

umount /dev/sr0

如果正在掛載目錄中,是卸載不了提示設備忙,要退出掛載目錄

3.8 關機重啟命令

shutdown

shutdown -h now

shutdown -h 8:30

shutdown -r now

shutdown -r 8:30

最早期只有shutdown 可以正確保存服務,目前其他命令也可以不過推薦使用shutdown

-c 取消前一個關機命令

-h 關機

-r 重啟

伺服器不能關機 只能重啟 謹記

halt

poweroff  相當於直接斷電  比較危險

init 0

上面3個命令也可以關機

reboot重啟

init 6也可以重啟

系統運行級別:表示linux啟動時候可以進入的級別號

0 關機

1 單用戶      類似win啟動f8安全模式,啟動最小服務,啟動最小核心程式,用戶修複系統,只能root登陸,沒有圖形界面和win安全模式不一樣

2 不完全多用戶,不含nfs服務    nfs驗證機制弱,不建議用這個文件共用

3 完全多用戶

4 未分配

5 圖形界面

6 重啟

cat /etc/inittab 是init的配置文件  別改0或6   改錯就不好了

X11代表圖形界面 X表示X-window

runlevel 查詢系統運行級別

logout 註銷  做完操作一定要退出  防止安全隱患

4 Vim文本編輯器

vim是vi的增強版

vim是功能非常強大的全屏幕文本編輯器,是linux/unix中最常用的編輯器

vim沒有菜單隻有命令

命令模式

插入模式  iao進入 esc退出

編輯模式   輸入: 進入編輯模式 命令以回車結束    :set nu 顯示行號   :wq保存退出

插入命令

a 在後面插入

A 在行尾插入

i 在前面插入

I 在行首插入

o 在下行插入

O 在上行插入

定位命令:

:set nu 顯示行號

:set nonu 取消行號

gg 到第一行

G 到最後一行

nG 到第n行

:n 到第n行

$ 移到行尾

0 移到行首

刪除命令:

x 刪除游標出字元

nx 刪除游標所在處後n字元

dd 刪除當前行

dG 刪除游標所在行到文件尾

D 刪除游標所在處到文件尾

:n1,n2d刪除指定範圍行

複製和剪切命令:

yy 複製當前行

nyy 複製n行

dd 剪切當前行

ndd 剪切多行

p、P 粘貼到當前行下或者行上

替換和取消命令

r 替換單個字元

R 多個字元替換,esc結束

u 取消上一步操作  undo

搜索和搜索替換命令:

/string   搜索字元串 搜索時候忽略大小寫:set ic 取消 :set noic       n下一個

:%s/old/new/g  全文替換    %s表示全文替換

:n1,n2s/old/new/g   範圍替換   g可以換c  表示需要詢問

不加g表示只對搜索字元串的首次出現進行替換

保存退出命令:

:w 保存

:w new_filename 另存為

:wq 保存退出

ZZ 是:wq的快捷鍵

:q! 不保存退出

:wq! 強制保存退出 文件所有者和root可以操作

導入命令執行結果 :r !命令     :r 文件名

定義快捷鍵  :map 快捷鍵 觸發命令

:map ^P I#<ESC>                ^P 是ctrl+v+p 來輸入 顏色不一樣 代表快捷鍵ctrl+p

連續註釋  :n1,n2s/^/#/g

:n1,n2s/^#//g

:n1,n2s/^/\/\//g  避免轉義符  可以用#或者其他字元來表示分割

ls是別名  \ls 轉義符可以使用ls本來命令

自動替換  :ab mymail [email protected]

這些設置重啟失效  要永久生效 要寫入對應用戶的home目錄下的vim配置文件 /root/.vimrc   這裡面只能放編輯模式的命令  不用加:

5 軟體包管理

軟體包分類:

源碼包(看到源碼 安裝慢 但是更加穩定執行效率高 系統高度適配 卸載方便 可以自由選擇所需功能,安裝步驟多,編輯時間長,安裝一旦報錯新手工解決)

      >腳本安裝包  特殊的源碼包 一般是install.sh安裝 給初學者用的

二進位包(經過編譯 安裝快 資源利用率稍低 包管理簡單  源碼不可見 功能選擇不如源碼包靈活 依賴性):rpm包、系統預設包

rpm命令管理

httpd-2.2.15-15.el6.centos.l.i686.rpm

軟體包名  軟體版本 軟體發佈次數 適合的linux平臺 適合的硬體平臺  noarch表示適合任何硬體平臺  沒寫linux平臺表示適用所有linux平臺

包名 安裝過的 /var/lib/rpm/中的資料庫

包全名 未安裝過的  絕對路徑

rpm包依賴性

典型的是樹形依賴  a->b->c

環形依賴 a->b->c->a   abc用一條命令安裝可以解決

模塊依賴   模塊依賴查詢網站 www.rpmfind.net

1.安裝軟體:執行rpm -ivh rpm包名,如:

#rpm -ivh apache-1.3.6.i386.rpm     -i  install 安裝   -v 詳細  -h  顯示進度   –nodeps 不檢測依賴性,一般不用

2.升級軟體:執行rpm -Uvh rpm包名。

3.反安裝:執行rpm -e rpm包名。

4.查詢軟體包的詳細信息:執行rpm -qpi rpm包名    可以查未安裝的包

5.查詢某個文件是屬於那個rpm包的:執行rpm -qf rpm包名

6.查該軟體包會向系統裡面寫入哪些文件:執行 rpm -qpl rpm包名

rpm -qa|grep

rpm -qi  包名

rpm -qf 文件名

rpm -qRp 包名   查依賴

rpm -V 校驗

S 文件大小是否改變

M 文件的類型或許可權是否被改變

5 MD5校驗是否改變

D 代碼是否改變

L 文件路徑是否改變

U 文件的屬主是否改變

G 文件的屬組是否改變

T 文件的修改時間是否改變

文件類型:

c 配置文件

d 普通文件

g ghost文件,就是該文件不應該被rpm包含,很少見

l 授權文件

r 描述文件

rpm包文件提取:

rpm2cpio 包全名 | \                將rpm格式改為cpio格式

cpio -idv .文件絕對路徑        i copy-in模式,還原      d還原時自動新建目錄   v詳細    cpio是一個標準工具,它用於創建軟體檔案文件和從檔案文件中提取文件

yum線上管理

自動解決依賴性問題,不能上網 可以用光碟作為yum源

yum在redhat中需要收費

網路yum源 vi /etc/yum.repos.d/CentOS-Base.repo

[base] 容器名稱

name 容器說明,自己隨便寫

mirrorlist 鏡像站點 可以註釋掉

baseurl yum源伺服器地址

enabled 是否有效  不寫預設是1 表示有效

gpgcheck  1表示rpm的數字證書生效

gpgkey 數字證書的公鑰文件保存位置。不用修改

yum命令

yum list 查詢可用軟體包

yum search 包名     查詢

yum中沒有包全名概念,全用包名

yum install -y 包名   安裝包

yum -y update  包名    升級   如果沒寫包名就是全部升級包括內核  會導致伺服器崩潰 因為需要本地配置些  慎用

yum -y remove 卸載   會把依賴的包也卸載  這些卸載的依賴包可能被別的軟體依賴  卸載命令不安全

安裝的時候最小化安裝   儘量不卸載  不全局升級

yum grouplist  查詢軟體組

yum groupinstall 軟體包組

yum groupremove 軟體包組

光碟yum源搭建:

掛載

網路yum源失效   enable=0或者改名其他yum源文件

修改 CentOS-Media.repo  enable=1 地址改為file:///mnt/cdrom

源碼包安裝是人為手工指定安裝位置  而rpm是預設位置

rpm預設安裝位置

/etc/ 配置文件安裝目錄

/usr/bin 可執行文件安裝位置

/usr/lib  庫文件位置

/usr/share/doc 手冊位置

/usr/share/man 幫助文件位置

源碼包一般安裝在  /usr/local/軟體名   這是系統給準備的第三方軟體位置

安裝位置不同帶來的影響  服務的管理

rpm包安裝的服務可以用系統服務管理命令service來管理,例如rpm包安裝的apache啟動方法/etc/rc.d/init.d/httpd start   或 service httpd start

service 命令是紅帽專有命令  別的linux發行版不一定有

service命令不能管理源碼包安裝的服務

源碼安裝:

需要gcc編譯器

下載源碼包

解壓 進入目錄

./configure  –prefix=/usr/local/apache2       定製功能、檢測系統環境是否符合、將定義的功能和檢測的信息寫入Makefile文件,用戶後續的編輯

make && make install    編譯  編譯安裝           make clean

報錯:安裝停止且出現warning、error、no等提示

腳本安裝:

自動安裝的源碼包  適合新手 下一步下一步那種

debian系列中apt是apt-get、apt-cache、apt-config的集合

apt 命令    取代的命令    命令的功能
apt install    apt-get install    安裝軟體包
apt remove    apt-get remove    移除軟體包
apt purge    apt-get purge    移除軟體包及配置文件
apt update    apt-get update    刷新存儲庫索引
apt upgrade    apt-get upgrade    升級所有可升級的軟體包
apt autoremove    apt-get autoremove    自動刪除不需要的包
apt full-upgrade    apt-get dist-upgrade    在升級軟體包時自動處理依賴關係
apt search    apt-cache search    搜索應用程式
apt show    apt-cache show    顯示安裝細節

當然也有apt獨有的命令

新的apt命令    命令的功能
apt list    列出包含條件的包(已安裝,可升級等)
apt edit-sources    編輯源列表

6 用戶和用戶組管理

相關配置文件

/etc/passwd   用戶信息文件   7個欄位

用戶名 密碼標誌x表示有密碼 如果沒有的話 不校驗密碼登陸不過只能本機登陸 不能遠程

UID 0:超級用戶 1-499 系統用戶(偽用戶 不能登陸不能刪除) 500-65535 普通用戶

root不一定是管理員  uid=0的一定是管理員  普通用戶改為uid0就變成管理員了

GID:初始組id

用戶說明

家目錄

登陸之後的shell

初始組:有且只有一個一般和用戶名相同   能改 但是不推薦改

附加組:可以有多個

影子文件 /etc/shadow    許可權000      9個欄位

用戶:

密文密碼sha512散列加密 比之前的md5更安全(同一個密碼加密出來的也不一樣)如果!!或者*表示沒有密碼表示不能登陸:

密碼最後一次修改日期  時間戳  1970年1月1日 沒過1天 加1算出來的時間戳

兩次密碼的修改間隔

密碼有效期

密碼到期前的告警天數

密碼到期後的寬限天數 0表示過期後立即失效 -1表示密碼永遠不失效

賬號失效時間 時間戳表示

保留

時間戳換算

date -d “1970-01-01 16066 days”

echo $(($(date–date=”2014/01/06″+%s)/86400+1))

組信息文件/etc/group

組名

組密碼標誌

GID

組中附加用戶

添加用戶會生成一個同名組作為用戶主組

/etc/gshadow 組名 組密碼 組管理員用戶名 組中附加用戶

用戶的郵箱

/var/spool/mail/用戶名/

用戶模板目錄

/etc/skel/

用戶管理命令

useradd 選項 用戶名

-u UID  手工指定uid

-d 家目錄

-c 用戶說明

-g 組名

-G 附加組

-s shell

用戶預設值文件/etc/default/useradd

GROUP=100  #用戶預設組            公有模式  私有模式

HOME=/home #用戶家目錄

INACTIVE=-1 #密碼寬限天數(shadow文件7欄位)

EXPIRE=       #密碼失效時間(8)

SHELL=/bin/bash #預設shell

SKEL=/etc/skel  #模板目錄

CREATE_MAIL_SPOOL=yes  #是否建立郵箱

/etc/login.defs 定義了shadow文件中7 8欄位之外的欄位

PASS_MAX_DAYS 9999    #  5欄位

PASS_MIN_DAYS              # 4

PASS_MIN_LEN 5   #最小8位 這個5 沒用 現在pam文件生效

PASS_WAR_AGE 7         #6

UID_MIN   500

UID_MAX 60000

ENCRYPT_METHOD    SHA512

添加用戶預設值都靠上面兩個文件

passwd命令

-S 查詢用戶密碼狀態 僅root可用

-l 暫時鎖定用戶 僅root    shadow文件密碼暗文前面加雙!!

-u 解鎖用戶  僅root

–stdin 可通過管道符輸出的數據作為用戶的密碼

echo “123” | passwd –stdin lamp   一般用與shell編程

whoami

usermod  修改用戶信息

-u  修改uid

-c 說明  有空格用雙引號

-G 加入附加組

-L  鎖定

-U  解鎖

chage 修改用戶密碼狀態

-l 列出用戶的詳細密碼狀態

-d 日期:修改密碼最後一次更改日期(shadow 3欄位)

-m 天數: 兩次密碼修改間隔(4欄位)

-M 天數: 密碼有效期(5欄位)

-W 天數: 密碼過期前警告天數(6欄位)

-I 天數: 密碼過期後寬限天數(7欄位)

-E 日期: 賬號失效是加(8欄位)

chage -d 0 king  要求用戶一登陸必須改密碼 其他的基本都不用記  直接修改shadow文件更直觀

userdel命令  刪除用戶

-r 同時刪除家目錄

手工刪除用戶

vi /etc/passwd

vi /etc/shadow

vi /etc/group

vi /etc/gshadow

rm -rf /var/spool/mail/lamp

rm -rf /home/lamp

id user1  查看用戶信息

su 切換用戶

– 選項表示同時切換環境變數   su root   和su – root    env命令可以查看環境變數

-c 僅執行一次命令 不切換身份  su – root -c “useradd user3”

groupadd 添加組

-g GID  指定組id

groupmod 修改組

-g GID                    改組id

-n 新組名               改組名

groupdel 刪除組

如果組中有用戶,組中有初始用戶 不能刪,如果是附加組 可以刪除

gpasswd 把用戶添加組或者從組中移除

-a  用戶名

-d 用戶名

7 許可權管理

ACL許可權  解決身份不足問題  所有者所屬組其他人  不夠用

查看分區ACL許可權是否開啟

dumpe2fs -h /dev/sda1   預設支持acl   Default mount options:    user_xattr acl

-h 僅顯示超級塊中信息,而不顯示磁碟組的詳細信息

臨時開啟分區ACL許可權

mount -o remount,acl /    #重新掛載根分區,並掛載加入acl許可權

永久開啟ACL

vi /etc/fstab 文件  系統開機自動掛載   寫錯了的話 系統可能崩潰  一定小心

defaults,acl    萬一預設不支持 後面,acl   重啟生效

查看acl命令

getfacl 文件名   不支持絕對路徑 報錯但是不影響

設定acl許可權

setfacl命令

-m  設定ACL

-x   刪除指定ACL

-b 刪除所有acl

-d 設定預設acl

-k 刪除預設acl

-R 遞歸設置acl

chown root:tgroup /project

chmod 770 /project

setfacl -m u:st:rx /project   u表示用戶 g表示組

給用戶st賦予r-x許可權,u:用戶名:許可權

setfacl -m g:group2:rx /project

drwxr-xr-x+  2 root root      4096 Sep  6 11:41 king    多個+號表示有acl許可權

最大有效許可權mask

如果給用戶賦予了acl許可權,是需要和mask的許可權相與才能得到真正許可權

不影響所有者的許可權 但是影響acl和所屬組的許可權

setfacl -m m:rx  文件名  設置mask

setfacl -b 文件

setfacl -x g:tgroup2 /project/

遞歸acl許可權  -R選項 註意只能放後面     老的文件都要遞歸設置下

預設acl許可權  如果給父目錄設定了預設ACL許可權,那麼父目錄中所有新建的子文件都會,只針對新文件  -R可以不取消

setfactl -m d:u:用戶名:許可權 文件名

文件特殊許可權

SetUID的功能:(危險)

只有可以執行的二進位程式才可以設定SUID許可權

命令執行者要對該程式有x許可權

命令執行者在執行該程式時獲得該程式文件的屬主的身份(在執行程式的過程中靈魂附體為文件的屬主)

SetUID許可權只在該程式執行過程中有效,也就是說身份改變只在程式執行過程中有效

passwd命令有SUID許可權  在執行期間可暫時獲得root身份得以改寫shadow文件

-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

cat沒有SUID許可權,所以普通用戶不能查看/etc/shadow文件內容

設定方法 4代表SUID

chmod 4755 文件

chmod u+s 文件名

用戶必須對他有執行許可權,否則顯示大寫S,表示報錯

危險的SUID許可權,系統一些SUID許可權的是迫不得已,輕易不能設置,並且定期巡檢

比如給vim加SUID許可權,那麼普通用戶,紅色表示危險,系統警告,然後vim普通用戶也能改系統關鍵信息比如shadow文件等

SGID也可以針對目錄:(不那麼危險)(用處不大)

普通用戶必須對此目錄有rx許可權,才能進入此目錄

普通用戶在此目錄中的有效組會變成此目錄的屬組

若普通用戶對目錄有w許可權時候,新建的文件的預設屬組是這個目錄的屬組

SGID針對文件:(危險)

只有二進位可執行文件可以設置SGID

命令執行者要有x許可權

命令執行時候組身份升級為該程式屬組

只在執行程式時候有效

locate命令就是這樣的 有SGID許可權    臨時提升為slocate用戶組

/var/lib/mlocate/mlocate.db資料庫

SGID  在所屬組中有s許可權   2代表

chmod 2755 文件

chmod g+s 文件名

SBIT許可權   黏著位許可權  對root無效(不危險)

只對目錄有效

普通母對該目錄有wx許可權,即普通用戶可以在此目錄擁有寫入許可權

如果沒有黏著位,因為木桶用戶有w許可權,所以可以刪除此目錄下所有文件,包括其他用戶建立的文件。一旦賦予黏著位,除了root可以刪除所有文件,普通用戶就算擁有w許可權,也只能刪除自己建立的文件,不能刪除其他用戶建立的文件

chmod 1755 目錄

chmod o+t 目錄

chmod 7755 文件  特殊許可權位 7沒有作用 根據需要賦予

文件系統屬性chattr許可權:     對root也能限制

chattr [-RVf] [-+=aAcCdDeijsStTu] [-v version] files…

+-=許可權

i:針對文件,那麼不允許對文件刪除改名,也不能添加和修改數據 相當於鎖起來了;針對目錄,那麼只能修改目錄下文件的數據 單不允許建立和刪除文件

a:針對文件,那麼只能在文件中增加數據,但是不能刪除也不能修改數據;針對目錄,那麼只能在目錄中建立和修改文件,不能刪除文件

lsattr命令: 文件系統屬性查看 -a -d

這也不能限制到root 只是防止誤操作

selinux可以限制root

sudo許可權   su指的是switch user,並不是super do

root把本來只能超級用戶執行的命令賦予普通用戶執行

sudo的對象是系統命令

visudo   #實際修改的是/etc/sudoers文件

root  ALL=(ALL)  ALL

用戶或者組(%組名)    被管理的主機=(可使用的身份)   命令 (絕對路徑)

man 5 sudoers

8 文件系統管理

分區和文件系統

主分區:總共最多4個

擴展分區:只能有1個,並且也算主分區的一種,主分區+擴展分區最多4個。但是擴展分區不能存儲數據和格式化,必須再劃分為邏輯分區才能使用

邏輯分區:邏輯分區是在擴展分區中劃分的,如果是IDE硬碟,linux最多支持59個邏輯分區,入股歐式scsi硬碟linux最多支持11個邏輯分區

邏輯分區從sda5開始編號,就算主分區不足4個,sd表示sata硬碟,hd表示ide硬碟,也就是第一個邏輯分區一定是5

文件系統:

ext2:是ext文件系統升級版本,red hat linux 7.2版本以前系統預設都是ext2文件系統。1993年發佈,最大支持16TB的分區和最大2TB的文件

ext3:和ext2支持大小一樣,區別是支持日誌功能

ext4(現在主流分區):centos6以後的主流分區,最大支持1EB和單個16TB文件,在性能、伸縮性、可靠性方便大量改進,ext4的變化是翻天覆地的,向下相容ext3,無限數量子目錄、extents連續數據塊概念、多塊分配、延遲分配、持久預分配、快速FSCK、日誌校驗、無日誌模式、線上碎片整理、inode增強、預設啟動barrier等

常用命令:

df 統計文件系統的占用情況

-h 人性化顯示

du 統計目錄大小

du -sh /etc/

-h

-s 統計和

df和du統計根分區不一樣大小,df是從文件系統考慮,不僅考慮文件占用的空間,還要統計唄命令或程式占用的空間(最常見的就是文件已經刪除但是程式並沒有釋放空間),定期重啟還原系統狀態

df看到的剩餘空間才是真正的空間

du命令是面向文件的,只會計算文件或目錄占用的空間

fsck 文件系統修複命令

-a 不用顯示用戶提示,自動修複文件系統

-y 自動修複,和-a一致,不過有些系統只支持-y

該命令不需要人工執行,系統啟動的時候自動檢測,知道就好

dump2fs 顯示磁碟狀態命令,最主要是的看分區數據塊大小和是否支持acl

mount 掛載命令

mount [-l] 查詢系統中已經掛載的設備,-l會顯示捲標名稱   這些輸出內容又叫超級塊的內容

mount -a 根據配置文件/etc/fstab的內容,自動掛載

命令格式

mount [-t 文件系統] [-L 捲標名] [-o 特殊選項] 設備文件名 掛載點

fat32識別vfat  fat16 識別fat

-t 文件系統:加入文件系統類型來指定掛載的類型,可以ext3,ext4,iso9660等文件系統

-L 捲標名:掛載指定捲標的分區,而不是安裝設備文件名掛載    沒啥用處 起個別名的意思

-o 特殊選項:可以指定掛載的額外選項

atime/noatime  更新訪問時間/不更新訪問時間。訪問分區文件時,是否更新文件的訪問時間,預設更新

async/sync      非同步/同步,預設為非同步

auto/noauto    自動/手動,mount -a命令執行時,是否會自動安裝/etc/fstab文件內容掛載,預設為自動

defaults 定義預設值,相當於rw,suid,dev,exec,auto,nouser,async這7個選項

exec/noexec 執行/不執行,設定是否允許在文件系統中執行可執行文件,預設exec允許   有時候程式不能運行不一定是許可權的事情

remount 重新掛載已掛載的文件系統,一般用戶指定修改特殊許可權     比較常用

rw/ro 讀寫/只讀,文件系統掛載時,是否具有讀寫許可權,預設是rw

suid/nosuid  具有/不具有SUID許可權,設定文件系統是否具有SUID和SGID的許可權,預設是具有

user/nouser 允許/不允許普通用戶掛載,設定文件系統是否允許普通用戶掛載,預設不允許只有root可以

usrquota  寫入代表文件系統支持用戶磁碟配額,預設不支持

grpquota 寫入代表文件系統支持組磁碟配額,預設不支持

umount 設備文件名或者掛載點     –先卸載才能彈出光碟  真機器中不卸載     不能在光碟目錄中卸載會報錯正忙

掛載u盤

fdisk -l

mount -t vfat /dev/sdb1 /mnt/usb

linux預設不支持ntfs格式

如何支持ntfs格式 :手工編譯內核 將新的驅動加進來;下載ntfs-3g插件 http://www.tuxera.com/community/ntfs-3g-download

手工分區fdisk

fdisk /dev/sdb

m 幫助

n 新建

l 顯示

d 刪除

w 保存

partprobe命令重新讀取分區表  有時候分區表正在被占用需要重啟才能下一步,那就直接用這個命令   當做分區之後必定執行的命令

+2G

格式化分區

mkfs -t ext4 /dev/sdb1

然後創建掛載點掛載即可

自動掛載

/etc/fstab配置文件6個欄位

第一欄位:分區設備文件名或者UUID(硬碟通用唯一識別碼)  UUID防止分區改順序 dumpe2fs -h /dev/sdb1能查到UUID

第二欄位:掛載點

第三欄位:分區類型

第四欄位:掛載參數,和mount的掛載許可權一致

第五欄位:指定分區是否被dump備份,0代表不備份,1每天備份,2 不定期備份    lost+found是自動備份位置

第六欄位:指定分區是否被fsck檢測,0代表不檢測,其他數字代表檢測的優先順序,那麼當然1的優先順序比2高

如果弄錯,系統啟動崩潰 所以不應該先重啟 應該mount -a

如果崩潰  恢復   啟動時候輸入root密碼可以操作 不過根分區是只讀的  remount下掛為讀寫 然後重新編輯這個文件修複錯誤

mount -o remount,rw /

分配swap分區

free命令  查看記憶體與swap分區使用狀況  -m 以兆顯示  -h

cached(緩存):是指把讀取出來的數據保存在記憶體當中,當再次讀取時,不用讀取硬碟而直接從記憶體中讀取,加速了數據的讀取過程

buffer(緩衝):是指在寫入數據時,先把分散的寫入操作保存到記憶體中,當達到一定程度再集中寫入硬碟,減少磁碟碎片和硬碟的反覆尋道,加速了數據的寫入過程

fdisk /dev/sdb   建立個邏輯分區  83標準分區  t來改變分區id 改為82 就是swap分區   partprobe

格式化    mkswap /dev/sdb6

swapon /dev/sdb6  加入swap

swapoff /dev/sdb6  取消swap

swap開機自動掛載  /etc/fstab  和普通一樣 掛載點是swap

9 SHELL 基礎

Shell是一個命令行解釋器,它為用戶提供了一個向Linux內核發送請求以便運行程式的界面系統級程式,用戶可以用Shell來啟動掛起停止甚至編寫一些程式。

硬體–>內核–>Shell–>外層應用程式

window圖形交互界面也是shell

Shell還是一個功能強大的編程語言,易編寫,易調試,靈活性較強。Shell是解釋執行的腳本語言,在Shell中可以直接調用Linux系統命令。

分類:Bourne Shell(linux識別為sh),C Shell(主要用在BSD版)

Shell的兩種主要語法類型:Bourne和C  兩個語法結構完全不同

Bourne家族主要包括:sh(單用戶模式用的是這個)、ksh、Bash(主流,和sh相容)、psh、zsh

C家族主要:csh、tcsh

/etc/shells  可以查詢到系統支持哪些shell

Shell腳本的執行方式:

echo輸出命令   -e  支持反斜線控制的字元轉換

\\  輸出\本身

\a 輸出警告音

\b  退格鍵

\c  取消輸出行末的換行符。和“-n”選項一致

\e ESCAPE鍵

\f 換頁符

\n  換行符

\r 回車

\t 製表符  tab

\v 垂直製表符

\0nnn 按照8進位ASCII碼表輸出字元。其中0為數字0零,nnn是三位八進位數

\xhh 按照16進位ASCII碼表輸出字元。其中hh是兩位16進位數

echo -e “\e[1;31m abcd \e[0m”

\e[1;開啟顏色輸出

\e[0m關閉顏色輸出

30m=黑色  31m=紅色  32m=綠色 33m=黃色 34m=藍色 35m=洋紅 36m=青色 37m=白色

第一個腳本

vi hello.sh

#!/bin/bash                                         這不是註釋   不寫不影響運行 單要求必須寫

#The first program

#Author:king

echo -e “hello world”

sh hello.sh

cat -A顯示包括隱藏

win和linux的回車符不一樣

dos2unix來轉換文件

bash基本功能

歷史命令和補全

歷史命令history -c 清空歷史命令 -w 把緩存保存~/.bash_history  正常登陸退出才寫入

預設保存1000條 /etc/profile 可以更改

上下箭頭可以調用歷史命令    !n可以可以重覆第n條命令  !!重覆執行上一條命令   !字元串 執行最後一條字元串開頭的命令

ctrl+r 可以反查歷史命令

命令 文件 目錄  都可以tab補全  多個的話 tab兩次列出可執行的

命令別名和常用快捷鍵

alias 別名=’原命令’

命令執行順序:

1.絕對路徑或者相對路徑

2.別名

3.bash內部命令

4 按照$PATH環境變數定義的目錄查找順序找到的第一個命令

unalias 別名     刪除別名

永久別名生效.bashrc修改

bash常用快捷鍵:

ctrl+a  把游標移動到命令行開頭。如果我們輸入的命令過長

ctrl+e  把游標移動到命令行結尾

ctrl+c 強制終止當前命令

ctrl+l 清屏 相當於clear

ctrl+u 刪除或者剪切游標之前的命令

ctrl+k 刪除或者剪切游標之後的內容

ctrl+y 粘貼ctrl+u或者k的內容

ctrl+r 在歷史命令中搜索,命令反查

ctrl+d 退出當前終端

ctrl+z 暫停,並放入後臺。這個快捷鍵牽扯工作管理的內容

ctrl+s 暫停屏幕輸出

ctrl+q 恢復屏幕輸出

輸入輸出重定向:

標準輸入輸出:

設備  設備文件名 文件描述符 類型:

鍵盤 /dev/stdin  0  標準輸入

顯示器 /dev/sdtout 1 標準輸出

顯示器 /dev/sdterr 2 標準錯誤輸出

輸出重定向:

標準輸出重定向  命令>文件  命令>>文件           分別是覆蓋和追加,把命令的輸出輸出到指定的文件或設備中

標準錯誤輸出重定向  錯誤命令 2>文件  錯誤命令 2>>文件

正確輸出和錯誤輸出同時保存:

命令>文件 2>&1

命令>>文件 2>&1

命令 &>文件

命令 &>>文件    這四個命令都是把正確輸出和錯誤輸出放到同一個文件

命令 >> 文件1 2>> 文件2   正確放1,錯誤放2

ls &>/dev/null   不管正確錯誤 只管執行就好

輸入重定向:用的不多 一般只給源碼包打補丁時候用

wc [選項] [文件名]

-c 統計位元組數

-w 統計單詞數

-l 統計行數

命令<文件

命令<<符號   。。。。 符號         常見的符號用EOF

多命令順序執行與管道符:

命令1 ; 命令2        多個命令順序執行,命令之間無任何邏輯聯繫

命令1 && 命令2  當命令1執行正確,命令2才會執行,1執行錯誤 2不執行

命令1 || 命令2       當命令1執行不正確,則命令2才會執行  命令1執行正確,2就不執行

dd命令  磁碟對拷命令

dd if=輸入文件 of=輸出文件 bs=位元組數 count=個數

選項:if=輸入文件 制定源文件或源設備

of=輸出文件      指定目標文件或者目標設備

bs=位元組數      指定一次輸入/輸出多少位元組,即把這些位元組看做一個數據塊

count=個數  指定輸入/輸出多少個數據塊

例子:date;dd if=/dev/zero of=/root/testfile bs=1k count=100000;date  可以看命令執行多長時間

ls && echo yes

./configure && make && make install

命令 && echo yes || echo no

管道符  |

命令1 | 命令2

命令1的正確輸出作為命令2的操作對象

ll -a /etc/ | more

netstat -an |grep ESTABLISHED

命令1必須執行正確否則命令2不執行

grep -i 忽略大小寫 -n輸出行號 -v反向查找 –color=auto 搜索出的關鍵字用顏色顯示

通配符:

?  匹配一個任意字元

*    匹配0個或任意多個任意字元,也就是可以匹配任何內容

[]   匹配中括弧中任意一個字元。[abc] a或者b或者c

[-]  匹配中括弧中任意一個字元。-代表一個範圍。[a-z]代表匹配任意一個小寫字母

[^] 邏輯非,表示匹配不是中括弧內的一個字元。[^0-9]代表匹配一個不是數字的字元

bash中其他特殊符號

” 單引號。在單引號中所有的特殊符號,如”$”、”"(反引號)都沒有特殊符號

"" 雙引號。 在雙引號中特殊符號都沒有特殊含義,但是"$"、"“和”\”是例外,擁”調用變數的值”、”引用命令”和”轉義符”的特殊含義

反引號。反引號括起來的內容是系統命令,在bash中會先執行他。和$()作用一樣,不過推薦使用$(),因為反引號很容易看錯

$() 和反引號一樣,用來引用系統命令

# 在shell腳本中 #開頭的行代表註釋

$ 用戶調用變數的值,如需要調用變數name的值,需要用$name的方式得到變數的值

\ 轉義符,跟在\後面的特殊符號將失去特殊含義,變為普通字元。如\$將輸出$符號,而不是當做變數引用

bash變數:

用戶自定義變數、

環境變數、

位置參數變數(這種變數主要是用來向腳本當中傳遞參數或數據的,變數名不能自定義,變數作用是固定的)(其實是預定義變數的一種,因為較多單獨分類)、

預定義變數(是bash中已經定義好的變數,不能自定義,變數作用也是固定的)

變數設置規則:

變數名稱可以由字母、數字、下劃線但是不能是數字開頭

bash中變數的預設類型都是字元串型,如果要進行數值運算,則必指定變數類型為數值型

變數用等號連接值,等號左右兩側不能有空格

變數的值有空格,需要用單引號或者雙引號包括

在變數的值中,可以使用\轉義符

如果需要增加變數的值,那麼可以進行變數值的疊加。不過變數需要用雙引號包含”$變數名”或用${變數名}包含

可以把命令結果賦予變數,用反引號或$()

環境變數名建議大寫,便於區分

本地變數  就是用戶自定義變數

變數定義 name=”king kong”

變數疊加  aa=123 aa=”$aa”456 aa=${aa}789

變數調用 echo $name

變數查看set

變數刪除unset name

環境變數 :系統環境變數、自由定義的環境變數

用戶自定義變數又稱作本地變數,因為只在當前的shell中生效,而環境變數會在當前shell和這個shell的子shell中生效。如果把環境變數寫入相應的配置文件,那麼這個環境變數就會在所有shell生效

設置  export 變數名=變數值   #申明變數

env     #查詢環境變數

unset 變數名  #刪除變數

命令pstree 確定進程樹

PATH   :分割的一個個路徑,是用於系統查找命令的路徑

PATH變數疊加 PATH=”$PATH”:/root/sh

PS1 (嚴格來說不是環境變數不能用env查看只能用set 他是系統預留專門用作定義系統環境的變數 對系統有特殊含義)

定義系統提示符的變數

\d:顯示日期,格式為“星期 月 日”

\h:顯示簡寫主機名。如預設主機名“localhost”

\t:顯示24小時制時間,格式為“HH:MM:SS”

\T:顯示12小時制時間,格式為“HH:MM:SS”

\A:顯示24小時制時間,格式為“HH:MM”

\u:顯示當前用戶名

\w:顯示當前所在目錄的完整名稱

\W:顯示當前所在目錄的最後一個目錄

\#:執行的第幾個命令

\$:提示符。如果是root用戶為#普通用戶$

PS1='[\u@\t \w]\$’

位置參數變數:

$0 $1..0表示命令本身  1 2 表示1 2的參數,10以上用括弧${10},用於從命令行傳遞參數到腳本中

$* 代表命令行所有參數,吧所有的參數看做一個整體

$@ 代表命令行所有參數,所有的參數區分對待

$# 代表命令行中所有參數的個數

$*和$@不是很常用 能看懂即可,可以在執行命令同時輸入參數

預定義變數:

$?  上一次命令的結果的返回狀態   0正確執行  非0表示不正確執行  具體是哪個數字由寫命令的人決定

$$  當前進程的進程號PID

$!  後臺運行的最後一個進程的進程號PID

命令後跟&符號 放入後臺執行  類似window最小化視窗

接收鍵盤輸入(較位置參數變數更常用):

read [選項] [變數名]

-p “提示信息”

-t 秒數   等待時間

-n 字元數    只接收指定的字元數,就會執行  (不加的話回車結束)

-s: 隱藏輸入的數據 適用於機密信息

數值運算與運算符:

declare -p aa 可以查看變數屬性

-:給變數設定類型屬性

+:取消變數的類型屬性

-i 將變數生命為整數型(integer)

-x: 將變數生命為環境變數

-p:顯示變數的被聲明類型

數值運算

方法1:定義變數類型declare -i cc=$aa+$bb

方法2:expr或者let數值運算工具 dd=$(expr $aa + $bb)      +左右兩側空格不能省略

方法3(推薦):$((運算式))或者$[運算式]

運算符:

優先順序(數值越高優先順序越高)  運算符   說明

13       -,+  單目正,單目負

12  !,~       邏輯非、按位取反或補碼

11  *,/,%   乘,除,取模

10   +,-   加減

9   <<,>>  按位左移,按位右移

8  <=,>=,<,> 小於或等於、大於或等於、小於、大於

7        ==,!=   等於,不等於

6  &    按位與

5  ^    按位異或

4  |     按位或

3     &&   邏輯與

2        ||    邏輯或

1     =,+=,-=,*=,/=,%=,&=,^=,|=,<<=,>>=  賦值、運算且賦值

可以用小括弧改變優先順序

變數測試與內容替換:

image

通過判斷x得到y的情況

變數測試是通過顯示x的值,判斷y的值;程式執行時用於判斷,可以用 if 判斷同樣實現

環境變數配置文件:

source 配置文件

. 配置文件

強制讓配置文件直接生效  避免重登陸過程    .就是source的縮寫

環境變數配置文件中主要是定義對系統的操作環境生效的系統預設環境變數,比如PATH,HISTSIZE,PS1,HOSTNAME等預設環境變數

/etc/profile

/etc/profile.d/*.sh

~/.bash_profile     –只對當前用戶生效 隱藏文件

~/.bashrc

/etc/bashrc

image

/etc/profile的作用:

USER變數:

LOGNAME變數:

MAIL變數:

PATH變數:

HOSTNAME變數:

HISTSIZE變數:

umask:

調用/etc/profile.d/*.sh文件

其他配置文件和登陸信息:

註銷時生效的環境變數配置文件 ~/.bash_logout

歷史命令~/.bash_history  是重要的配錯手段   給mysql設置密碼是明文放在這兒不安全  需要清空  其他情況不推薦清空

Shell登陸信息   不要寫歡迎的,寫警告信息比較好 法律問題

本地終端歡迎信息:/etc/issue      \反斜杠

\d 顯示當前系統日期

\s 顯示操作系統名稱

\l 顯示登陸的終端號,比較常用

\m  顯示硬體體繫結構,如i386,i686

\n 顯示主機名

\o  顯示功能變數名稱

\r 顯示內核版本

\t  顯示當前系統時間

\u  顯示當前登陸用戶的序列號

alt+f1 f6切換6個登陸終端

遠程終端歡迎信息:/etc/issue.net

轉義符在/etc/issue.net不能使用

是否顯示歡迎信息,由ssh的配置文件/etc/ssh/sshd_config決定,假如”Banner /etc/issue.net”行才能顯示(記得重啟ssh服務)

登陸後歡迎信息:/etc/motd   是登陸後的    之前兩個是登陸前的 不管遠程還是本地都生效

正則表達式:

基礎正則表達式:

grep、awk、sed等命令可以支持正則表達式,正則是包含匹配,在文件中匹配符合條件的字元串

通配符和正則在linux中有不小的區別 ,其他語言中大概是一致的, 通配符是完全匹配,ls、find、cp不認識正則,只識別shell自己的通配符

正則和通配符有些符號通用但是含義完全不同

元字元      作用

*  前一個字元匹配0次或者任意多次

.  匹配除了換行符外任意一個字元

^  匹配行首。例如^hello會匹配以hello開頭的行

$  匹配行尾

[]      和通配符一樣,匹配中括弧中指定的任意一個字元,只匹配一個字元。

[^]    匹配除中括弧的字元以外的任意字元。如[^0-9]匹配任意一位非數字字元

\  轉義符

\{n\}  表示其前面的字元恰好出現n次。例如:[0-9]\{4\}匹配4位數字

\{n,\} 表示其前面的字元出現不小於n次。例如:[0-9]\{2,\}表示兩位及以上的數字

\{n,m\} 表示其前面的字元至少出現n次,最多出現m次

linux中() + ?是屬於擴展正則表達式,用的不多

字元截取命令:

cut:提取列   欄位提取命令  和grep結合使用  行列提取

-f  列號       :      提取第幾列

-d 分隔符: 指定分隔符   (預設製表符  而不要用空格)

cat /etc/passwd |grep /bin/bash|grep -v root|cut -d “:” -f 1

命令局限 分隔符不定的時候不好使

printf 格式化列印命令 常用在下麵awk命令

printf ‘輸出類型輸出格式’ 輸出內容

%ns:輸出字元串,n是數字指代輸出幾個字元

%ni:輸出整數。n是數字指代輸出幾個數字

%m.nf:輸出浮點數。m n是數字,指代整數位和小數位

輸出格式:

\a   輸出警告聲音

\b   輸出退格鍵

\f 清屏

\n 換行

\r 回車

\t 水平輸出退格鍵,也就是tab鍵

\v   垂直輸出退格鍵,也就是tab鍵

printf  ‘%s’ $(cat student.txt)   #不調整輸出格式

printf ‘%s\t %s\t %s\t %s\t %s\t %s\t  \n’ $(cat student.txt) #調整輸出格式

print命令會在每個輸出後加換行符,linux預設沒有這個命令

printf是標準格式輸出命令,並不會自動加入換行符,如果需要換行,需要手工加入換行符

awk:提取列   都不叫命令了 awk編程  相對複雜太多

awk ‘條件1{動作1}條件2{動作2}…’  文件名

條件 (Pattern):

一般使用關係表達式作為條件

動作(Action):

格式化輸出

流程式控制制語句

awk ‘{printf  $2 “\t” $6 “\n”}’ student.txt

df -h|awk ‘{print $1 “\t” $3}’

print在awk內部預設是有的,在linux系統中預設沒有

awk預設是空格和製表符作為分隔符

BEGIN命令   awk ‘BEGIN{printf “This is a test\n”}{print $2} ‘ student.txt

FS內置變數 指定分隔符  awk ‘BEGIN{FS=”:”}{print $1 “\t” $3}’ /etc/passwd

END命令   所有數據讀取完後執行END動作

支持關係運算符

cat student.txt | grep -v Name | awk ‘$6 >= 87 {printf $2 “\n”}’

sed命令:是一種幾乎在所有unix平臺的輕量級流編輯器,主要是用來將數據進行選取替換刪除新增的命令,可以用管道符接收數據

和vi不同的是,vi只能修改文件

選項:

sed [選項] ‘[動作]’ 文件名

-n 一般sed命令會把所有數據輸出到屏幕,如果加入此選項,則只會把經過sed命令處理的行輸出到屏幕

-e  允許應用多條sed命令編輯 多個動作之間用;分割

-i  同時更新源數據

動作:

不加行號表示整個文檔

a \: 追加,在當前行後添加一行或多行。添加多行時,除最後一行外,每行行尾需要用”\”代表數據未完結。

c \: 行替換,用c後面的字元串替換原數據行,替換多行時,除最後一行外,每行行尾需要用”\”代表數據未完結。

i \: 插入,在當期行前插入一行或者多行。插入多行時,除最後一行外,每行行尾需要用”\”代表數據未完結。

d: 刪除,刪除指定行

p: 列印,輸出指定的行

s: 字元替換,格式為”行範圍s/舊字串/新字串/g” 類似vi中的替換

sed ‘2p’ student.txt

sed -n ‘2p’ student.txt

df -h|sed -n ‘2p’

sed ‘2,4d’ student.txt

sed ‘2a hello’ student.txt

sed ‘2i hello \

word’ student.txt

sed ‘2c no such person’ student.txt

字元處理命令:

排序命令sort  可從管道符接收

sort [選項] 文件名

-f 忽略大小寫

-n   以數值型排序,預設使用字元串型排序

-r    反序

-t 指定分隔符,預設是製表符

-k n,[m]   按照指定的欄位範圍排序。從第n欄位開始,m欄位結束(預設到行尾)

sort /etc/passwd

sort -r /etc/passwd

sort -t “:” -k 3,3 /etc/passwd

sort -n -t “:” -k 3,3 /etc/passwd

統計命令wc   可從管道符接收

-l:只統計行數

-w:只統計單詞數

-m:只統計字元數

條件判斷:

按照文件類型進行判斷:

LINUX中的七種文件類型

d 目錄文件。

l 符號鏈接(指向另一個文件,類似於瘟下的快捷方式)。

s 套接字文件。

b 塊設備文件,二進位文件。

c 字元設備文件。

p 命名管道文件。

– 普通文件,或更準確地說,不屬於以上幾種類型的文件

image

-d -e -f 這三個最常用

兩種判斷格式

test -e /root/install.log

[ -e /root/install.log ] 前後有空格

echo $?判斷命令執行狀態  或者  [ -d /root ] && echo “yes” || echo “no”

按照文件許可權進行判斷:

image

不會分那麼細  只有所有者所屬組其他人有一個人有寫許可權  就認為真

兩個文件之間進行比較:

測試選項  作用

文件1 -nt 文件2   判斷文件1的修改時間是否比文件2的新,如果新則真

文件1 -ot 文件2  判斷文件1的修改時間是否比文件2的舊,如果舊則true

文件1 -ef 文件2  判斷文件1是否和文件2的inode號一致,可以判斷是否為同一文件,判斷硬鏈接是很好的辦法

兩個整數之間比較

測試選項     作用

整數1 -eq  整

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 控制 IO 有多種方式。 這裡說最簡單的方式。 Linux 下 一切皆文件。 所以 GPIO 也會是一個文件。通過操作文件,可以控制它。 貼入代碼。 1 using NewLife; 2 using NewLife.Log; 3 using System; 4 using System.Collec ...
  • TortoiseSVN回退 情況說明: 把文件修改了並提交到了伺服器上,業務說:“需求變化了”,保持原來的就可以了。 解決辦法: 首先就是將這個文件還原到上一個修訂版本的內容(Revert to this revision操作), 然後將這個文件重新提交, 那麼伺服器上的這個文件就恢復為了修改之前的 ...
  • centos系統如何聯網以及遠程連接 最近幾個周一直在安裝linux的各個發行版本的系統。這些系統,有的方便的,在安裝過程就能把網路配好,有的需要安裝好後,啟動系統後對文件進行修改才能連上網。由於我和我的實習生同學經常會用到如何通過修改本地文件來聯網,所以做個隨筆,記錄一下步驟,以供以後參考使用。 ...
  • 1 本機環境: deepin 15.11 Qt 5.11.3 fcitx 輸入法 2 問題描述 Qt Creator 和使用 QT 編譯的程式運行時均不能使用deepin系統自帶的fcitx輸入法,且採用傳統方法(將 /usr/lib/x86_64-linux-gnu/qt5/plugins/pla ...
  • Linux centos重啟命令: 1、reboot 普通重啟 2、shutdown -r now 立刻重啟(root用戶使用) 3、shutdown -r 10 過10分鐘自動重啟(root用戶使用) 4、shutdown -r 20:35 在時間為20:35時候重啟(root用戶使用) 如果是通 ...
  • 在nginx的server中添加: 這是由於頁面內容過長,預設的值比較小造成的。 ...
  • 在當前文件夾下麵模糊搜索文件: find . -type f | xargs grep 'boot',"boot"表示文件名中包含的字元串 ...
  • 在當前文件中查找包含的字元串 find . -name "*.txt" | xargs grep 'abc' ,例如:查找txt文件中包含字元串a的字元串 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...