8.30 vim編輯器 文件查找 文件系統 做業(練習)

Vim編輯器:node

全屏幕的編輯器:VIMshell

vi: visual interface數據庫

sed:行編輯器apache

vi, vi iMprovedvim

vim: centos

模式化:安全

編輯模式:命令模式bash

輸入模式:網絡

末行模式:app

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

i: insert,

a:append,

o:new line,

I: 行首

A:行尾

O:上方新建行

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

ESC

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

:

末行模式 --> 編輯模式

ESC

一、總結文本編輯工具vim的使用方法;

打開vim:

# vim

# vim /PATH/TO/SOMEFILE

+#:#爲行號;

+/PATTERN

關閉vim:

:q

:q!

:wq

:x

ZZ:保存退出

光標跳轉:

字符間跳轉:

h:

l:

j:

k:

#COMMAND:

單詞間跳轉:

w:後單詞的詞首

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

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

#COMMAND:

行內跳轉:

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

0:跳轉至行首;

$: 跳轉至行尾;

行間移動:

#G:

1G, gg

G

句間移動:

)

(

段落間移動:

}

{

編輯命令:

字符編輯:

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

#x:

xp:

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

刪除命令:

d:

d^

d$

d0

dw, de, db

dd:

#COMMAND

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

粘貼:p (paste, put)

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

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

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

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

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

P:行上方;

複製命令:y, yank

y

y$, y^, y0

ye, yw, yb

yy: 複製行

#COMMAND

改變命令:c, change

c$, c^, c0

cb, ce, cw

cc:

#COMMAND

撤消此前的編輯操做:

u: undo

撤消此前編輯操做;

#u

Ctrl+r:

恢復此前的撤消操做

.: 重複前一個編輯操做

翻屏操做:

Ctrl+f: 向後一屏;

Ctrl+b:向前一屏;

Ctrl+d: 向後半屏

Ctrl+u: 向前半屏

vim內建教程:

vimtutor

vim的末行模式

(1) 地址,定界

:start_pos,end_pos

#:第#行;

#,#

#,+#

.: 當前行

$: 最後一行

%: 全文,至關於1,$

/pat1/:第一次被此模式所匹配到的行;

#,/pat1/

/pat1/,/pat2/

後可跟編輯命令:

d, y

w, r

(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

二、總結文件查找命令find的使用方法

Linux文件查找:

locate: 非實時查找,根據數據庫(速度快);模糊查找;

find:實時查找,精確匹配;速度慢;

find [查找位置] [查找標準] [處理動做]

查找位置:默認爲當前目錄;

查找標準:默認爲查找指定目錄下的全部文件;

處理動做:顯示到標準輸出;

查找標準:

-name "文件名稱": 根據文件名查找,精確查找文件。

支持glob, *, [], ?

-iname "文件名稱":根據文件名查找,不區分字符大小寫;name ignore case

-user USERNAME: 根據屬主查找;

-group GRPNAME: 根據屬組查找;

-uid UID; #按照Uid 來查找

-gid GID; #按照gid來查找

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

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

組合查找條件:

-a: 與

-o:或

-not, !: 非

三、總結bash環境變量的相關內容;

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弱類型:

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

120:24bits

120: 8bits

定義本地變量:

name=value

查看:set

定義環境變量:

export name=value

declare -x name=value

查看:env, printenv, export

撤消變量:

unset name

引用變量:

${name}, $name

bash中的引用符號:

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

"":弱引用

``: 命令引用

shell登陸類型:

交互式登陸:

直接經過終端進行的登陸;

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

非交互式登陸:

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

執行腳本;

su Username;

配置文件做用次序:

交互式登陸:

/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非交互式登陸:

~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

編輯配置文件定義的新配置如何生效?

(1) 從新登陸;

(2) 讓當前shell進程去從新讀取指定的配置文件;

source /PATH/TO/SOMEFILE

. /PATH/TO/SOMEFILE

注意:反作用

四、總結Linux文件系統上的特殊權限(SUID、SGID、Sticky)的知識點

Linux文件系統上的特殊權限

權限模型:

u, g, o

r, w, x

進程的安全上下文:

前提:進程有屬主(進程以哪一個用戶的身份運行);文件有屬主和屬組;

(1) 用戶是否可以把某個可執行程序文件啓動爲進程,取決於用戶對程序文件是否擁有執行權限;

(2) 程序啓動爲進程後,此進程的屬主爲當前用戶,也即進程的發起者;進程所屬的組,爲發起者的基本組;

(3) 進程擁的訪問權限,取決其屬主的訪問權限:

(a) 進程的屬主,同文件屬主,則應用文件屬主權限;

(b) 進程的屬主,屬於文件的屬組,則應用文件屬組權限;

(c) 則應用其它權限;

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...

SUID, SGID, STICKY

000

001

010

011

100

101

110

111

chmod 4777 FILE

chmod 3755 DIR

五、總結Linux磁盤管理、文件系統相關知識點及其相關命令的使用方法;

Linux系統管理

磁盤和文件系統管理;

RAID, LVM; btrfs;

程序包管理:rpm, yum(dnf)

Linux的網絡管理;

進程和做業管理:htop, glances, tsar;

sed和awk;

Linux系統的開機啓動流程;

內核基礎知識,內核定製編譯;

系統安裝:kickstart, pxe

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/sd

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

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

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

5+:邏輯分區標識

設備文件:特殊文件

設備號:

major, minor

major: 設備類型

minor: 同一類型下的不一樣設備

「塊」:block,隨機設備

「字符」:character,線性設備

GPT

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

分區工具:

fdisk, parted, sfdisk

fdisk工具的使用:

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

分區管理子命令:

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

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

(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

Linux文件系統管理:

mkfs, mkfs -t type = mkfs.type

ext:mke2fs

建立文件系統:

mke2fs [OPTION]... DEVICE

-t {ext2|ext3|ext4}

-b {1024|2048|4096}

-L 'LABEL'

-j: mke2fs -t ext3

-i #:

-N #:

-m #: 預留磁盤空間佔據多大百分比的空間爲後期管理使用;

-O FEATURE[,...]

-O ^FEATURE:關閉此特性

has_journal

文件系統屬性查看及調整工具:

e2label

e2lable DEVICE [LABEL]

tune2fs

顯示ext系列文件系統的屬性,或調整其屬性;

-l:顯示超級塊中的信息;顯示整個文件的屬性及佈局等相關信息;

-L 'LABEL':修改卷標;

-m #: 調整預留給管理員的管理空間百分比;

-j: ext2 --> ext3

-O:文件系統屬性的啓動或關閉

-o:文件系統默認掛載選項的啓用或關閉

dumpe2fs:

-h: 僅顯示超級塊信息;

文件系統檢測:

fsck: Filesystem check

fsck -t type

fsck.type

-a: 自動修復錯誤

-r: 交互式修復錯誤

-f: 強制檢測

e2fsck:ext系列文件系統專用的檢測修復工具;

-y: 自動回答爲「yes」

-f:force

文件系統的掛載和使用:

kernel --> rootfs(分區)

rootfs分區:

bin, sbin, etc, lib, lib64, dev, tmp, proc, sys

/sbin/init

將額外文件系統與根文件系統某現存的目錄創建起關聯關係,進而使得此目錄作爲其它文件系統訪問入口的行爲,稱之爲掛載;

解除此關聯關係的過程:卸載;

掛載點:mount point, 設備掛載至目錄;

注意:掛載點在掛載在以後,其內部原有的文件會被暫時隱藏;創建使用空目錄作爲掛載點;

掛載方法:

mount:經過讀取/etc/mtab文件來顯示當前系統全部已經掛載的設備;

mount -a:掛載/etc/fstab文件中的全部支持自動掛載的文件系統;

mount [options] [-o options] DEVICE MOUNT_POINT

[options]:命令選項

[-o options]:掛載選項

DEVICE: 要掛載的設備

(1) 設備文件:/dev/sda5

(2) 卷標:-L 'LABEL'

(3) UUID:-U 'UUID'

(4) 僞文件系統名稱

MOUNT_POINT: 掛載點

經常使用選項:

-t type:文件系統類型

-r: 以「只讀」方式掛載此文件系統

-w: 以「讀寫」方式掛載此文件系統

-n:每一個文件系統在掛載時都會自動更新/etc/mtab文件,-n用於禁止此功能;

此時,若是想查看掛載的全部文件系統:cat /proc/mounts

-a: 自動掛載全部支持自動掛載的設備;

-B:綁定目錄至另外一個目錄上;

-o 掛載選項:

async:異步模式

sync: 同步模式

atime/noatime:是否更新訪問時間戳;

diratime/nodiratime:是否更新目錄的訪問時間戳;

auto/noauto: 是否容許此設備被自動掛載;

exec/noexec:是否容許執行此文件系統上應用程序;

dev/nodev:是否支持在此設備上使用設備文件;

suid/nosuid:

remount:從新掛載

ro

rw

user/nouser: 是否容許普通掛載此設備;

acl:是否支持此設備上使用facl;

defaults:rw, suid, dev, exec, auto, nouser, and async

umount:卸載命令

# umount DEVICE

# umount MOUNT_POINT

查看正在訪問指定掛載點的進程:

# fuser -v MOUNT_POINT

終止全部正在訪問指定的掛載點的進程:

# fuser -km MOUNT_POINT

交換分區:

free命令:

查看memory和swap的使用狀態

-m: 以MB爲單位

-g: 以GB爲單位

mkswap:建立交換分區

mkswap [option] DEVICE

-L 'LABEL'

swapon:啓用交換分區

swapon [option] [DEVICE]

-a: 激活全部交換分區

-p PRIORITY: 設定其優先級;

swapoff:禁用交換分區

swapoff [option] [DEVICE]

文件系統等空間佔用信息的查看工個:

df: disk free

-h: human-readable

-i: inode數量

-P: 以Posix兼容的格式輸出

du: disk usage

-h: human-readable

-s: summary

文件系統相關掛載配置文件:/etc/fstab

每行定義一個文件系統;

要掛載的設備或僞文件系統 掛載點 文件系統類型 掛載選項 轉儲頻率 自檢次序

要掛載的設備:

設備文件、LABEL=、UUID=、僞文件系統名稱

掛載選項:

defaults

轉儲頻率:

0: 不轉儲

1: 天天轉儲

2: 每隔一天轉儲

自檢次序:

0:不自檢

1:首先自檢,一般只有/才爲1

2:

...

文件系統上的連接文件:

硬連接:

兩個路徑指向同一個inode

不能對目錄進行;

不能跨分區進行

指向同一個inode的多個不一樣路徑; 建立文件的硬連接會增長inode的引用計數;刪除硬連接僅是刪除其一個訪問路徑,只到最後一個路徑被刪除;

符號連接:

連接文件的數據指向另外一個文件路徑;

能夠對目錄進行;

能夠跨分區;

指向的是另外一個文件路徑;而非inode;

對文件建立符號連接不會增長其引用計數;刪除原文件,符號連接文件也將沒法;

ln [-s] SRC DEST

-s:symbolic link

-v:verbose

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

%s/^[[:space:]]\+//g

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

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

八、替換/tmp/functions文件中的/etc/sysconfig/init爲/var/log;

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

九、刪除/tmp/functions文件中因此#開頭,且#後面至少跟了一個空白字符的行的行首#;

%s/^#[[:space:]]\{1,\}+//g

十、查找/var目錄屬主爲root,且屬組爲mail的全部文件;

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

十一、查找/usr目錄下不屬於root、bin或hadoop的全部文件;

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

十二、查找/etc目錄下最近一週內其內容修改過,且屬主不爲root或hadoop的全部文件;

find /etc -mtime -7 -a -not -user root -a -not -user hadoop

1三、查找當前系統上沒有屬主或屬組,且最近一週內曾被訪問過的全部文件;

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

1四、查找/etc目錄下大於20k且類型爲普通文件的全部文件

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

1五、查找/etc目錄下全部用戶都沒有寫權限的文件;

find /etc -not -perm +222

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

find /etc -not -perm -111

1七、查找/etc/init.d目錄下,全部用戶都有執行權限,且其它用戶擁有寫權限的文件

[root@localhost tmp]# find /etc/init.d -perm -111 -a -perm -002

/etc/init.d

1八、讓普通用戶能使用/tmp/cat去查看/etc/shadow文件;

[root@localhost tmp]# cp /bin/cat /tmp

[root@localhost tmp]# ll /tmp/cat

-rwxr-xr-x. 1 root root 48568 9月 8 12:23 /tmp/cat

[root@localhost tmp]# chmod u+s /tmp/cat

[root@localhost tmp]# ll /tmp/cat

-rwsr-xr-x. 1 root root 48568 9月 8 12:23 /tmp/cat

[root@localhost tmp]# /tmp/cat /etc/shadow

root:$6$7eb90RabJRKKBYUR$4HCeO5Yt9xSuSTBKWvkI7YvqbR3aKvl5Pvtq8zQdTLjBjj3TwPQO0DT3oq2dRIAwcKVXZCoB7bKPid0aCHhus/:16666:0:99999:7:::

bin:*:15980:0:99999:7:::

daemon:*:15980:0:99999:7:::

adm:*:15980:0:99999:7:::

lp:*:15980:0:99999:7:::

sync:*:15980:0:99999:7:::

shutdown:*:15980:0:99999:7:::

halt:*:15980:0:99999:7:::

mail:*:15980:0:99999:7:::

uucp:*:15980:0:99999:7:::

operator:*:15980:0:99999:7:::

games:*:15980:0:99999:7:::

gopher:*:15980:0:99999:7:::

ftp:*:15980:0:99999:7:::

nobody:*:15980:0:99999:7:::

dbus:!!:16666::::::

usbmuxd:!!:16666::::::

vcsa:!!:16666::::::

rpc:!!:16666:0:99999:7:::

rtkit:!!:16666::::::

avahi-autoipd:!!:16666::::::

abrt:!!:16666::::::

rpcuser:!!:16666::::::

nfsnobody:!!:16666::::::

haldaemon:!!:16666::::::

gdm:!!:16666::::::

ntp:!!:16666::::::

apache:!!:16666::::::

saslauth:!!:16666::::::

postfix:!!:16666::::::

pulse:!!:16666::::::

sshd:!!:16666::::::

tcpdump:!!:16666::::::

wwg8708:$6$80KZEyBUnTLJh3kW$cLYSqn/gq6DEa0qvVp1eX7/pzbqd2m2yn70363sH6bFn97fFHq9RTh9tCCzBT5jLHvWAp9lOd14JmzjRm53Tv1:16666:0:99999:7:::

wufeng_gg:!!:16673:0:99999:7:::

Oracle:!!:16677:0:99999:7:::

test:!!:16679:0:90:7:::

bash:!!:16684:0:99999:7:::

testbash:!!:16684:0:99999:7:::

busher:!!:16684:0:99999:7:::

nologin:!!:16684:0:99999:7:::

centos:!!:16684:0:99999:7:::

user1:!!:16684:0:99999:7:::

hadoop:!!:16685:0:99999:7:::

1九、建立目錄/test/data,讓某組內普通用戶對其有寫權限,且建立的全部文件的屬組爲目錄所屬的組;此外,每一個用戶僅能刪除本身的文件;

[root@localhost tmp]# mkdir -pv /test/data

mkdir: 已建立目錄 "/test"

mkdir: 已建立目錄 "/test/data"

[root@localhost tmp]# chmod g+ws /test/data

[root@localhost tmp]# ll /test/data

總用量 0

[root@localhost tmp]# ll -d /test/data

drwxrwsr-x. 2 root root 4096 9月 8 13:33 /test/data

相關文章
相關標籤/搜索