1. 程式人生 > >視頻學習記錄day04

視頻學習記錄day04

配置文件 linux 三劍客 表達式 通配符

通配符:
註意:linux的通配符和三劍客(grep、awk、sed)正則表達式是不一樣的,因此,代表的意義也是有較大的區別的。
通配符一般用戶命令行bash環境,而linux正則表達式用於grep、sed、awk場景。

*代表所有(0到多個)字符

?通配符,代表任意一個字符

;連續不同命令的分隔符

# 配置文件註釋 給人類看的 電腦不看

|管道 效率不高,能不用最好不用

~當前用戶的家目錄

-上一次的所在的路徑

$變量前需要添加的符號

/路徑分隔符號,也是根的意思

> 或者 1> 重定向,覆蓋原有數據
>>追加重定向,追加內容文件尾部
<輸入重定向
<<追加輸入重定向(cat)

‘單引號不具有變量置換功能,輸出時所見即所得。

"雙引號具有變量置換功能,解析變量後輸出,不加引號相當於雙引號。常用雙引號。

` tab鍵上面的鍵,反引號,兩個``中間為命令,會先執行,等價於 $()

{}中間為命令區塊組合或者內容序列

!邏輯運算中的"非"(not)。

&& -and 並且,當前一個指令執行成功時,執行後一個指令
|| -or 或者,當前一個執行執行失敗時,執行後一個指令

..兩個點代表上一級目錄
. 點代表當前目錄





示例:

示例:

小結:



示例:



示例:


linux正則表達式 企業實踐:
取ip地址 ?
解答:sed -n ‘s#支持正則的位置##gp‘ file
方法1:
[[email protected]
~]# ifconfig eth0|sed -n ‘2p‘|sed -n ‘s#^.*inet addr:##gp‘|sed ‘s# B.*$##g‘
192.168.140.128
p和-n參數是一起使用的 -n取消默認輸出 p表示打印的意思




方法2

-r 表示擴展模式 ^.*inet addr:表示addr:之前的字符串 Bcast:.*$表示 Bcast:之後的字符串

別的例子:
[[email protected] ~]# stat /etc/hosts
File: `/etc/hosts‘
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 812h/2066d Inode: 654118 Links: 3
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-03-27 16:17:59.254999993 +0800
Modify: 2010-01-12 21:28:22.000000000 +0800
Change: 2017-03-25 20:57:39.498978973 +0800

[[email protected] ~]# stat /etc/hosts |sed -nr ‘s#^.*Access: \(0(.*)\/-rw.*$#\1#gp‘
644
[[email protected] ~]# stat /etc/hosts |sed -nr ‘s#^.*0(.*)/-.*$#\1#gp‘ 更加簡潔!!!
644
[[email protected] ~]# stat /etc/hosts |sed -nr ‘s#^.*Access: \(0##gp‘|sed -r ‘s#/-rw.*$##g‘
644



題目1 把目錄或者文件前rwx-用數字顯示出來
方法1:

方法2:
方法3:(還待完善)
[[email protected] ~]# stat test |awk -F "[(/]" ‘NR==4{print $2}‘ 稍微完善點的方法
0750

其他6種方法:




20170328 20:00-
date
[[email protected] ~]# date +%F\ %X
2017-03-28 09:17:15 PM
[[email protected] ~]# date +%Y-%m-%d
2017-03-28

[[email protected] ~]# date +%F -d "-2day"
2017-03-26
[[email protected] ~]# date +%F -d "+1day"
2017-03-29






口述:
1、描述linux系統開機到登錄界面的啟動過程:
bios通電自檢----啟動權交給硬盤 零磁盤零磁道零扇區第416字節 --mbr引導---grub---加載內核---init---/etc/inittab(比如啟動3級別、rc.local等)---tty--login
2、描述linux下軟硬連接的區別
軟鏈接的block只存放源文件的絕對路徑信息
3、描述linux shell中單雙引號以及不加引號的區別:
雙引號和不加引號相同的效果,雙引號更加嚴謹,可以使用轉義符\ 變量等
單引號不能使用轉義符 輸出都是所見即所得 其他類似雙引號
單雙引號裏面的反引號表示命令先執行
4、描述linux的7個運行級別的各自含義:
0 關機 1單用戶 2無nfs的多用戶 3 標準多用戶 4 備用預留 5 x11 桌面模式 6重啟
5、描述linux下文件刪除的原理
如果是靜態文件 只要inode為零 就表示已經刪除
如果是動態文件 inode(i_link)為零且i_count為零
df -h 和 df -i


Sed 是操作、過濾和轉換文本內容的強大工具。常用功能有增a刪d改i查s,過濾,取行。
三劍客都是 讀取一行,處理一行,輸出一行,再重復。。。。(串行的概念)
sed是會自動打印結果到屏幕

統一實驗文本:
[[email protected] ~]# cat person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

1、增刪改查
1.1增
a 追加文本到指定行後
i 插入文本到指定行前

1.1.1單行增加:
[[email protected] ~]# sed ‘2a 106,dandan.CSO‘ person.txt
101,oldboy,CEO
102,zhangyao,CTO
106,dandan.CSO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed ‘2i 106,dandan.CSO‘ person.txt
101,oldboy,CEO
106,dandan.CSO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

1.1.2多行增加:
[[email protected] ~]# sed ‘2a 106,dandan.CSO\n107,bingbing,CCO‘ person.txt #\n代表換行符 非變量
101,oldboy,CEO
102,zhangyao,CTO
106,dandan.CSO
107,bingbing,CCO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed ‘2a 106,dandan.CSO \
> 107,bingbing,CCO‘ person.txt
101,oldboy,CEO
102,zhangyao,CTO
106,dandan.CSO
107,bingbing,CCO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

[ ] 中括號代表裏面的參數是可選項

2.2刪
d 刪除指定的行
[[email protected] ~]# sed ‘/feixue/,2d‘ person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
[[email protected] ~]# sed ‘/CEO/,1d‘ person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed ‘/oldboy/,3d‘ person.txt
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed ‘/oldboy/d‘ person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed ‘1d‘ person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

2.3改
2.3.1按行替換
c 用新行取代舊行

2.3.2文本替換
s:單獨使用 將每一行中第一處匹配的字符串進行替換 屬於sed命令
g:每一行進行全部替換 屬於sed命令s的替換標誌之一,非sed命令
-i: 修改文件內容 sed軟件的選項

[[email protected] ~]# sed ‘s#zhangyao#20has#g‘ person.txt
101,oldboy,CEO
102,20has,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed -i ‘s#zhangyao#oldboyedu#g‘ person.txt
[[email protected] ~]# cat person.txt
101,oldboy,CEO
102,oldboyedu,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

制定行精確修改配置文件,這樣可以防止修改了多的地方
[[email protected] ~]# sed ‘2s#102#106#g‘ person.txt
101,oldboy,CEO
106,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

2.3.3變量替換
[[email protected] ~]# x=a
[[email protected] ~]# y=b
[[email protected] ~]# echo $x $y
a b
[[email protected] ~]# sed ‘s#$x#$y#g‘ test.txt #‘’單引號輸出所見即所得 不能解析變量
a
b
c
[[email protected] ~]# sed "s#$x#$y#g" test.txt #雙引號或者不加引號 可以先解析變量再執行命令
b
b
c
[[email protected] ~]# sed "s#$y#$x#g" test.txt #eval 命令和雙引號作用一樣
a
a
c

20170329 20:30-
2.3.4分組替換 \(\)和\1的使用說明
例子:
[[email protected] ~]# echo I am oldboy teacher.|sed ‘s#^.*am \([a-z].*\) tea.*$#\1#g‘
oldboy
[[email protected] ~]# echo I am oldboy teacher.|sed -r ‘s#^.*am ([a-z].*) tea.*$#\1#g‘
oldboy

2.3.5 特殊符號&代表被替換的內容

[[email protected] test]# touch stu_102999_{1..5}_finished.jpg
[[email protected] test]# ls *.jpg |sed -r ‘s#(^.*99)_(.*)_finished.jpg#mv & \1_\2.jpg#g‘
mv stu_102999_1_finished.jpg stu_102999_1.jpg
mv stu_102999_2_finished.jpg stu_102999_2.jpg
mv stu_102999_3_finished.jpg stu_102999_3.jpg
mv stu_102999_4_finished.jpg stu_102999_4.jpg
mv stu_102999_5_finished.jpg stu_102999_5.jpg
[[email protected] test]# ls *.jpg |sed -r ‘s#(^.*99)_(.*)_finished.jpg#mv & \1_\2.jpg#g‘|bash

2.4查
p 輸出指定內容,但默認會輸出2次匹配的結果,因此使用-n取消默認輸出
2.4.1按行查詢
[[email protected] ~]# sed ‘2p‘ person.txt
101,oldboy,CEO
102,zhangyao,CTO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed ‘2p‘ person.txt -n
102,zhangyao,CTO
說明:用sed取行是最簡單的 awk取列很方便

2.4.3混合查詢
[[email protected] ~]# sed -n ‘2,/CFO/p‘ person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO

課後作業:
1、linux通配符
2、linux正則
3、第三關考試題
4、sed命令基礎
預習:
12位權限
定時任務
第四關考試題



1、ln
ln make LiNks between files
無參數 創建硬鏈接 硬鏈接和源文件共享同一個inode 指向同一個block
-s 創建軟鏈接 軟鏈接和源文件不同的inode和block 軟鏈接的block存放源文件的絕對路徑信息

ln option 源文件 目標文件

只有同一個分區的inode一樣的文件才是同樣的文件

2、readlink 查看符號鏈接(軟鏈接)的源文件

3、md5sum 計算和校驗文件的md5值 (文件的指紋 獨一無二的) -c 校驗文件md5值
方法:先計算文件的md5值 保存到文件 然後用-c檢測文件的md5值與原來的是否一致
[[email protected] ~]# md5sum a >md5.log
[[email protected] ~]# md5sum -c md5.log
a: OK
[[email protected] ~]# echo hello >a
[[email protected] ~]# md5sum -c md5.log
a: FAILED
md5sum: WARNING: 1 of 1 computed checksum did NOT match

課前考試:
請大家討論4個主題
1、linux文件屬性 ls -lhi 結果每列
解答:
inode節點號、11位字符組成 文件類型和權限(l鏈接 -普通文件 d目錄 s socket b塊 屬主讀寫執行 屬組讀寫執行 其他用戶讀寫執行 ) 硬鏈接個數 屬主 屬組 文件大小(h代表人類可讀 M和K) 修改時間(-ctime change stat命令) (前面都是inode信息) 文件名(不在inode裏面)
2、linux通配符講課
解答:
. 當前目錄 ..上級目錄 *任意字符 ? 單個字符 \ 轉義字符 # 註釋 ‘無轉換變量和所見即所得‘‘ 轉換變量 !取反 |管道 -上一次的所在路徑 ;命令分隔符 <輸入重定向 <<追加輸入重定向 >輸出重定向 >>追加輸出重定向 ~家目錄 `反引號 裏面的命令先執行
3、linux正則表達式
解答:
.匹配 *代表 .*匹配任意字符 $行尾 ^行首 ^$匹配空行 ?單個字符
4、取ip不低於3種方法
解答:
[[email protected] ~]# ifconfig eth0|sed -nr ‘2s#^.*ddr(.*) B.*$#\1#gp‘
:192.168.140.128
[[email protected] ~]# ifconfig eth0|sed -nr ‘2s#^.*ddr:(.*) B.*$#\1#gp‘
192.168.140.128
[[email protected] ~]# ifconfig eth0|awk -F "[ :]+" ‘NR==2{print $4}p‘
192.168.140.128

說明: [0-9]*表示0-9的數字輪詢 -o 只顯示匹配的字符



文件權限 要求精通


20170330 21:00-
測試環境準備:
[[email protected] ~]# groupadd incahome #創建一個家庭(oldboy的家)
[[email protected] ~]# useradd oldboy -g incahome #讓家庭主人oldboy屬於incahome這個家庭
[[email protected] ~]# su - oldboy
[[email protected] ~]$ ll
total 0
[[email protected] ~]$ id oldboy
uid=502(oldboy) gid=502(incahome) groups=502(incahome)
[[email protected] ~]# useradd oldgirl -g incahome #創建incahome這個家的家庭成員
[[email protected] ~]# useradd test #外面的人,主人和家庭成員以外的人
[[email protected] ~]# id oldboy
uid=502(oldboy) gid=502(incahome) groups=502(incahome)
[[email protected] ~]# id oldgirl
uid=503(oldgirl) gid=502(incahome) groups=502(incahome)
[[email protected] ~]# id test
uid=504(test) gid=504(test) groups=504(test)
[[email protected] ~]# mv /oldboy /tmp/
mv: overwrite `/tmp/oldboy‘? y
[[email protected] ~]# mkdir /oldboy
[[email protected] ~]# cd /oldboy/
[[email protected] oldboy]# ll
total 0
[[email protected] oldboy]# echo "echo oldboylinux" >/oldboy/test.sh
[[email protected] oldboy]# chmod +x /oldboy/test.sh
[[email protected] oldboy]# ll test.sh
-rwxr-xr-x 1 root root 17 2017-03-30 21:30 test.sh
[[email protected] oldboy]# cat test.sh
echo oldboylinux

總結如下:

我們刪除一個文件 就是刪除這個文件名 和該文件的權限無關 是 刪除上一級目錄的block存放的文件名 和上一級目錄的權限相關
linux系統下文件讀取的原理:
比如我要刪除 oldboyfile 的權限就是受到 上一級目錄的權限控制


例子:


5.3chmod
5.3.2數字組合權限表示法

網站目錄安全權限深度講解:
默認權限是安全權限的臨界點,工作中盡量給這個臨界點,或者小於臨界點,不要大於臨界點。
linux目錄權限默認755 文件權限默認644

根據屬主屬組去控制文件和目錄的讀寫可執行權限

如果需要修改umask永久生效 那就修改以上文件位置把 臨時生效: umask 數字

目錄從777開始算起 文件從666開始算起
老男孩方法:
如果umask全部偶數,則直接相減得到默認創建文件的權限,目錄的權限直接相減;
如果umask含有奇數,則直接相減後含奇數的+1得到創建文件的權限,目錄的權限直接相減。



特殊權限位 了解即可
setuid和setgid
當在二進制passwd命令上設置了suid權限的時候,普通用戶在執行該passwd命令的時候就擁有了和命令對應的用戶(root)對應的權限

[[email protected] oldboy]# ll `which passwd|tail -1`
-rwsr-xr-x 1 root root 30768 2015-11-24 00:30 /usr/bin/passwd

su和sudo的區別 su相當於推翻皇帝自己當皇帝 sudo相當於皇帝給你尚方寶劍


[[email protected] oldboy]# find /usr/bin -type f -perm 4755 -exec ls -l {} \; # 待優化的命令
-rwsr-xr-x 1 root root 51784 Aug 24 2016 /usr/bin/crontab
-rwsr-xr-x. 1 root root 22544 Mar 17 2015 /usr/bin/pkexec
-rwsr-xr-x 1 root root 30768 Nov 24 2015 /usr/bin/passwd
-rwsr-xr-x 1 root root 40240 May 11 2016 /usr/bin/newgrp
-rwsr-xr-x. 1 root root 54496 Feb 20 2015 /usr/bin/at
-rwsr-xr-x 1 root root 75640 May 11 2016 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 70480 May 11 2016 /usr/bin/chage
-rwsr-xr-x 1 root root 2438336 Jul 13 2016 /usr/bin/Xorg
優化命令如下:find /usr/bin -type f -perm 4755 -exec chmod u-s {} \;
linux的優化之一: 就是幹掉無用的suid、sgid、權限


20170331 20:30-
有s表示有特殊權限u+s g+s S表示無特殊權限u-s g-s
suid: chmod 4755 file 或者chmod u+s file
sgid: chmod 2755 file 或者chmod g+s file
一起修改: chmod 6755 file

chown

chattr change file attributes on a Linux file system
參數i 防止修改文件 鎖定文件
[[email protected] test]# chattr +i /etc/passwd #+i 鎖定passwd文件
[[email protected] test]# lsattr /etc/passwd
----i--------e- /etc/passwd
[[email protected] test]# useradd asdadsa
useradd: cannot open /etc/passwd

加鎖關鍵文件 轉移加鎖命令 到別的文件夾

章節總結:
特殊權限:


視頻學習記錄day04