Linux學習之find等內容篇
本次總結的內容包含:
find命令的參數以及使用
vim文本編輯器的介紹和使用
bash環境變量的介紹以及設置
linux文件系統的特殊權限SUID/SGID/Sticky的介紹以及應用
linux磁盤管理等相關命令介紹
一、find 查找命令
在linux系統中有兩個查找文件的命令,分別是local和find
local:非實時查找,是基於系統空閒時構建的索引查找的,採用的模糊查找,所以查找速度比較快,但對查找不到更新索引之後創建的文件以及目錄信息。可以使用updatadb命令來手動的更新索引;
find:實時查找,其工作是從指定的路徑開始挨個比對查找,採用的是精確的查找模式,所以查找速度比local慢很多,不建議在任務繁重的生產服務器上使用。
所以我們再次重點介紹find的使用方法和技巧
find
SYNOPSIS find [OTTPION...] [查找路徑] [查找條件] [處理動作]
查找路徑:可以手動指定,也可以不指定;默認爲當前的路徑;
查找條件:查找的標準,默認爲找出指定路徑的全部文件;
處理動作:對符合條件的文件做的操作,默認爲打印至屏幕;
1、 查找條件分類:
a、根據文件名查找:
-name FILENAME :支持glob即可以是用*、?、[]等通配符
-iname FILENAME:表示不區分文件名稱大小寫,也支持glob
-regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件的名稱;
b、根據屬主、屬組查找:
-user USERNAME:查找屬主爲指定用戶的文件;
-group GROUPNAME:查找屬組爲指定組的文件;
-uid USERID:查找uid爲指定值得文件;
-gid GROUPID:查找gid爲指定值得文件;
-nouser:查找沒有屬主的文件;nouser表示沒有屬主名稱,但是有UserID
-nogroup:查找沒有屬組的文件;
c、根據文件的類型查找:
-type TYPE
f:普通文件類型
d:目錄文件
l:符號鏈接文件
b:塊設備文件
c:字符設備文件
p:管道文件
s:套接字文件
可以將各種條件組和起來查找:
與條件 :-a //此優先級次之
或條件:-o //此優先級最低
非條件:-not,! //此優先級最高
組合是非條件的邏輯轉換比較容易混淆,這裏重點介紹一下
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
d、根據文件大小來查找:
-size [+|-] #UNIT
UNIT(單位):K、 M、 G
因爲文件的大小不都是整數,所以此處的+-以及精確指定的大小都是指的一個特定的範圍;
#UNIT:(#-1,#]
例:3K:表示的大於2K小於等於3K範圍的文件都符合條件
+#UNIT:(#,正無窮)
例:+3K:表示大於3K範圍的文件都符合條件
-#UNIT:(0,#-1]
例:-3K:表示大於0小於等於2K範圍的文件都符合條件
e、根據時間戳:
根據時間戳的分爲兩類:
以“天”爲單位:
-atime:以天爲單位的訪問時間
用法: -atime [+|-]#
此處單位天實際中不可能爲整數,所以精確的以及+-的天數都是指的是一個特定的範圍
-atime #: [#,#+1)
例: -atime 3 :表示訪問時間大於等於2天小於4天的一個特定範圍
-atime +#:[#+1,正無窮)
例: -atime +3:表示訪問時間大於等於4天範圍
-atime -#:[0,#)
例: -atime -3:表示訪問時間小於3天的範圍
-mtime:以天爲單位的修改時間
用法同上
-ctime:以天爲單位的改變時間
用法同上
以“分鐘”爲單位:
-amin:以分鐘爲單位的訪問時間
-mmin:以分鐘爲單位的修改時間
-cmin:以分鐘爲單位的更改時間
用法同上
f、根據權限查找:
-perm [/|-]MODE
MODE:精確權限匹配
例: -perm 644 表示u、g、o分別精確對應rw-r-xr-x
/MODE:任何一類權限的任何一位權限符合條件就可以,隱含的是或關係;
注意:/400、/440、/444表示的意思不同
/400 表示u位有讀權限就滿足查找的要求,不關注其餘兩位的權限;
/440 表示u、g兩類任何一類有讀權限就滿足查找的要求;
/444 表示u、g、o三類任意一個都讀權限就滿足查找的要求;
-MODE:爲每一類對象指定的每一位權限都必須同時存在才滿足查找的要求,隱含的是與關係
例:-perm -440 :表示u和g類必須都存在讀權限才能滿足查找的條件,0類不關注;
2、處理動作:
-print:打印至屏幕,是默認的處理動作;
-ls :類似對查找到的每個文件做'ls -lh'的操作
-delete:刪除查找到的文件
-fls /path/to/somefile : 查找到文件的詳細路徑保存在指定的文件中;
-ok COMMAND {} \;
對沒個文件執行指定命令之前需要用戶事先確認;
-exec COMMAND {} \;
不需要用戶的確認;
注意:此處命令後跟的{} \;是固定格式。如果參數要多次傳遞 這需要出現多個{}與之對應。
二、VIM的介紹和使用
VIM是一款全屏、模式化的文本編輯器
vi:visual interface(可視化接口)
vim是vi的增強版 即 vi iMproved
1、vim的三種模式:
編輯模式:
輸入模式:
末行模式:
模式間的切換:
編輯模式-->輸入模式
i:insert 表示在當前光標所在字符的前方插入
a:append,表示在當前光標所在字符的後方插入
o:open new line,表示在當前光標的下放插入新的一行
I:表示在當前光標所在行的行首插入
A:表示在當前光標所在行的行尾插入
O:表示在當前光標所在行的下方插入新的一行
輸入模式-->編輯模式
ESC
編輯模式-->末行模式
:
末行模式-->編輯模式
ESC
2、打開vim:
vim 直接輸入vim
vim /path/to/somefile 打開指定路徑的文件
+#:表示打開文件後跳轉到第#行
/PATTERN:表示打開文件跳轉至能第一個匹配的行
3、關閉vim:
末行模式下:
:q 退出
:q! 強制退出
:wq 保存退出
:x 保存退出,等效wq
編輯模式下:
ZZ 兩個大寫的Z也能退出vim
4、光標跳轉:
字符間跳轉:
h:向左一個字符
l:向右一個字符
j:當前字符向下跳轉一行
k:當前字符向上跳轉一行
#COMMAND:表示h/l/j/k前可跟數字,表示跳轉的值
例:3h:表示想左跳轉3個字符
3j:表示向下跳轉3行;
單詞見跳轉:
w:表示跳轉至後一個單詞的詞首;
e:表示跳轉至當前或後一個單詞的詞尾
b:表示跳轉至當前或前一個單子的詞首
#COMMAND:同上
行內跳轉:
^:表示跳轉至行首的第一個非空字符
$:表示跳轉至行尾(絕對行尾)
0:表示跳轉至行首(絕對行首)
行間跳轉:
#G:跳轉至第#行,
1G,gg:跳轉至第一行
G:跳轉至最後一行
句間移動:
):表示跳轉至下一句
(:表示跳轉至上一句
段落間移動:
}:表示跳轉至下一段
{:表示跳轉至上一段
5、編輯模式下的命令:
字符編輯:
x:刪除光標所在處的字符;
#x:刪除光標所在處及以後共#個字符
xp:刪除粘貼,可用將當前光標所在處的字符與後一個字符調換位置
刪除命令:
d:刪除命令
d^:刪除至非空白字符的行首
d$:刪除之行尾
d0:刪除之行首
dw:刪除當前光標所在位置到詞尾或下一個單詞,連空格也會刪除
de:刪除當前光標所在位置到詞尾或下一個單詞,不會刪除空格
db:刪除當前光標所在位置到詞首或下一個單詞,空格一併刪除
dh:刪除當前光標所在位置的左一個字符
dj:刪除當前光標所在行以及下一行
dk:刪除當前光標所在行以及上一行
dl:刪除當前光標所在位置的右一個字符
dd:刪除當前行
#COMMAND
粘貼命令:p (paste、put)
如果複製或刪除的內容不是一個完整行
P:粘貼至當前光標所在處後面
p:粘貼至當前光標所在處前面
如果複製或刪除的內容是一個完整行
P:粘貼至當前光標所在行下方
p:粘貼至當前光標所在行上方
複製命令:y(yank)
y
y^/y$/y0/yw/ye/yb
yy:複製當前行
#COMMAND
改變命令:c(change)
c^/c$/c0/cw/ce/cb
cc
#COMMAND
6、撤銷此前的編輯操作:
u:undo
#u:表示撤銷此前#次操作
Ctrl+r :撤銷撤銷操作
. :表示重複前一個編輯操作
7、翻屏操作業:
Ctrl+f:向後一屏
Ctrl+b:向前一屏
Ctrl+d:向後半屏
Ctrl+u:向前半屏
8、vim的末行模式:
地址、界定:
:start_pos,end_pos
#:第#行
#,@:第#行到第@行
#,+@:第#行到第#+@行
.:當前行
$:最後一行
%:全文,相當於1,$
/pat1/:第一次被此模式匹配的行
#,/pat1/
/pat1/,/pat2/
後面可以跟c/d/x/r/w等編輯命令
查找
/PATTERN:向尾部進行查找
?PATTERN:向首部進行查找
n:同向查找
N:反向查找
查找替換
s:在末行模式下,在地址界定的範圍完成查找替換操作:
s/要查找的內容/要替換的內容/修飾符
要查找的內容:可以使用模式;
要替換的內容:不能用模式,但是可以使用後向引用符號,以應用前面模式中括號匹配到的內容
\1,\2,.....
&:引用要查找的內容匹配到的整個內容:
修飾符:i 忽略大小寫 g:全局替換
/:分隔符,所以在要查找的內容找出現了此符號,必須要使用\轉義 及\/ 或者使用@等符號替換 /符號。
9、多文件模式:
vim FILE1 FILE2 ...
:next下一個文件
:first第一個文件
:prev上一個文件
:last最後一個文件
:wqall
:q!all
10、多文件窗口分割:
vim -o|-O FILE1 FILE2 ...
-o:水平分割
-O:垂直分割
Ctrl+w,(逗號表示鬆手) ARROW(箭頭符號)
單文件窗口分割:
Ctrl+w, s: split, 水平分割
Ctrl+w, v: vertical, 垂直分割
11、定製vim的某些工作特性:
(1) 行號
顯示:set nu
禁用:set nonu
(2) 括號匹配
顯示:set sm
禁用:set nosm
(3) 自動縮進:
set ai
set noai
(4) 高亮搜索
set hlsearch
set nohlsearch
(5) 語法着色
syntax on
syntax off
(6) 忽略字符大小寫
set ic
set noic
:help 獲取幫助
:help SUBJECT
特性設定的永久生效方式:
全局配置文件:/etc/vimrc
用戶個人的配置文件:~/.vimrc
三、bash環境配置:
1、分類:
配置文件,生效範圍劃分,存在兩類:
全局配置:
/etc/profile,/etc/profile.d/*.sh,/etc/bashrc
個人配置:
~/.bash_profile , ~/.bashrc
按功能劃分,存在兩類:
profile類:爲交互式登錄的shell提供配置
/etc/profile,/etc/profile.d/*.sh,~/.bash_profile
作用:a、定義環境變量,例如PATH、PS1
b、運行命令腳本
bashrc類:爲非交互式登錄shell提供配置
/etc/bashrc , ~/.bashrc
作用:a、定義命令別名
b、定義本地變量
2、變量:就是內存空間,
類型:
環境變量:作用範圍當前shell進程及其子進程
本地變量:作用範圍當前shell進程
局部變量:作用範圍僅當前shell進程中某代碼片段
位置變量:$1,$2,....
特殊變量:$?
變量定義:
bash內置變量:可以直接調用,內置了許多環境變量,例如:PATH等
自定義變量:
變量賦值:變量名=值
3、定義本地變量
name=value
查看用set命令
4、定義環境變量
export name=value
declare -x name=value
查看:env,printenv,export
5、撤銷變量
unset name
6、引用變量
$name , ${name}
7、bash中的引用符號
'':單引號是強引用,變量替換不會發生
"":雙引號是弱引用
``:反引號(tab鍵上面的),命令引用
8、shell登錄類型
交互式登錄:
通過終端直接登錄
通過su - l username命令實現的用戶切換
非交互式登錄:
圖形界面下打開的命令行窗口
執行腳本
su username
9、配置文件的作用次序:
交互式登錄
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非交互式登錄
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
10、如何讓配置文件生效:
a、重新登錄:
b、讓當前shell進程去重新讀取指定的配置文件
source /path/to/somefile
. /path/to/somefile
注意讀取配置文件可能會使添加的配置文件重複多次讀取
四、Linux文件系統上的特殊權限:
1、權限模式
每個文件都有user,group,other三類用戶對應的權限集,及rwx
2、進程的安全上下文
進程有屬主(進程以哪個用戶的身份運行):文件有屬主和屬組:
a、用戶是否能夠把某個可執行程序啓動爲進程,取決與用戶對該文件是否有執行權限
b、程序啓動爲進程後,此進程的屬主爲當前用戶,及是進程的發起者;進程所屬組也是發起者的所屬組
c、進程的訪問權限,取決起屬主的訪問權限
a)、進程的屬主同文件屬主,則應用文件屬主的權限
b)、進程的屬主同文件的屬組,則應用文件的屬組的權限
c)、進程的屬主同文件的其他權限
3、SUID:
a、任何一個可執行程序文件能不能啓動爲進程,取決於發起者對程序文件是否有執行權限
b、啓動爲進程後,起屬主不是發起者,而是程序文件自己的屬主,這種機制就叫做SUID
權限設定:
chmod u+s filename
chmod u-s filename
注意:s:屬主原本就有執行權限; S:屬主原本沒有執行權限
4、SGID
默認情況下,用戶創建文件是,其屬組是這個用戶所屬的基本組
一旦某目錄被設定SGID權限後,則在此目錄下創建的文件的屬組都是該目錄的屬組,而不是文件所屬的基本組:
權限設定:
chmod g+s filename
chmod g-s filename
5、Sticky
對一個多人可寫的目錄,此特性用於限制用戶只能刪除自己的文件:
權限設定
chmod o+t filename
chmod o-t filename
五、Linux磁盤管理(一)
1、硬盤:
機械式硬盤
SSD
機械式:
track:
sector:
cylinder:分區的基本單位:
MBR:Master Boot Record
512bytes
446:bootloader
64: filenamesystem allocation table
2:55AA
2、磁盤接口類型:
IDE(ATA):133MB/s
SCSI:640MB/s
SATA:6Gbps
SAS:6Gbps
USB:480MB/s
識別硬盤設備:/dev/sd
標記不同的硬盤設備:/dev/sd[a-z]
標記同意設備上的不同分區:/dev/sd[a-z][1-]
1-4:表示主分區或者可擴展分區
5+:邏輯分區
設備文件:特殊文件
設備號:
major,minor
major:設備類型
minor:同意類型下的不同設備
3、分區:即分割存儲空間爲多個小的空間,每個空間可獨立使用文件系統:
4、分區工具:
fdisk,parted,sfdisk
5、fdisk工具的使用
分區管理子命令:
p:顯示
n:創建
d:刪除
t:修改分區ID
l:列出所有支持ID類型
w:保存退出
q:不保存退出
m:獲取幫助
創建完成後,查看內核是否已經識別新的分區
cat /proc/partitions
有三個命令可以讓內核重讀磁盤分區表:
CentOS 5: partprobe [DEVICE]
CentOS 6,7: partx,kpartx
6、Linux文件系統管理:
文件系統:Virtual File System
linux:ext2,ext3,ext4,reiserfs,xfs,btrfs,swap
光盤:iso9600
windows:fat32,ntfs
unix:ffs,ufs,jfs,jfs2
網絡文件系統:nfs,cifs
集羣文件系統:ocfs2,gfs2
分佈式文件系統:ceph,moosefs,mogilefs,hdfs,gfs,glusterfs
a、日誌型文件系統
非日誌型文件系統:ext2
日誌型文件系統:ext3
b、交換分區:swap
7、創建文件系統
在分區上執行格式化(高級格式化)
要是某種文件系統滿足兩個條件:
a、內核中支持此文件系統
b、用戶空間中有文件系統的管理工具
創建工具mkfs(make file system)
mkfs -t type device
ext系類文件系統的專用管理工具:
mk2fs -t {ext2|ext3|ext4} device
-b:BLOCK:1024,2049,4096
-L 'label':設置卷標
blkid
blkid device 打印設備塊結構屬性
六、練習題
1、複製/etc/grub2.cfg配置文件至/tmp目錄,用查找替換命令刪除grub2.cfg文件行首的空白字符;
%s/^[[:space:]]\+//
2、複製/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命令爲空白字符開頭的行添加一個#,且保留原有的空白字符;
%s/^[[:space:]]/#\1/
3、替換/tmp/function是文件中的/etc/sysconfig/init爲/var/log;
%s@/etc/sysconfig/init@/var/log@p %s/\/etc\/sysconfig\/init/\/var\/log/p
4、刪除/tmp/functions文件中所有已#開頭,且#後面至少各了一個空白字符行的行首。
%s/^#[[:space:]]\+//
5、查找/var目錄屬主爲root,且屬組爲mail的所有文件;
find /var -user root -group mail
6、查找/usr目錄下不屬於root、bin或hadoop的所有文件;
find /usr ! \( -user root -o -user bin -o -user hadoop \)
7、查找/etc目錄下最近一週內其內容修改過,且屬主不爲root或hadoop的所有文件;
find /etc -ctime -7 -a ! \( -user root -o -user hadoop \)
8、查找當前系統上沒有屬主或屬組,且最近一週內曾被訪問過的所有文件;
find / -nouser -a -group -a -atmie -7
9、查找/etc目錄下大於20k且類型爲普通文件的所有文件;
find /etc -size +20k -a -type f
10、查找/etc目錄下所有用戶都沒有寫權限的文件;
find /etc ! -perm /222
11、查找/etc目錄下至少有一類用戶沒有執行權限的文件;
find /etc ! -perm -111
12、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶擁有寫權限的文件;
find /etc/init.d/ -perm -113
13、讓普通用戶能使用/tmp/cat去查看/etc/shadow文件;
cp /bin/cat /tmp chmod u+s /tmp/cat su - usera usera$:/tmp/cat /etc/shadow
14、創建目錄/test/data,讓某組內普通用戶對其有寫權限,且創建的所有文件的屬組爲目錄所屬的組;此外,每個用戶僅能刪除自己的文件;
mkdir /test/ cd /test/ mkdir /data chmod 777 data su - usera touch /test/data/usera.1 su - userb touch /test/data/userb.1 su - userc touch /test/data/userc.1 root#:chmod g+s data su - usera touch /test/data/usera.2 su - userb touch /test/data/userb.2 su - userc touch /test/data/userc.2 root#:chmod o+t data