七悴势、重定向、管道符
1晨雳、重定向
1、輸入輸出原理
進(jìn)程使用稱為文件描述符的編號(hào)通道來獲取并發(fā)送輸出嘹朗。所有進(jìn)程在開始時(shí)至少三個(gè)文件描述符。
標(biāo)準(zhǔn)輸入(通道0)從鍵盤輸入
標(biāo)準(zhǔn)正常輸出(通道1)將標(biāo)準(zhǔn)正常輸出發(fā)送到終端诵肛。
標(biāo)準(zhǔn)錯(cuò)誤輸出(通道2)將標(biāo)準(zhǔn)錯(cuò)誤輸出發(fā)送到終端屹培。
如果程序打開連接至其它文件的單獨(dú)連接,則可能要使用更大編號(hào)的文件描述符怔檩。
輸入輸出重定向
輸出重定向:把原本要輸出到屏幕的數(shù)據(jù)信息寫入到指定文件中
輸入重定向:是指把文件導(dǎo)入到命令中
格式: 命令 輸出重定向/輸入重定向 文件
2褪秀、輸出重定向
序號(hào) | 符號(hào) | 作用 |
---|---|---|
1 | 命令 > 文件 | 將標(biāo)準(zhǔn)輸出重定向到一個(gè)文件中(清空原有文件的數(shù)據(jù)) |
2 | 命令 2> 文件 | 將錯(cuò)誤輸出重定向到一個(gè)文件中(清空原有文件的數(shù)據(jù)) |
3 | 命令 >> 文件 | 將標(biāo)準(zhǔn)輸出重定向到一個(gè)文件中(追加到原有內(nèi)容的后面) |
4 | 命令 2>> 文件 | 將錯(cuò)誤輸出重定向到一個(gè)文件中(追加到原有內(nèi)容的后面) |
5 | 命令 > /dev/null | 將正確的輸出丟棄 |
6 | 命令 2> /dev/null | 將錯(cuò)誤的輸出丟棄 |
7 | 命令 &> /dev/null | 不管是正確的輸出還是錯(cuò)誤的輸出全部丟棄 |
8 | 命令 > 文件 2>&1 或命令 &> 文件 | 將標(biāo)準(zhǔn)輸出與錯(cuò)誤輸出共同寫入到文件中 |
9 | 命令 >> 文件 2>&1 或命令 &>> 文件 | 將標(biāo)準(zhǔn)輸出與錯(cuò)誤輸出共同寫入到文件中(追加到原有內(nèi)容的后面) |
10 | 命令 2> 文件 1> 文件2 | 分別將將標(biāo)準(zhǔn)輸出與錯(cuò)誤輸出到不同文件中 |
11 | 命令 2>> 文件 1>> 文件2 | 分別將將標(biāo)準(zhǔn)輸出與錯(cuò)誤輸出到不同文件中(追加到原有內(nèi)容的后面) |
1、[root@server1 ~]# ls > out_test
2薛训、[root@server1 ~]# lsls 2> err_test
3媒吗、[root@server1 ~]# ls >> out_test
4、[root@server1 ~]# lsls 2>> out_test
5乙埃、[root@server1 ~]# ls > /dev/null
6闸英、[root@server1 ~]# lsls 2> /dev/null
7、[root@server1 ~]# ls &> /dev/null
8介袜、[root@server1 ~]# ls &> all_test
9自阱、[root@server1 ~]# lsls &>> all_test
10、[root@server1 ~]# ls 2> error.log 1> out.log
11米酬、[root@server1 ~]# lsls 2>> error.log 1>> out.log
3、輸入重定向
序號(hào) | 符號(hào) | 作用 |
---|---|---|
1 | 命令 < 文件 | 將文件作為命令的標(biāo)準(zhǔn)輸入 |
2 | 命令 << 分界符 | 從標(biāo)準(zhǔn)輸入中讀入趋箩,直到遇見分界符才停止 |
3 | 命令 < 文件1 > 文件2 | 將文件1作為命令的標(biāo)準(zhǔn)輸入并將標(biāo)準(zhǔn)輸出到文件2 |
4 | cat >> 文件 << 分隔符 | 將多行文本寫入一個(gè)文件當(dāng)中 |
1赃额、[root@server1 ~]# wc -l < anaconda-ks.cfg
2、[root@server1 ~]# cat << EOF
> Whatever is worth doing is worth doing well.
> Happiness is a way station between too much and too little.
> EOF
Whatever is worth doing is worth doing well.
Happiness is a way station between too much and too little.
3叫确、[root@server1 ~]# wc -w < anaconda-ks.cfg > world
4跳芳、[root@server1 ~]# cat >> test.txt << EOF
> Whatever is worth doing is worth doing well.
> Happiness is a way station between too much and too little
> EOF
2、管道符
作用:將前一個(gè)命令的結(jié)果作為后一個(gè)命令的參數(shù)
注意:管道符是可以重疊使用的
我們來舉幾個(gè)例子竹勉,你就慢慢的明白它的使用方式了
[root@server1 ~]# ls | wc -w
[root@server1 ~]# ls -l | head -3
[root@server1 ~]# ps -ef | grep sshd
root 12990 1 0 03:10 ? 00:00:00 /usr/sbin/sshd -D
[root@server1 ~]# echo "hello world" >> hello.test
[root@server1 ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z] > anaconda-ks.cfg.out
[root@server1 ~]# who | tr 'a-z' 'A-Z' > who.out
3飞盆、通配符
用于匹配字符,指包含這些字符的字符串“次乓?”吓歇,“*”,“[]”票腰,{}
? 任何一個(gè)字符
[root@server1 ~]# ls /sbin/???
/sbin/arp /sbin/lid /sbin/lvs /sbin/sln /sbin/zic
/sbin/cbq /sbin/lvm /sbin/pvs /sbin/vgs
[abcd]表示匹配中括號(hào)內(nèi)任意一個(gè)字符就成立
[root@server1 ~]# ls /sbin/[abcd]rp
/sbin/arp
{}生成序列
[root@server1 ~]# touch test{1..4}
*匹配全部字符
[root@server1 ~]# ll test*
-rw-r--r-- 1 root root 284 Jun 28 04:43 test
-rw-r--r-- 1 root root 0 Jun 28 05:31 test1
-rw-r--r-- 1 root root 0 Jun 28 05:31 test2
-rw-r--r-- 1 root root 0 Jun 28 05:31 test3
-rw-r--r-- 1 root root 0 Jun 28 05:31 test4
-rw-r--r-- 1 root root 104 Jun 28 05:03 test.txt
八城看、軟件包管理
1、分類
1杏慰、源碼包
顧名思義测柠,沒有進(jìn)行編譯之后的包含源代碼的包炼鞠,系統(tǒng)需要編譯后才能安裝
優(yōu)點(diǎn):
開源,如果能力足夠轰胁,可以修改源代碼
可以自由選擇所需要的功能
軟件安裝是編譯安裝谒主,所以更加適合操作系統(tǒng),更加穩(wěn)定赃阀,效率更高
卸載方便
缺點(diǎn):
安裝過程步驟較多霎肯,尤其是在安裝大型的環(huán)境,很容易出錯(cuò)
編譯時(shí)間較長(zhǎng)凹耙,所以安裝時(shí)間較長(zhǎng)
因?yàn)槭蔷幾g安裝姿现,安裝過程中出錯(cuò),新手很難解決
2肖抱、二進(jìn)制包
已經(jīng)編譯好的安裝包备典,系統(tǒng)可直接進(jìn)行安裝。常見的二進(jìn)制包有rpm包意述,deb包提佣。RHEL,Centos使用rpm包荤崇;Debian拌屏,Ubuntu使用deb包。
優(yōu)點(diǎn):
包管理系統(tǒng)簡(jiǎn)單术荤,只通過幾個(gè)命令就可以實(shí)現(xiàn)包的安裝倚喂,升級(jí),查詢瓣戚,卸載
安裝速度比源碼包安裝的快得多
缺點(diǎn):
經(jīng)過編譯端圈,看不到源代碼
功能選擇不如源代碼靈活
依賴性(事實(shí)上不管二進(jìn)制安裝還是源碼包安裝都有這個(gè)問題)
功能
2、RPM包管理-rpm命令管理
1子库、rpm包命名規(guī)則
以mokutil-15-1.el7.centos.x86_64.rpm為例
rpm包名部分 | 含義 |
---|---|
mokutil | 軟件包名 |
15 | 軟件版本 |
1 | 軟件發(fā)布的次數(shù) |
el7.centos | 適合的linux平臺(tái) |
x86_64 | 適合的硬件平臺(tái) |
rpm | rpm包擴(kuò)展名 |
注意 rpm包嚴(yán)格區(qū)分包名和包全名舱权,以上邊這個(gè)包為列
mokutil為包名,mokutil-15-1.el7.centos.x86_64.rpm為包全名
包全名:
包名:操作的包是沒有安裝的軟件包時(shí)仑嗅,使用包全名宴倍。而且需要注意看路徑
包名:操作系統(tǒng)已經(jīng)安裝的軟件包時(shí),使用包名仓技。因?yàn)椴樵兊氖?var/lib/rpm下的數(shù)據(jù)庫(kù)鸵贬,而不是路徑
2、rpm依賴性
樹形依賴:a→b→c
環(huán)形依賴:a→b→c→a
模塊依賴:列如libodbc.so.2()脖捻,如果遇到類似于這種模塊的恭理,我們需要查詢www.rpmfind.net安裝模塊所在的包
3、rpm命令使用
選項(xiàng) | 作用 |
---|---|
-i (install) | 安裝 |
-v (verbose) | 顯示詳細(xì)信息 |
-h (hash) | 顯示進(jìn)度 |
--nodeps | 不檢查依賴性 |
-U (upgrade) | 更新 |
-e (erase) | 卸載 |
-q (query) | 查詢 |
-a (all) | 全部 |
-i (information) | 信息 |
-p (package) | 包信息 |
-l (list) | 列表 |
-f (file) | 文件 |
rpm包安裝
[root@server1 Packages]# rpm -ivh httpd-2.4.6-67.el7.centos.x86_64.rpm
rpm包升級(jí)
[root@server1 Packages]# rpm -Uvh httpd-2.4.6-67.el7.centos.x86_64.rpm
rpm包卸載
[root@server1 Packages]# rpm -e httpd-2.4.6-67.el7.centos.x86_64.rpm
查詢包是否安裝
[root@server1 Packages]# rpm -q httpd
查詢軟件包詳細(xì)信息
[root@server1 Packages]# rpm -qi httpd
[root@server1 Packages]# rpm -qip httpd-2.4.6-67.el7.centos.x86_64.rpm
查詢包中文件安裝位置
[root@server1 Packages]# rpm -qi httpd
[root@server1 Packages]# rpm -qlp httpd-2.4.6-67.el7.centos.x86_64.rpm
查詢系統(tǒng)文件屬于哪個(gè)rpm包
[root@server1 Packages]# rpm -qf /usr/share/httpd/noindex/images
查詢軟件包的依賴性
[root@server1 Packages]# rpm -qR httpd
[root@server1 Packages]# rpm -qRp httpd-2.4.6-67.el7.centos.x86_64.rpm
3郭变、RPM包管理-yum在線管理
yum誕生的最大原因就是解決rpm包依賴性的問題颜价,用yum進(jìn)行對(duì)一個(gè)包的操作事實(shí)上還是對(duì)rpm包操作涯保。
1、yum命令使用
查詢所有的軟件包
[root@server1 ~]# yum list
搜索服務(wù)器上所包含關(guān)鍵字所有的包
[root@server1 ~]# yum search httpd
安裝
[root@server1 ~]# yum -y install httpd
升級(jí)
[root@server1 ~]# yum update #更新所有的包周伦,包括系統(tǒng)默認(rèn)軟件包和系統(tǒng)內(nèi)核
[root@server1 ~]# yum update httpd #更新httpd
卸載
[root@server1 ~]# yum -y remove httpd
列出所有可用的軟件組
[root@server1 ~]# yum grouplist
安裝指定的軟件組
[root@server1 ~]# yum -y groupinstall "General Purpose Desktop"
卸載指定的軟件組
通過搜索命令來搜索軟件包
[root@server1 ~]# yum provides "*/rz"
4夕春、yum源配置
rpm軟件包的來源有三種:分別是官方源,第三方源专挪,用戶自定義源及志。
軟件倉(cāng)庫(kù)的提供方式有三種:分別是file,ftp寨腔,http
配置file方式使用本地源
實(shí)驗(yàn)環(huán)境 192.168.1.41
192.168.1.41作為rpm倉(cāng)庫(kù) 192.168.1.41作為使用者
[root@server1 ~]# mount /dev/sr0 /opt/
[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# mkdir bak
[root@server1 yum.repos.d]# mv CentOS-* bak
[root@server1 yum.repos.d]# vim local.repo
[centos]
name=centos
baseurl=file:///opt/
enabled=1
gpgcheck=0
[root@server1 yum.repos.d]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
centos centos 3,894
repolist: 3,89
1速侈、掛載光盤鏡像文件(做軟件倉(cāng)庫(kù))
2、備份網(wǎng)絡(luò)源
3迫卢、新建repo文件
4倚搬、驗(yàn)證
配置ftp方式使用公司內(nèi)網(wǎng)源
實(shí)驗(yàn)環(huán)境 192.168.1.41 192.168.1.42
192.168.1.41作為rpm倉(cāng)庫(kù) 192.168.1.42作為使用者
[root@server1 ~]# yum -y install vsftpd
[root@server1 ~]# vim /etc/vsftpd/vsftpd.conf
anon_root=/opt/
[root@server1 ~]# systemctl start vsftpd
[root@client1 ~]# cd /etc/yum.repos.d/
[root@client1 yum.repos.d]# mkdir bak
[root@client1 yum.repos.d]# mv CentOS-* bak/
[root@client1 yum.repos.d]# vim ftp.repo
[centos]
name=centos
baseurl=ftp://192.168.1.41
enabled=1
gpgcheck=0
[root@client1 yum.repos.d]# yum repolist
repo id repo name status
centos centos 3,894
repolist: 3,894
1、在1.41節(jié)點(diǎn)安裝vsftpd
2乾蛤、修改配置文件每界,vsftpd默認(rèn)工作目錄為/opt
3、在1.42節(jié)點(diǎn)配置repo文件
4家卖、驗(yàn)證
配置http方式使用公司內(nèi)網(wǎng)源
實(shí)驗(yàn)環(huán)境 192.168.1.41 192.168.1.42
192.168.1.41作為rpm倉(cāng)庫(kù) 192.168.1.42作為使用者
[root@server1 ~]# yum -y install httpd
[root@server1 ~]# systemctl start vsftpd
[root@server1 ~]# mkdir /var/www/html/centos
[root@server1 ~]# mount /dev/sr0 /var/www/html/centos/
[root@client1 yum.repos.d]# vim httpd.repo
[centos]
name=centos
baseurl=http://192.168.1.41/centos
enabled=1
gpgcheck=0
[root@client1 yum.repos.d]# yum repolist
repo id repo name status
centos centos 3,894
repolist: 3,894
1眨层、在1.41節(jié)點(diǎn)安裝httpd,啟動(dòng)
2上荡、卸載之前的掛載趴樱,重新掛載在http工作目錄下centos目錄(http工作目錄/var/www/html,掛載前建立好centos目錄)
3酪捡、在1.42節(jié)點(diǎn)配置repo文件(刪除之前的repo文件)
4伊佃、驗(yàn)證
九、用戶和用戶組管理
1沛善、用戶配置文件
用戶信息文件/etc/password
字段 | 含義 |
---|---|
第1字段 | 用戶名稱 |
第2字段 | 密碼標(biāo)識(shí)位 |
第3字段 | UID(用戶ID,1:超級(jí)用戶塞祈,1-499:系統(tǒng)用戶金刁,500-65535:普通用戶) |
第4字段 | GID(用戶初始組ID) |
第5字段 | 用戶說明 |
第6字段 | 家目錄(用戶的工作目錄),普通用戶:/home/用戶名议薪,超級(jí)用戶:/root/ |
第7字段 | 登陸之后的shell |
影子文件/etc/shadow
字段 | 含義 |
---|---|
第1字段 | 用戶名 |
第2字段 | 加密密碼SHA512散列加密算法尤蛮,!!或*代表沒有密碼 |
第3字段 | 最后一次修改時(shí)間,使用時(shí)間戳表示 |
第4字段 | 兩次密碼的修改間隔時(shí)間 |
第5字段 | 密碼有效期 |
第6字段 | 密碼修改到期前的警告天數(shù) |
第7字段 | 密碼過期后的寬限天數(shù) |
第8字段 | 賬號(hào)失效時(shí)間,時(shí)間戳表示 |
第9字段 | 保留 |
時(shí)間戳與時(shí)間的互相替換
[root@server1 ~]# date -d "1970-01-01 18811 days" #時(shí)間戳替換為時(shí)間
Sat Jul 3 00:00:00 EDT 2021
[root@server1 ~]# echo $(($(date --date="2021/07/05" +%s)/86400+1))
18814 #時(shí)間替換為時(shí)間
組信息文件/etc/group
字段 | 含義 |
---|---|
第1字段 | 組名 |
第2字段 | 組密碼標(biāo)識(shí)位 |
第3字段 | GID |
第4字段 | 組中附加用戶 |
組密碼文件/etc/gshadow
字段 | 含義 |
---|---|
第1字段 | 組名 |
第2字段 | 密碼 |
第3字段 | 組管理員用戶名 |
第4字段 | 組中附加用戶 |
除此之外還有
用戶的家目錄
普通用戶:/home/用戶名/
超級(jí)用戶:/root/
用戶的郵箱
/var/spool/mail
用戶的模板
/etc/skel
用戶默認(rèn)值文件
/etc/default/useradd
/etc/login.defs
2斯议、用戶管理命令
useradd
添加用戶
選項(xiàng) | 含義 |
---|---|
-c | 加上備注文字产捞。備注文字會(huì)保存在passwd的備注欄位中 |
-d | 指定用戶登入時(shí)的起始目錄 |
-g | 指定用戶所屬的群組 |
-G | 指定用戶所屬的附加群組 |
-s | 指定用戶登入后所使用的shell |
-u | 指定用戶ID |
[root@server1 ~]# useradd test1 #直接創(chuàng)建用戶test1
[root@server1 ~]# useradd -u 510 -g test -G root test2 -d /test2 -c "test2 user" -s /bin/bash #創(chuàng)建用戶test2,uid為510哼御,初始組為test坯临,附加組為root焊唬,家目錄為/test2,描述為“test2 user”看靠,登陸終端為test2
passwd
設(shè)置用戶密碼
[root@server1 ~]# passwd #設(shè)置當(dāng)前登陸用戶的密碼
[root@server1 ~]# passwd user1 #設(shè)置用戶user1的密碼(只有root管理員才可以為其他用戶設(shè)置密碼)
[root@server1 ~]# passwd -S user1 #查詢user1的密碼狀態(tài)
[root@server1 ~]# passwd -l user1 #暫時(shí)鎖定用戶user1
[root@server1 ~]# passwd -u user1 #解鎖用戶user1
[root@server1 ~]# echo "000000" | passwd --stdin user1 #使用字符串作為user1用戶的密碼
usermod
修改用戶信息
選項(xiàng) | 含義 |
---|---|
-c | 修改備注文字赶促。備注文字會(huì)保存在passwd的備注欄位中 |
-G | 修改用戶所屬的附加群組 |
-u | 指定用戶ID |
-L | 臨時(shí)鎖定用戶 |
-U | 解鎖用戶鎖定 |
[root@server1 ~]# usermod -c "lamp user" user1
[root@server1 ~]# usermod -G test user1
[root@server1 ~]# usermod -L user1
[root@server1 ~]# usermod -U user1
userdel
刪除用戶
[root@server1 ~]# userdel -r test1 #刪除用戶test1
[root@server1 ~]# userdel -r test2 #刪除用戶test2的同時(shí)刪除user2的家目錄
su
切換用戶
[test@server1 ~]$ su root #只是切換了root身份,但Shell環(huán)境仍然是普通用戶的Shell
[test@server1 ~]$ su - root #連用戶和Shell環(huán)境一起切換成root身份
3挟炬、用戶組管理命令
groupadd
添加用戶組
[root@server1 ~]# groupadd mark #添加用戶組mark
[root@server1 ~]# groupadd -g 550 marktest #添加用戶組marktest并且設(shè)置組ID
groupmod
修改用戶組信息
[root@server1 ~]# groupmod -g 551 marktest #修改marktest的組ID為551
[root@server1 ~]# groupmod -n testmark marktest #將marktest的用戶組名修改為testmark
groupdel
刪除用戶組
[root@server1 ~]# groupdel testmark #刪除用戶組testmark