歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux學習日志(三)

Linux學習日志(三)

日期:2017/3/1 12:04:41   编辑:關於Linux

權限管理

   owner,group,other
         屬主,屬組,其他

權限:

    read write execute
      r   w    x
    用戶的不擁有某位權限,則使用-占位
    r-x:讀和執行的權限
    r--:只讀權限
    rw-:讀寫權限
    使用8位數來表示
    r:4
    w:2
    x:1

文件:

  r:可以使用內容查看類的命令來顯示其相關內容
  w: 可以使用編輯器修改其內容
  x:可以將其發起一個進程

目錄:

  r:可以使用ls命令查看目錄內容的文件信息
  w:可以創建、刪除文件
  x:可以使用ls -l命令來查看目錄內容的文件信息,並且可以使用cd命令切換此目錄為工作目錄:

修改文件的屬主和屬組 :僅管理員可執行,chown,chgrp

chmod命令

操作三類用戶的權限:使用8進制形式
    chmod OCTAL -MODE file ...
            u:屬主
            g:屬組
            o:其他
            a:所有
            =:操作指定類型用戶的權限
            +/—:操作置頂類型用戶的單個權限
            參照其他文件的權限為當前文件來賦權
                chmod --reference=參照文件名 文件名
操作指定類別用戶的權限:使用u,g,o,a來賦權,基於=或+/-來進行  
參照其他文件的權限當文件賦權限

umask

 創建文件:666-umask
        文件默認決不允許出現執行權限:
 創建目錄:777-umask
 root:022
 如果用戶名和基本組名一致:002,否則為022   

修改文件的屬主或屬組:chown,chgrp

chown [option] UserName [{:|.} GroupName] file ...      
     -R : 遞歸
     -- reference

權限應用模型:

  1.進程的屬主,是否與文件的屬主相同,如果相同,進程則以文件屬主的權限來訪問文件,否則,進程的屬主所屬的組,是否其中之一與文件的屬組相同,如果相同,進程則以文件屬組的權限來訪問文件;否則,進程則以文件的其他用戶的權限來訪問文件

  2.總結權限管理:chmod chown chgrp umask

練習

1.新建一個用戶openstacl ,但不給其創建家目錄,創建完成後使用su命令切換至此目錄,查看其命令提示符及PATH和HOME兩個環境變量的值

         useradd -M openstack
         su -openstack
         echo $PATH $HOME

2.復制/etc/skel目錄為/home/openstack

          cp -r /etc/skel /home/openstack

改變/home/openstack 及其 內部文件的屬主屬組均為openstack;

    chown -R openstack.openstack /home/openstack 

4./home/openstack及其內部的文件,屬組合其他用戶沒有任何訪問權限

chmod -R go=--- /home/openstack
su - openstack
echo $PATH $HOME 

新建系統組MySQL,新建系統用戶MySQL ,屬於MYSQL組,要求沒有家目錄且shell 為/sbin/nologin;

    groupadd -r mysql
    useradd -r -s /sbin/nologin -g mysql mysql 

新建GID為600的組doyle,新建用戶gentoo ,要求家目錄為/users/gentoo,密碼同用戶名字

      groupadd -g 600 doyle
      mkdir /users
      useradd -d /users/gentoo gentoo
      passwd gentooo

新建用戶centos,其家目錄為/users/centos,密碼同用戶名字

useradd -d /users/centos centos;
passwd centos;

新建用戶www,其家目錄為/users/www,刪除www用戶,但保留其家目錄

useradd -d /users/www www;
userdel www

用戶gentoo和centos均為doyle為其附加組

   usermod -a -G doyle gentoo
   usermod -a -G doyle centos

bash介紹

shell:人機交互界面,
bash: 命令解釋器,解析器

bash特性之六:

 快捷鍵
     Ctrl+a:跳至命令行首
     Ctrl+e:跳至命令行尾
     Ctrl+u:刪除命令行首至當前光標所在處的內容
     Ctrl+k:刪除當前光標所在處至命令行尾的內容
     Ctrl+l:清屏,相當於clear命令
     Ctrl+c:終止或者取消命令
     Ctrl+z:將當前命令送至後台(fg調回命令)

bash特性之七:補全功能

命令補全:在PATH中搜索補全

    shell命令:內部,外部
         外部:在系統某路經下有一個可執行程序
    PATH,一組以冒號分隔的路徑

路徑補全:在給出的打頭路徑下補全,如果沒有打頭路徑,則為當前目錄

       使用tab補全

bash特性之八:

 提供編程環境
     支持使用變量
     支持程序控制

#!/bin/bash被稱為shebang

練習

1.創建一個組newgroup,id號為4000

2.創建一個用戶doyle ,id 號為3001 ,附加組為newgroup;
3.創建目錄/tmpj/hellodirxyz
4.復制/etc/fstab至上面的目錄中
5.改變目錄及內部文件的屬主和屬組為doyle
6.讓目錄及內部文件的其他用戶沒有任何權限

bash的特性之九:bash中的變量

弱類型語言變量:

   1.不強制區分變量的類型,無論存儲何種數據,均已字符格式進行
   2.無須事先聲明:用到時,直接使用,直接賦值
   bash:動態編程語言,是弱類型語言

變量的類型:
本地變量:只對當前shell進程有效,對其子shell以及其他shell都無效

    定義變量: [set]Var_Name="Value"

    引用變量: ${Var_Name}

    撤銷變量:unset Var_Name

局部變量:只對某一部分有效

    定義變量:local Var_Name="Value"

環境變量:對其shell進程及其子shell有效:

      定義:export Var_Name="var name"
      注意不要和當前環境的環境變量沖突 

位置變量:

       $1,......$n

特殊變量

      $0:腳本名稱自身
        $?:上一條命令的執行狀態
            狀態用數字表示:0-255
            0:表示成功
                1-255:失敗,1.2.127.255預留
        $$ 
        $!
        $#
        $*

變量的命名要求:

   只能使用數字,字母,和下劃線組成
   不能以數字開頭
   不能使用程序中的關鍵字
   見名知義

不帶任何參數的set,顯示當前系統的所有變量
環境變量:用來定義bash的工作特性,用來保存當前會話的屬性信息
顯示所有環境變量:export ,env ,printenv

bash的配置文件:持久保存用戶配置

profile類:為交互式登錄的用戶提供配置

         /etc/profile 全局
         /etc/profile.d/*.sh 全局
         ~/.bash_profile 個人配置,僅對當前用戶有效

  功能:
   設定環境變量
   運行命令或者腳本

bashrc 類:非交互工登錄用戶提供配置

       /etc/bashrc:全局
       ~/.bashrc:個人配置

 功能:
   設定本地變量
   定義命令別名

登陸類型:

    交互式登錄:直接通過終端輸入用戶信息登陸系統
     su - UserName或su -l UserName:
    如何讀取配置文件
    /etc/profile -->/etc/profile.d/*.sh -->~/.bash_profile-->~/.bashrc -->/etc/bashrc

    非交互式登錄:
            su UseName
             圖形界面下的終端
             執行腳本的時候,先設置配置文件
        如何讀取配置文件
        ~/.bashrc -->/etc/bashrc -->/etc/profile.d/*.sh

通知shell重讀系統文件

     source(.) 重讀配置文件

bash腳本:面向過程的編程中

 順序執行:默認法則,逐條執行各命令
 選擇執行:分支,條件判斷,符合條件的分支予以執行
 循環執行:將同一段代買反復執行有限次,所以,循環必須有退出條件,否則將陷入死循環     

循環控制語句

for循環

      for var_Name in 列表; do
          循環體(正常執行的執行命令)
          語句1
          語句2
          語句3
          ...
      done

bash -n 腳本文件 檢查腳本文件語法是否錯誤

       while
       until

列表的生成方法:

    生成數字列表{start..end}、seq[start][stop]
      seq 起始數字、步長,結束數字

for:通過使用一個變量去遍歷給定列表中的每個元素。在每次變量賦值時執行一次循環體,直至賦值完成所有元素退出循環

總結:生成列表方式
   1.直接給出列表
   2.使用文件名通配的機制生成列表
   3.可以使用{}或seq命令生成數字序列
   4.使用命令生成  

文本處理類的命令

wc

   wc[option][file]...
     -l:統計行數
     -c:統計字節數
     -w:統計單詞數    

tr 轉換字符或刪除字符

tr ‘集合1’ ’集合2‘
tr -d ’字符集合‘

cut:根據制定的分隔符切片,並顯示出需要顯示的片

cut 選項 參數

-d字符:指定分隔符
-f數字:指定要顯示的字段
   單個數字:一個字段
   多個離散字段:逗號分隔
   多個連續字段:-分隔

sort:按字符進行比較

sort[options] file

-f:忽略大小寫
-n:對數字進行排序
-t:指定分隔符
-k 數字:指定分隔後進行比較字段
-u:重復的行,只顯示一行
uniq:移除重復的行
-c:統計每一行出現的次數(靠著的行)
-d:僅顯示出現最少兩次的行
-u:僅顯示不重復的行

練習

(1) 切換指centos用戶,定義本地變量FirstVar ,其值為“test variable”

    su -centos
    FirstVar="test variable"

(2) 另一個終端,使用gentoo用戶查看FirsVar變量的值,如果沒有值,為什麼?

     只對當前shell進程有效,對其子shell以及其他shell都無效

(3) 聲明一個變量CurTime,其值為當前系統

       curTime=`date +%T`

(4) 使用echo命令顯示“the current time is:” is 後跟上curtime變量的值

    echo "the current time is: $curTime"

(5) 回至centos用戶的終端,復制/etc/pam.d目錄至/tmp目錄中,並重命令為test;

         cp -r /etc/pam.d/ /tmp/test

(6) 聲明變量fileName,其值為剛才復制的目錄/tmp/test

      fileName="/tmp/test"

(7) 修改變量filename所表示的目錄及其內部所有文件的其他用戶均沒有任何訪問權限;

        chmod -R o=$fileName

(8) centos用戶是否可以修改變量filename所表示的目錄的屬主和屬組? 如果能,將其改變gentoo用戶和gentoo組;如果不能,則使用root用戶修改

腳本練習

練習一: 寫一個腳本,用file命令顯示/var/log目錄下每個文件的內容類型;
提示:列表生產的方法為/var/log/*

練習二:寫一個腳本
1.創建一個/tmp/scripttest目錄,用變量保存目錄名‘
2. 在目錄裡創建測試文件tfile1-tfile20
3. 創建用戶testuser1和testuser2;
4. 將tfile1-ftile10的屬主和屬組改為testuser1;
5. 將tfile1-tfile20的屬主和屬組改為testuser2

Copyright © Linux教程網 All Rights Reserved