vi,find,bash,磁盤管理,chmod

作業(練習)內容:

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

Vim :全屏編輯器,模式化編輯器

        Vim模式:

                編輯模式(命令模式)

                輸入模式

                末行模式

    模式轉換:

    編輯--à輸入:

        i:在當前光標所在字符的前面,轉爲輸入模式;

        a:在當前光標所在字符的後面,轉爲輸入模式;

        o:在當前光標所在的下方,新建一行,並轉爲輸入模式;

        I:在當前光標所在行的行首,轉換爲輸入模式

        A:在當前光標所在行的行尾,轉換爲輸入模式

        O:在當前光標所在行的上方,新建一行,並轉爲輸入模式:

打開文件

#vi /tmp/grub2.cfg

    Vi +#:打開文件,並定位於第#行

    Vi + :打開文件,定位至最後一行

    Vi +/PSTTERN: 打開文件,定位至第一次被PATTERN匹配到的行的行首

默認處於編輯模式

    關閉文件

末行模式關閉文件

:q 不保存退出

:wq 保存退出

:q! 強制不保存退出

:w 保存

:w! 強行保存

:wq --à:x

    2編輯模式下退出

        zz:保存並退出

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:全局替換

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

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

 

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

find命令:實時查找;查找速度略慢;精確查找;

        find [OPTION]... [查找路徑] [查找條件] [處理動作]

            查找路徑:默認爲當前路徑;

查找條件:指定的查找標準,可以根據文件名、大小、屬主屬組、類型等進行;默認爲找出指定路徑下的所有文件;

            處理動作:對符合條件的文件做什麼操作;默認爲輸出至屏幕;

        查找條件:

            根據文件名進行查找:

                 -name "文件名稱": 支持使用glob;

                    *, ?,[]

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

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

            根據屬主、屬組查找:

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

                -group GROUPNAME:

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

                -gid GroupID:

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

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

            根據文件類型進行查找:

                -typeTYPE

                    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)的任何一位權限符合條件即可;隱含或條件;

                        /400

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

 

        處理動作:

            -print: 默認處理動作

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

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

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

 

            -okCOMMAND {} \;

                對每個文件執行指定的命令之前需要用戶事先確認;

            -execCOMMAND {} \;

                無需用戶確認;

2、總結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

    定義環境變量:

        exportname=value

        declare -xname=value

        查看:env, printenv, export

    撤消變量:

        unset name

    引用變量:

        ${name},$name

    bash中的引用符號:

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

        "":弱引用

        ``: 命令引用

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

SUID

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

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

        權限設定:

            chmodu+s FILE...

            chmodu-s FILE...

        注意:

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

            S: 屬主原本無x權限;

SGID

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

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

        權限設定:

            chmodg+s FILE...

            chmodg-s FILE...

Sticky:

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

        權限設定

            chmodo+t FILE...

            chmodo-t FILE...

權限模型:

        u, g, o

            r, w, x

    進程的安全上下文:

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

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

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

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

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

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

            (c) 則應用其它權限;

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

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

    分區工具:

        fdisk,parted, sfdisk

    fdisk工具的使用:

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

        分區管理子命令:

            p: 顯示

            n: 創建

            d: 刪除

            t: 修改分區ID

            l: 列出所有支持ID類型

            w: 保存退出

            q: 放棄修改並退出

            m: 獲取幫助

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

            # cat/proc/partitions

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

                CentOS5: partprobe [DEVICE]

                CentOS6,7:

                    partx

                    kpartx

                partx命令:

                    partxDEVICE

                    partx-a DEVICE

                    partx-a -n M:N DEVICE

                        M

                        M:

                        :N

                kpartx命令:

                    kpartx-af DEVICE

    Linux文件系統管理:

    mkfs, mkfs -ttype = mkfs.type

    ext:mke2fs

    創建文件系統:

        mke2fs[OPTION]... DEVICE

            -t  {ext2|ext3|ext4}

            -b{1024|2048|4096}

            -L'LABEL'

            -j:mke2fs -t ext3

            -i #

            -N #

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

            -OFEATURE[,...]

                -O^FEATURE:關閉此特性

                has_journal

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

        e2label

        e2lableDEVICE [LABEL]

        tune2fs

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

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

            -L'LABEL':修改卷標;

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

            -j: ext2--> ext3

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

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

        dumpe2fs

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

    文件系統檢測:

        fsck:Filesystem check

            fsck -ttype

            fsck.type

                -a: 自動修復錯誤

                -r: 交互式修復錯誤

                -f: 強制檢測

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

            -y: 自動回答爲“yes”

            -f:force

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

[root@localhost~]# cp -p /etc/grub2.cfg /tmp/
[root@localhost~]# ls /tmp/
grub2.cfg
[root@localhost~]# vi /tmp/grub2.cfg
:%s/^\s*//g或者:%s/^[[:space:]]//g  在左下角命令模式


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

[root@localhost~]# cp /etc/rc.d/init.d/functions /tmp/
[root@localhost~]# vi /tmp/functions


:%s/^\s/#&/g或者:%s/^[[:space:]]/#&/g   在左下角命令模式

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

[root@localhost~]# vi /tmp/functions
:%s/\/etc\/sysconfig\/init/\var\/log/g


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

[root@localhost~]# vi /tmp/functions
:%s/^#\(\s\+\)/\1/g


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

[root@localhost~]# find /var -user root -group mail -ls
134295027    0 drwxrwxr-x   2 root    mail            6 Jun 10  2014 /var/spool/mail
[root@localhost~]#


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

[root@localhost~]# find /usr ! -user root ! -user bin ! -user hadoop -ls
find: ‘hadoop’is not the name of a known user
[root@localhost~]# useradd hadoop
[root@localhost~]# find /usr ! -user root ! -user bin ! -user hadoop -ls
--------------這裏可能需要等待幾秒中,不要以爲卡在這裏---------
200304    0 drwx------   2 polkitd root            6 Jun 10  2014 /usr/share/polkit-1/rules.d


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

[root@localhost~]# find /etc -mtime -7 ! -user hadoop -ls
67108993   12 drwxr-xr-x  74 root    root         8192 Sep  2 08:23 /etc
431625    4 -rw-r--r--   1 root    root           14 Sep  2 04:36 /etc/tuned/active_profile
67985872    4 -rw-r--r--   1 root    root          470 Sep  2 08:23 /etc/group
67985873    4 ----------   1 root    root          371 Sep 2 08:23 /etc/gshadow
67985868    4 -rw-r--r--   1 root    root          995 Sep  2 08:23 /etc/passwd
67985871    4 ----------   1 root    root          643 Sep  2 08:23 /etc/shadow
67109049    4 drwxr-xr-x   6 root    root         4096 Sep  2 04:36 /etc/sysconfig
134732599    4 drwxr-xr-x   2 root    root         4096 Sep  2 04:36 /etc/sysconfig/network-scripts
135058400    4 -rw-r--r--   1 root    root          352 Aug 28 05:38/etc/sysconfig/network-scripts/ifcfg-eno16777736
67427376    4 -rw-r--r--   1 root    root          952 Sep  2 08:18 /etc/passwd-
67109038    4 ----------   1 root    root          614 Sep  2 08:18 /etc/shadow-
67311285    4 -rw-r--r--   1 root    root          455 Sep  2 08:18 /etc/group-
67109030    4 ----------   1 root    root          360 Sep  2 08:18 /etc/gshadow-
[root@localhost~]#


[root@localhost~]# find /etc -mtime -7 ! -user hadoop ! -user root -ls
[root@localhost~]#   ----這裏如果把root也除外什麼都沒有了,但是可以修改屬主吖
[root@localhost~]# cp -p /etc/group- /etc/group1
[root@localhost~]# find /etc -mtime -7 ! -user hadoop ! -user root -ls
[root@localhost~]# chown bin: /etc/group1
[root@localhost~]# find /etc -mtime -7 ! -user hadoop ! -user root -ls
67985874    4 -rw-r--r--   1 bin     bin           455 Sep  2 08:18 /etc/group1
[root@localhost~]#


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

[root@localhost ~]# find /-nouser -mtime -7


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

[root@localhost ~]# find /etc -type f-size +20k -ls
[root@localhost ~]# find /etc-size +20k -type f -ls


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

[root@localhost ~]# find /etc ! =perm+222 -ls
[root@localhost ~]# find /etc-not -perm +222


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

[root@localhost~]# find /etc ! -perm -111 -ls
[root@localhost~]# find /etc -not -perm -222 -ls


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

[root@localhost~]# find /etc/init.d -perm -113 -ls
67208865    0 lrwxrwxrwx   1 root    root           11 Aug 21 04:01/etc/init.d -> rc.d/init.d


 

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

[root@localhost~]# which cat
/usr/bin/cat
[root@localhost~]# cp /bin/cat /tmp
[root@localhost~]# ls -l /tmp/
total 76
-rwxr-xr-x. 1root root 54048 Sep  2 09:01 cat
-rw-r--r--. 1root root 13430 Sep  2 07:45 functions
-rw-r--r--. 1root root  3976 Aug 21 04:12 grub2.cfg
[root@localhost~]# chmod u+s /tmp/cat 
[root@localhost~]# ls -l /tmp/
total 76
-rwsr-xr-x. 1root root 54048 Sep  2 09:01 cat
-rw-r--r--. 1root root 13430 Sep  2 07:45 functions
-rw-r--r--. 1root root  3976 Aug 21 04:12 grub2.cfg
[root@localhost~]# chmod u-s /tmp/cat 
[root@localhost~]# ls -l /tmp/
total 76
-rwxr-xr-x. 1root root 54048 Sep  2 09:01 cat
-rw-r--r--. 1root root 13430 Sep  2 07:45 functions
-rw-r--r--. 1root root  3976 Aug 21 04:12 grub2.cfg
[root@localhost~]# chmod 4755 /tmp/cat 
[root@localhost~]# ls -l /tmp/
total 76
-rwsr-xr-x. 1root root 54048 Sep  2 09:01 cat
-rw-r--r--. 1root root 13430 Sep  2 07:45 functions
-rw-r--r--. 1root root  3976 Aug 21 04:12 grub2.cfg
[root@localhost~]#


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

[root@localhost~]# mkdir -p /test/data
[root@localhost~]# groupadd only
[root@localhost~]# chown :only /test/data/
[root@localhost~]# ls -l /test/
total 0
drwxr-xr-x. 2root only 6 Sep  2 09:14 data
[root@localhost~]# chmod o+t /test/data/
[root@localhost~]# ls -l /test/
total 0
drwxr-xr-t. 2root only 6 Sep  2 09:14 data
[root@localhost~]# useradd -G only user1



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