跟馬哥學linux (lesson 3)

簡單文件權限管理命令總結:

一、命令功能總結

1.vim

man文檔說明:

NAME
       vim - Vi IMproved, a programmers text editor
SYNOPSIS
       vim [options] [file ..]
       vim [options] -
       vim [options] -t tag
       vim [options] -q [errorfile]
       ex gex
       view
       gvim gview vimx evim eview
       rvim rview rgvim rgview

中文說明:

增強型的vi文本編輯工具

vim工作模式:(1)命令模式;(2)輸入模式;(3)末行模式:

工作模式切換:

編輯模式 --> 輸入模式:

參數:

i: insert 在當前光標處輸入 

a:append 在當前光標後輸入

o:new line 切換新行輸入

I: 行首   

A:行尾

O:上方新建行


輸入模式 --> 編輯模式: ESC


編輯模式 --> 末行模式::

末行模式 --> 編輯模式: ESC


打開文本文件: (1)vim filename (2) vim filename +行號 (3)vim filename /查找內容


關閉文件:

:q 退出

:q!不保存退出

:wq保存退出

:x保存退出

ZZ:保存退出


光標跳轉:

字符間跳轉:

h:左一個字符

l:右一個字符

j:下一個字符

k:上一個字符

單詞間跳轉:

w:後單詞的詞首

e:當前或後一個單詞的詞尾;

b:當前或前一單詞的詞首;


行內跳轉:

^: 跳轉至行首的第一個非空白字符;

0:跳轉至行首;

$: 跳轉至行尾;


行間移動:

G:文檔尾部

gg:文檔首部


句間移動:

)句首

(句尾


段落間移動:

}段首

{段尾


編輯命令:

字符編輯:

x: 刪除光標所在處的字符

#x:刪除x個字符

xp: 左右替換

r: 替換光標所在處的字符;


刪除命令:

d:

d^刪除光標到句首的字符

d$刪除光標到句尾的字符

dw, de, db

dd: 刪除整行

注意:刪除的內容會被vim編輯器保存至緩衝區當中;


粘貼:p (paste, put)

如果此複製或刪除的內容不是一個完整行

p:粘貼至當前光標所在處後面;

P:粘貼至當前光標所在處前面;


如果複製的內容是完整行(可不止一行)

p: 粘貼至當前光標所在行下方;

P:行上方;


複製命令:y, yank

y

y$, y^, y0

ye, yw, yb

yy: 複製行


撤消此前的編輯操作:

u:撤消此前編輯操作;

Ctrl+r:恢復此前的撤消操作

.: 重複前一個編輯操作


翻屏操作:

Ctrl+f: 向後一屏;

Ctrl+b:向前一屏;

Ctrl+d: 向後半屏

Ctrl+u: 向前半屏


vim內建教程:vimtutor



vim的末行模式

(1) 地址,定界:start_pos,end_pos

(2) 查找

/PATTERN:向尾部進行

?PATTERN:向首部進行

n: 與命令同方向

N:與命令反方向 

(3) 查找替換

s: 在末行模式下,在地址定界的範圍內完成查找替換操作;

s/要查找的內容/替換爲的內容/修飾符

要查找的內容:可使用模式

替換爲的內容:不能使用模式,但可以使用後向引用符號,以引用前面模式中的分組括號所匹配到的內容;

\1, \2, ...

&:引用“要找的內容”匹配到的整個內容;

修飾符:

i: 忽略大小寫

g: 全局替換

/:用於分隔符,所以,要查找的內容或替換爲的內容中出現此符號,要使用\對其轉義,使用格式:\/

分隔符可替換爲其它字符:例如@,#等;

多文件模式:

vim FILE1 FILE2 ...

:next 下一個打開的文件

:first 第一個打開的文件

:prev 向前一個打開的文件

:last 最後一個打開的文件

:wqall 全部保存

:q!all 全部不保存


多文件窗口分割:vim -o|-O FILE1 FILE2 ...

Ctrl+w, ARROW

單文件窗口分割:

Ctrl+w, s: split, 水平分割

Ctrl+w, v: vertical, 垂直分割

定製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


2.find

man說明:

NAME
       find - search for files in a directory hierarchy
SYNOPSIS
       find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

中文說明:

搜索文件或文件夾命令


查找條件:

根據文件名進行查找:

-name "文件名稱": 支持使用glob;*, ?, []

-iname "文件名稱":不區分字符大小寫,支持使用glob;

-regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱;



根據屬主、屬組查找:

-user USERNAME: 查找屬主爲指定用戶的文件;

-group GROUPNAME: 

-uid UserID: 查找文件的屬主指定uid的文件;

-gid GroupID: 

-nouser: 查找沒有屬主的文件;

-nogroup:查找沒有屬組的文件;


根據文件類型進行查找:

-type TYPE

f: 普通文件

d: 目錄

l: 符號鏈接

b: 塊設備

c: 字符設備

p: 命名管道

s: 套接字


組合查找條件:

與條件:-a

或條件:-o

非條件:-not, !

!A -o !B = !(A -a B)

!A -a !B = !(A -o B)


根據文件大小來查找:

-size [+|-]#UNIT

單位:k, M, G

#UNIT: (#-1,#]

+#UNIT: (#,+oo)

-#UNIT:[0,#-1]


根據時間戳:

以“天”爲單位

-atime [+|-]# 最後一次訪問時間

#:[#,#+1)

+#: [#+1,oo]

-#: [0,#)

-mtime 最後一次修改文件內容時間

-ctime 最後一次更改文件名時間

以“分鐘”爲單位

-amin

-mmin

-cmin


根據權限:

-perm [/|-]MODE

MODE: 精確權限匹配

/MODE:任何一類對象(u,g,o)的任何一位權限符合條件即可;隱含或條件;

-MODE:爲每一類對象指定的每一位權限都必須同時存在方爲符合條件;隱含與條件;

處理動作:

-print: 默認處理動作

-ls:類似於對查找到的每個文件做"ls -l"的操作;

-delete: 刪除查找到的文件;

-fls /path/to/somefile:查找到的文件的詳細路徑信息保存至指定文件中;

-ok COMMAND {} \;對每個文件執行指定的命令之前需要用戶事先確認;

-exec COMMAND {} \;無需用戶確認;


3.bash環境配置:

配置文件,生效範圍劃分,存在兩類:

全局配置:/etc/profile, /etc/profile.d/*.sh ,/etc/bashrc

個人配置:~/.bash_profile ~/.bashrc

按功能劃分,存在兩類:

profile類:爲交互式登錄的shell提供配置 /etc/profile, /etc/profile.d/*.sh,~/.bash_profile

功用:

(1) 定義環境變量,例如PATH、PS1

(2) 運行命令或腳本

bashrc類:爲非交互式登錄shell提供配置 /etc/bashrc,~/.bashrc

功用:

(1) 定義命令別名;

(2) 定義本地變量;


變量:內存空間,變量名

類型:

環境變量:作用範圍當前shell進程及其子進程

本地變量:作用範圍當前shell進程

局部變量:作用範圍僅爲當前shell進程中某代碼片斷(通常爲函數上下文)

位置變量:$1, $2

特殊變量:$?

變量定義方式:

bash內置變量:可直接調用,內置了許多環境變量,例如PATH等

自定義變量:

變量賦值:變量名=值

bash弱類型:

變量存儲數據時,默認均採用字符形式;任何變量可以不經聲明,直接引用;

定義本地變量:name=value 查看:set

定義環境變量:export name=value ,declare -x name=value

查看:env, printenv, export

撤消變量:unset name

引用變量:${name}, $name

bash中的引用符號:

'': 強引用,變量替換不會發生

"":弱引用

``: 命令引用


shell登錄類型:

交互式登錄:

直接通過終端進行的登錄;

通過su - Username命令實現的用戶切換;

非交互式登錄:

圖形界面下打開的命令行窗口;

執行腳本;

su Username;


配置文件作用次序:

交互式登錄:/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非交互式登錄:~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh


4.SUID、SGID、Sticky權限說明

SUID:

(1) 任何一個可執行程序文件能不能啓動爲進程:取決於發起者對程序文件是否有執行權限;

(2) 啓動爲進程之後,其屬主不是發起者,而程序文件自己的屬主;這種機制即爲SUID;

權限設定:

chmod u+s FILE... 

chmod u-s FILE...

注意:

s: 屬主原本擁有x權限;

S: 屬主原本無x權限;


SGID:

默認情況下,用戶創建文件時,其屬級爲此用戶所屬的基本組;

一旦某目錄被設定了SGID權限,則對此目錄擁有寫權限的用戶在此目錄中創建的文件所屬的組爲目錄的屬組,而非用戶的基本組;

權限設定:

chmod g+s FILE...

chmod g-s FILE...


Sticky:

對於一個多人可寫的目錄,此權限用於限制每個僅能刪除自己的文件;

權限設定

chmod o+t FILE...

chmod o-t FILE...


5.linux磁盤和系統管理知識

Linux磁盤管理

硬盤:機械式硬盤;SSD

機械式:

track

sector: 512bytes

cylinder: 分區的基本單位;

MBR:Master Boot Record

512bytes 446: bootloader 64: filesystem allocation table 16: 標識一個分區 2:55AA

磁盤接口類型:

IDE (ATA):133MB/s,/dev/hd

SCSI: 640MB/s

SATA:6Gbps

SAS:6Gbps

USB:480MB/s


識別硬盤設備:/dev/sdx

標記不同的硬盤設備:/dev/sd[a-z]

標記同一設備上的不同分區:/dev/sd[a-z][1-]

1-4: 主或擴展分區標識

5+:邏輯分區標識

設備文件:特殊文件

設備號:

major, minor

major: 設備類型

minor: 同一類型下的不同設備“塊”:block,隨機設備

“字符”:character,線性設備

分區:分隔存儲空間爲多個小的空間,每個空間可獨立使用文件系統;

分區工具:fdisk, parted, sfdisk

fdisk工具的使用:

最多支持在一塊硬盤上的15個分區;

fdisk分區管理子命令:

p: 顯示

n: 創建

d: 刪除

t: 修改分區ID

l: 列出所有支持ID類型

w: 保存退出

q: 放棄修改並退出

m: 獲取幫助

創建完成之後,查看內核是否已經識別新的分區:

# cat /proc/partitions

有三個命令可以讓內核重讀磁盤分區表:

CentOS 5: partprobe [DEVICE]

CentOS 6,7: partx kpartx

partx命令:

partx DEVICE

partx -a DEVICE

partx -a -n M:N DEVICE

M

M:分區範圍

:N

kpartx命令:

kpartx -af DEVICE

a:添加一個分區


Linux文件系統管理

文件系統:

VFS:Virtual File System

Linux:ext2, ext3, ext4, reiserfs, xfs, btrfs, swap

光盤:iso9660

Windows: fat32(vfat), ntfs

Unix: ffs, ufs, jfs, jfs2

網絡文件系統:nfs, cifs

集羣文件系統:ocfs2, gfs2

分佈式文件系統:ceph,moosefs, mogilefs, hdfs, gfs, glusterfs

(1) 日誌型文件系統

非日誌型文件系統:ext2

日誌型文件系統:ext3,ext4

(2) swap:交換分區

創建文件系統:

在分區上執行格式化(高級格式化)

要使用某種文件系統,滿足兩個條件:

內核中:支持此種文件系統

用戶空間:有文件系統管理工具

創建工具:mkfs (make filesystem)

mkfs -t type DEVICE

mkfs.type DEVICE

ext系列文件系統的專用管理工具:

mke2fs -t {ext2|ext3|ext4} DEVICE

-b BLOCK: 1024, 2048, 4096

-L 'LABEL': 設定卷標

blkid命令:

blkid DEVICE

LABEL, UUID, TYPE


二,課後練習

1.複製/etc/grub.cfg配置文件至/tmp目錄,用查找替換命令刪除/tmp/grub.cfg文件中的行首的空白字符;

命令:

:%s/^[[:blank:]]//g

wKioL1XkBpyR8fbAAAN_aSb-AfU506.jpg2.複製/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命令爲/tmp/functions的每行開頭爲空白字符的行的行首加一個#; 原有空白字符保留;

命令:

%s/^[[:blank:]]/#&/g

wKioL1XkB03Bly0sAAL2ufEuu20217.jpg3.替換/tmp/functions文件中的/etc/sysconfig/init爲/var/log;

命令:

%s@/etc/sysconfig/init@/var/log@g

wKioL1XkB8KRqhd3AAL8SfbtMNE438.jpg4.刪除/tmp/functions文件中所以#開頭,且#後面至少跟了一個空白字符的行的行首#

命令:

:%s/^#[[:blank:]]/ /g

wKioL1XkCPCgJdQxAAIZj9v__t4979.jpg5.查找/var目錄屬主爲root,且屬組爲mail的所有文件;

命令:

find /var -user root -a -group mail -ls

6.查找/usr目錄下不屬於root、bin或hadoop的所有文件;

命令:

find /usr -not -user root -a -user bin -a -user hadoop

7.查找/etc目錄下最近一週內其內容修改過,且屬主不爲root或hadoop的所有文件

命令:

find /etc -mtime -7 -a -not \( -user hadoop -o -user root \)


8.查找當前系統上沒有屬主或屬組,且最近一週內曾被訪問過的所有文件;

命令:

find / -nouser -a -nogroup -a -atime -7

9.查找/etc目錄下大於20k且類型爲普通誰的的所有文件;

命令:

find /etc -size +20k -a -type f

10.查找/etc目錄下所有用戶都沒有寫權限的文件;

命令:find /etc -not -perm /222

11.查找/etc目錄下至少有一類用戶沒有執行權限的文件;

命令:

find /etc -not -perm -111

12.查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶擁有寫權限的文件;

命令:

find /etc/rc.d/init.d -perm -111 -a -perm -002

13.讓普通用戶能使用/tmp/cat去查看/etc/shadow文件;

命令:

cp /bin/cat /tmp
chmod u+s /tmp/cat
/tmp/cat /etc/shadow

14.創建目錄/test/data,讓某組內普通用戶對其有寫權限,且創建的所有文件的屬組爲目錄所屬的組;此外,每個用戶僅能刪除自己的文件;

命令:

mkdir -p /test/data
chmod g+w /test/data
chmod g+s /test/data
chmod o+t /test/data


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章