20150830 課後練習(vim,find,bash環境變量,磁盤管理)

一、作業(練習)內容:

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

Vim

(1).命令解釋:模式化的編輯器

(2). 有多種不同的模式:

         編輯模式:命令模式

         輸入模式:插入模式

         末行模式:vim有許多內置命令,此模式作爲命令的接口

編輯模式=====輸入模式:

         i:在當前光標所在處,轉換爲輸入模式

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

         a:在當前光標所在處的後方,轉換爲輸入模式

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

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

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

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

編輯模式====>末行模式:“:”     

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

(3).退出vim

  末行模式:

      q! 強制退出,不保存編輯的內容退出

      wq 保存退出

      x 保存退出

      xq! x!  強制保存退出

   編輯模式:

       ZZ 保存退出

(4).編輯命令

    光標移動:

     字符間移動:

        h:光標向左移動

        l:光標向右移動

        k:光標向上移動

        j:光標向下移動

     單詞間移動:

        w:移動到下一個單詞的詞首

        e:移動到下一個單詞的詞尾

        b:當前或者前一個單詞的詞首

        #:一次跳n個單詞

     行首行尾間跳轉:

        0:跳轉至非tab字符上絕對行首

        ^: 跳轉至第一個非空白字符

        $: 跳轉至絕對行尾

     句子間跳轉:

        ):跳轉到下一個句子的句首

        (:跳轉到前一個句子的句首

     段落間移動:

        }: 跳轉到下一個段落

        {: 跳轉到上一個段落

     行間快速移動:

        #G #表示想要跳轉的行數

        G:文章尾部

        1G:文章首部

        末行模式:n 跳轉至n行

    編輯操作:

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

        #x:刪除光標所在處以及向後的#個字符

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

        d:刪除命令:

        dd:刪除光標所在行 #dd:刪除光標所在行以及下行的共#行:

        與跳轉命令一同使用

        d$:刪除光標所在處至行尾的內容; D:相同

        d^:刪除光標所在處至行行首的內容

        dw,de,db:這3個命令支持前面使用#來指明涵蓋的單詞個數

        p:粘貼:

    行級別:

        p:粘貼在光標所在行下方

        P:粘貼在光標所在行上方

        y:複製

        yy:複製光標所在行 Y:複製一整行

        #yy:複製光標所在行以及下行共#行

        d$:複製光標所在處至行尾的內容

        d^:複製光標所在處至行行首的內容

        yw,ye,yb:這3個命令支持前面使用#來指明涵蓋的單詞個數

        c:修改

        cc:刪除光標所在行整行內容,並立即轉爲輸入模式

        #cc:

        c$,C,c^,c0,cw,cb,ce

    撤銷操作:

        u:撤銷

        #u:撤銷#次操作

        取消上一次操作:

    Ctrl+r

        重複前一次命令

(5).可視化模式:

        v:選擇光標所在行光標左側的內容

        V:選擇光標所在行向有右側的內容

(6).編輯模式下的翻屏命令

        Ctrl+f:向文件尾部翻一屏

        Ctrl+b:向文件首部翻一屏

        Ctrl+d:向文件尾部翻半屏

        Ctrl+u:向文件首部翻半屏

(7).文本查找

        /PATTERN

        ?PATTERN

        n:向文本尾部查找

        N:向文本首部查找

(8).文本替換

       末行模式:內置命令接口,有命令歷史記錄功能

        有部分內置命令用於編輯操作,此時可使用地址定界法進行

    地址定界:

        Startline[,endline]

        #:第#行

        .:當前行

        $:最後一行

        %:全文

    相對定界:

        +#:從指定位置向下#個行

        -#:從指定位置向上#個行

    文本替換命令:s

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

        /:分隔符,用於分割“查找的內容”和“替換爲的內容”:此分隔符可使用 其他字符,如@,#等:

        要查找的內容:可使用正則表達式:此部分可以後面“替換爲的內容”部分 中使用“&”全部引用:

        替換爲的內容:不可使用正則表達式,一般爲正常文本,但可以使用正則表

    修飾符:

        i:查找時不區分字符大小寫

        g:global,全局替換;

        (9).多文件模式:

    打開文件:

        vim [OPTION]...[FILE]...

        +#:快速定位至#行

        +/PATTERN 快速定位至被模式第一次匹配至行

    多文件:

        vim FILE1 FILE2 FILE3...

    末行模式:

        :next 下一個

        :prev 上一個

        :last 最後一個

        :first 第一個

    退出所有文件:

        wqall 保存所有並退出

        wall   保存所有

        qall 退出所有

    多窗口:

        -o 水平分割窗口 ctrl+s 水平分割文檔

        -O 垂直分割窗口 ctrl+v 垂直分割文檔

(10).界面特性

    開啓關閉行顯示:

        Set nu

        Set nonu

    開啓語法高亮功能:

        synatx (on|off)

    開啓搜索高亮功能:

        set hlsearch

         set nohlsearch

    開啓自動縮進功能:

        set autoindent:set ai

        set noautoindent: set noai

    字符大小寫是否區分功能:

        set ignorecase: set ic

        Set noignorecase: set noic

(11).配置文件

    全局:/etc/vimrc

    個人:~/.vimrc


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

find

(1).命令解釋:

通過遍歷指定的目標目錄,實施查找符合條件指定屬性的文件

(2)命令語法:

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

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

        查找條件:默認爲指定路徑下的所有文件

        處理動作:默認爲打印至屏幕

        查找條件:


-name: “文件名”:文件名支持使用globbing

wpsF037.tmp


-iname: “文件名”不區分大小寫

wpsF038.tmp


-user:根據屬主查找

wpsF039.tmp


-group:根據屬組查找

wpsF03A.tmp


-uid:根據uid號來查找

wpsF03B.tmp


-gid:根據gid號來查找

wpsF04C.tmp


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

wpsF04D.tmp


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

wpsF04E.tmp


組合查找:

與 -a (找出/tmp目錄下屬主有寫權限,並且是root的文件:

wpsF04F.tmp


或 -o (找出/tmp目錄下名字包含123的文件,或者uid是600的文件

wpsF050.tmp


非 -not (找出/tmp目錄下既不屬於root用戶,並且也不屬於hzm用戶的文件

wpsF051.tmp


非A或非B = 非(A且B)

非A 且非B = 非(A或B)


查找條件:

    根據類型查找:

        -type:

        f:普通文件

        d:目錄文件

        l:符號連接

        b:塊設備

        c:字符設備文件

        p:命名管道文件

        s:套接字文件

wpsF061.tmp


根據文件大小查找:

       -size:+|-

         常用單位有:k,M,G

           #:#-1< x <= #  實例:2k: 結果:1.8k ,1.9k ,1.1k都符合

           +: x > #        實例:+2k:結果:2.1k,3.1k都符合 2k不符合

           -: x <= #-1      實例:-2k:結果:1k,0.9k都符合

根據時間查找:

    以“天”爲單位:

        -atime:[+|-] :訪問時間:

        #:#- < x < #+1    表示#+1天的時間段被訪問過的文件  

        -#:x < #          表示#天之內的被訪問過的文件

        +#: x >= #+1      表示#+1天之外被訪問過的文件

        -mtime:  [+|-] :修改時間

        -ctime:  [+|-] :改變時間


以“分鐘”爲單位:

        -amin:[+|-]

        -mmin: [+|-]

        -cmin: [+|-]

wpsF062.tmp


實例:查找/tmp下5分鐘以內被訪問過的文件:

wpsF063.tmp


    以“權限”爲單位:

        -perm:[+|-]mode

        mode::精確匹配

        +mode:滿足任何一類用戶的任何以爲權限即可  +或關係

        -mode:每類用戶的任何一位都需匹配        -且關係

        所有都沒有 相反:至少有一個有

        所有都有  相反:至少有一個沒有


實例:查找/tmp下包含666權限的文件,或者是精確匹配666的文件

wpsF064.tmp



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

總結Bash變量的類型:

    本地變量:只對當前shell進程有效的變量,對其他shell進程無效,包括當前shell進程的子進程。             VAR_NAME=VALUE

        變量賦值:向變量的存儲空間保存數據

        變量引用:${VAR_NAME}

        “”:弱引用,裏面的變量會被替換

        ‘’:強引用,裏面的所有祖父都是字面量,直接輸出

    環境變量:對當前shell進程及其子shell有效,對其他shell進程無效。

        定義環境變量: export VAR_NAME=VALUE

        導出:      export VAR_NAME

    撤銷變量:unset VAR_NAME

    局部變量:對shell腳本中某代碼片段有效,通常用於函數本地:

        Loacl export VAR_NAME=VALUE

    位置變量:$1,$2,....${10}

    特殊變量:$?

    查看當前shell進程中的所有變量:set

    查看當前shell進程中的所有環境變量:export,printenv,env

變量命名規則:

    1.不能使用程序中的關鍵字(保留字) if,case,for

    2.只能使用數字,字母和下劃線,且不能以數字開頭

    3.要見名之意

變量類型:

    數值型:

    精確數值:整數

    近似數值:浮點型

    單精度浮點

    雙精度浮點

字符型:

    char

    string

布爾型:

    ture,false

類型轉換:

    顯式轉換

    隱式轉換


bash是弱類型的語言,一切皆字符

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

    Profile類:爲交互式登陸的用戶提供配置:

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

        個人配置: ~/.bash_profile

        功用:1.設定環境變量

           2.運行命令或腳本

    bashrc類:爲非交互式登陸的用戶提供配置:

        全局配置: /etc/bashrc

        個人配置: ~/.bashrc

        功用:1.設定本地變量

           2.定義本地別名


    登錄類型:

        交互式:直接通過終端輸入賬號和密碼登陸

            使用su -l username 或 su - username

        非交互式:su username

            圖形界面下打開的終端


交互登錄用戶:

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

非交互式登陸用戶:

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


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

特殊權限:suid

展示於文件屬主的執行權限位

如果屬主本來有執行權限,顯示爲s,否則爲S;

功能:對一個可執行文件來講,任何用戶運行此程序爲進程時,進程的屬主不在是發起者本人,而是可執行程序文件自己的屬主。

管理文件suid權限的方法:

Chmod u+|-s FILE


特殊權限:sgid

展示文件屬組的執行權限爲;

如果屬主本來有執行權限,則展示爲s,否則爲S;

功能:當目錄的屬組有寫權限,且有sgid權限時,那麼所有屬於次此目錄的屬組,且以屬組身份在此目錄文件或目錄時,新文件或目錄的屬組不是創建者所屬的基本組,而是目錄自己的屬組;

Chmod g+|-s


特殊權限:stick

展示於目錄其他用戶的執行權限位

如果其他用戶本來有執行權限,則展示爲t,否則,展示位T

功能:對於全局可寫,或某組全局可寫目錄,所有用戶都於此目錄創建文件或刪除自己爲屬主的那些文件,但不能刪除非自己爲屬主文件或目錄:

Chmod o+|-t



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

磁盤設備文件:

IDE接口:並行,133MB/s /dev/hda,/dev/hdb

Scsi接口:並行,320MB/s

SATA接口:串行,6Gpbs

Usb接口:串行,480MB/s

SAS接口:串行

設備文件:/dev/sd[a-z][#]


鏈接文件:訪問同一個文件數據,不同路徑

硬鏈接:兩個文件路徑指向了同一個inode。

創建方法:cp -l SRC DEST

  ln SRC DEST

特性: 1)目錄不支持硬鏈接;

    2)鏈接不能跨文件系統;

     3)硬鏈接文件與源文件是指向同一個inode,創建硬鏈接文件只會增加 

    inode計數;刪除硬鏈接只會減少一次;


符號連接:鏈接文件是一個完全獨立的新文件,但其指向了原文件的訪問路徑;

創建方法:ln -s SRC DEST

特性:(1)符號鏈接文件與原文件是兩個各自獨立的文件;

  (2)目錄可以創建符號鏈接;

  (3)可以跨文件系統;

  (4)刪除鏈接不影響原文件,但刪除原文件,符號鏈接指向的路徑不存在,因此,此時鏈接文件變成錯誤鏈接;其大小不是真正原文件大小,而是指向的原文件的文件路徑字符串所包含的字節數;



磁盤設備:

MBR:用來存放當前分區表 。(主引導扇區)

446bytes:bootloader

64bytes:分區表

16bytes:標記一個分區:4個主分區:3主分區,1個擴展分區

2bytes:55AA,當前MBR信息是否有效的標記

VFS:virtual file system

    Linux文件系統:ext2,ext3,ext4,xfs,btrfs

    日誌文件系統:加速文件檢測並修復過程

    光盤文件系統:iso9660

    網絡文件系統:nfs,cifs

    集羣文件系統:gfs2,ocfs2

    分佈式文件系統:ceph

    Windows文件系統:ntfs,vfat

    僞文件系統:tmpfs


Swap:虛擬文件系統

    創建文件系統:

    文件系統:

元數據:每個索引項稱一個inode

根在內核中,其需要被關聯制根文件系統,即rootfs


創建分區:

fdisk命令:查看已經識別的磁盤設備

    P:顯示當前分區表

    N:創建一個分區

    W:保存退出

    L:查看支持的分區ID:

    D:刪除現有分區

    T:修改分區ID

    Q:不保存退出

    M:顯示幫助信息


分區流程:fdisk /dev/sd* ---> n新建 ---> (e擴展)|(p主分區) --->柱面或者分區大小 --->P 查看是否成功 ---> cat /proc/partitions 查看內核是否識別 --->如果未識別讓內核強制讀取分區表(partx -a /dev/sd*)


文件系統管理工具:

創建文件系統:

mkfs.ext2 mkfs.ext3 mkfs.ext4,mkfs.xfs

檢測文件系統:

fsck.ext2,fsck.ext3,fsck.ext4,fsck.xfs

查看其屬性:

dumpe2fs,tune2fs

創建文件系統:

mkfs.FSTYPE /dev/DEVICE

blkid /dev/DEVICE

ext系列:

    mke2fs

    mke2fs:mke2fs[OPTION].../dev/DEVICE

        -t :[ext2|ext3|ext4]:要創建的文件系統類型;

        -b :[1024|2048|4096]:上限由page fram決定;

        -L: label:卷標;

        -j: 相當於 -t ext3 將文件系統格式化爲日誌文件系統;

          mkfs.ext3 = mkfs -t ext3 = mke2fs -t ext3

        -i#:指定inode與字節的比率;沒多少個字節給創建一個inode;

        -N#:直接知名給此文件系統創建多少個inode;

        -m#:指定預留空間的百分比,默認爲5;

        -O :指明額外選項

        UUID:全局唯一標識符

e2label /dev/DEVICE:修改卷標


tune2fs:查看或者修改ext系列文件系統某些屬性

    tune2fs -l /dev/DEVICE

        修改指定文件屬性:

        -L:修改卷標

        -m#:調整預留空間百分比

        -O[^]FEATURE:開啓或關閉某種特性

        -o[^]mount_options:開啓或關閉某種屬性

            -o acl

            -o ^acl


dumpefs:顯示ext系列文件系統屬性信息

    dumpe2fs [-h] /dev/DEVICE


文件系統檢測:

因進程意外終止或系統崩潰等原因導致寫入操作非正常終止時,可能會導致文件損壞,此時應該修復系統。

    fsck:

       -t:fsck -t ext4 /dev/sdb1

        -a:自動修復所有錯誤

        -r:交互式修復錯誤

        ext系列文件系統的專用工具

    e2fsck:

        -y:對所有問題自動修復yes;

        -f:強制檢測

Windows無法識別linux上專用的文件系統,因此,有存儲設備需要兩種系統之間交叉使用,應該使用Windows文件系統。


swap文件系統:

    Linux上 創建交換分區必須使用獨立的磁盤分區

        fdisk /dev/DEVICE

        t命令調整id:82


創建交換分區系統:mkswap

mkswap[-L] /dev/DEVICE


文件系統掛載

    Linux系統上,所有文件系統必須通過根文件系統的某個分區來訪問;

    其餘所有的其他文件系統如果想要被訪問,都只能通過關聯至根文件系統上的某個目錄來實現;

    mount:mount DEVICE MOUNT_POINT

    mount[option]...[-t fstype][-o option] device mount_point

        -r:只讀掛載

        -w:讀寫掛載

        -t:fstype 被掛載的設備上的文件系統類型:可省略 此時mount會自動使用blkid來判斷

        -L:以卷標的方式指定要掛載的設備,因此,DEVICE可省

        -U:以UUID的方式指定要掛載的設備,因此,DEVICE可省

        -n:默認情況下,設備掛載與否的改變結果會被保存於/etc/mtab中,-n選項用於變動時不更新此文件。

        -o:option 掛載選項

        async:異步寫入

        sync:同步寫入

        atmin/noatime:文件或目錄在被訪問時是更新訪問時間戳

        diratime/nodiratime:文件或目錄在被訪問時是更新訪問時間戳

        auto/noauto:設備是否支持mount-a選相時是否自動掛載

        dev/nodev:此設備上是否創建設備文件

        exec/noexec:是否允許執行此文件系統上的程序文件

        suid/nosuid:是否支持此設備上的文件使用suid權限

        remount:重新掛載

        acl:mount -o or tune2fs -o acl /dev/device

        ro:只讀

        rw:讀寫

        user/nouser:是否允許普通掛載此文件系統

        defaults

mount -a 自動讀取fstab中每一個支持自動掛載的文件系統並把其掛載至每一個掛載目錄下。


另外一個技巧:

將某目錄綁定到指定目錄下,作爲臨時訪問入口

mount --bind 源目錄 目標目錄


查看所有已經掛載設備的方法

    #mount

    #cat /etc/mtab

    #cat /proc/mounts

        掛載點

        1.事先存在

        2.使用別的進程未使用的目錄

        umont MOUNT_POINT


某進程訪問的設備不能卸載,查看方法:

lsof 掛載目錄

fuser -v:掛載目錄

  -k: fuser -km 掛載目錄:強制殺掉訪問掛載目錄的進程


df:用來檢查linux服務器的文件系統的磁盤空間佔用情況

[OPTINE]...[FILE]

    -l:僅顯示本地文件系統的相關係統

    -h:單位換算

    -i:顯示indoe的使用情況


du:用於評估文件大小

    -s:統計整個目錄以及內部所有文件總體大小

    -h:單位換算

    du -sh/*


free:查看內存使用狀況

    -m

    -g


交換分區:創建交換分區:mkswap

swapon -a 啓用/etc/fstab文件中定義的所有交換分區

    啓用:swapon /dev/sd*

    禁用:swapoff /dev/sd*


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

定義開機自動掛載的文件系統;

wpsF075.tmp

第一列:掛載設備:設備文件,卷標,uuid,僞文件系統

第二列:掛載點:swap掛載點仍爲swap

第三列:文件系統類型

第四列:掛在選項:defaults表示默認掛載選項,多個掛載選項用,分割。比如defaults,acl,noatime

第五列:轉儲頻率:0:從不備份,1:每天備份,2:每隔一天備份

第六列:自檢次序:0:不自檢,1:首先自檢,只有根文件系統可首先自檢,2:次級自檢。




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

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

wpsF086.tmp

wpsF087.tmp


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

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

wpsF097.tmp

wpsF0A8.tmp


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

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

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

wpsF0A9.tmp

wpsF0AA.tmp


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

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

wpsF0BA.tmp

wpsF0BB.tmp


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

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

wpsF0BC.tmp


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

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

Find /usr -not \( -user root -o -user bin -o -user hadoop \)

wpsF0BD.tmp


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

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

wpsF0CE.tmp


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

find / -not \( -nouser -a -nogroup \) -a -atime -7

wpsF0CF.tmp


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

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

wpsF0D0.tmp


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

find /etc -not -perm +222

wpsF0E1.tmp


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

find /etc -not -perm -111

wpsF0E2.tmp


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

find /etc/init.d -perm -113

wpsF0E3.tmp


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

(1)當前用戶爲hzm查看/etc/shadow文件沒有權限,無法訪問。

wpsF0E4.tmp


(2)切換到root賬戶下將cat程序給予s權限;

chmod u+s /bin/cat

wpsF0F4.tmp


(3)在切換回hzm賬戶來訪問/etc/shadow文件就不受限制了;

wpsF0F5.tmp


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

1)新建hzm和gley兩個用戶,附加組都爲testgroup,並且創建/test/data目錄也加入到testgroup組中;

useradd -a -G testgroup hzm

useradd -a -G testgroup gley

mkdir /test/data

chown :testgroup /test/data

wpsF0F6.tmp


(2)登陸hzm用戶,在/test/data目錄下創建一個hzm.txt文件,登陸gley用戶,在/test/data目錄下創建一個gley.test文件

hzm:touch hzm.txt /test/data

gley:touch gley.txt /test/data

wpsF0F8.tmp


(3)然後給於該目錄gid權限後,在切換兩個用戶各自創建.word文件,這樣就能看到.word創建的文件所屬組都是testgroup組。

chmod g+s /test/data

hzm:touch hzm.word /test/data

gley:touch gley.word /test/data

wpsF109.tmp


(4)然後在給與改目錄sticky權限,這樣用戶只能刪除自己創建的所屬文件;

chmod o+t /test/data

wpsF10A.tmp

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