Linux常用操作练习

第一课

练习
1、创建用户mandriva,其ID为2200,基本组为distro,组ID为3300,附加组为peguin;
# groupadd -g 3300 distro
# groupadd peguin
# useradd -u 2200 -g distro -G peguin mandriva
2、创建用户gentoo,其全名"Gentoo",默认shell为/bin/tcsh
# useradd -u 'Gentoo' -s /bin/tcsh gentoo
3、修改mandriva的UID为4400,基本组为linux,附加组为distro和gentoo
# usemod -u 4400 -g linux -a -G distro,gentoo mandriva
4、给gentoo添加密码,并设定其密码最短使用期限为2天,最长为60天,警告为3天,非活动期限为7天。
# echo 'gentoo' | passwd --stin gentoo
# chage -m 2 -M 60 -w 3 -i 7 gentoo

linux权限
安全模型:
文件权限:r,w,x
目录权限:r,w,x
perm
mode:
ownership:

chmod:
操作三类用户的权限,使用八进制来进行
chmod [-R] OCTAL_MODE FILE...
加-R表示递归
操作指定类别使用者的权限
u: 属主
g: 属组
o: 其他
a: 所有

指定一个后多个类别mode
chmod u=rw file
chmod ug=r file

操作指定类别的使用者指定权限:
chmod u+r file

chmod a+r file//对a加
chmod u+w file//给u加
chmod o+x file //给o加

chmod -r file //
chmod u-w file //u
chmod a-x file //all

参考其他文件修改指定文件权限--reference=FILE
chmod --reference=/ref target

修改目录时,级联子目录的权限也修改
# chmod 750 DIR
# chmod -R g=750 DIR

chown: 修改属主
chown [-R] [--reference] USER FILE...
加--reference时,修改属主和属组
chown [-R] [--reference] USER:GROUP FILE... 或 USER.GROUP FILE... 或 空:GROUP FILE...(只改属组)
加--reference时,修改属主以及属组

chgrp: 修改属组
chown [-R] [--reference] GROUP FILE...
加--reference时, 只修改属组

mkdir:默认权限为755(root)、775(user)
touch:默认权限为644(root)、664(user)

umask:反向
其中管理员:022
普通用户:002(当普通用户的uid和gid一样,否则为022)

文件:666-umask
目录:777-umask

可以使用umask 023来修改当前用户umask
创建文件时,如果666-mask得到的权限中,具有执行权限,则在对应的权限+1后作用生效的权限

bash:快捷键
home/ctrl+A:快速跳至命令行首
end/ctrl+E:快速跳至命令行尾
ctrl+U:删除命令行首至当前光标所在处之前的所有内容
ctrl+K:删除命令行当前光标所在处之后的所有内容
ctrl+L:清屏
Ctrl+C:终止
Ctrl+Z:把当前命令送至后台执行

第二课

bash 环境:
    shell :外壳
    编译器
    解释器:
        解释:词法分析,语法分析,语义分析,
        条件判断:选择分支
        循环
    过程式编程语言:
        顺序执行
        选择执行
        循环执行
    解释器:提供了编程环境
    脚本:使用bash提供的控制机制,期望执行的命令罗列于文本文件中。
        bash没有库,整个程序几乎都要依赖于系统命令来完成。
        静态语言

    编译型:
        源程序--预处理--编译--汇编--链接
    解释性:
        源程序 --解析器读取
        动态语言
    bash 的重要特性:变量
        bash变量类型:
            本地变量:只对当前shell进程有效的变量,对其他shell进程无效,包括当前shell进程的子进程。
                 (set) VAR_NAME = VALUE
                变量引用:${VAR_NAME} 或 $VAR_NAME
                变量赋值:向变量的存储空间保存数据
                      “”:弱引用 - 内容被替换
                     ‘’:强引用 - 原样输出


            环境变量:对当前shell进程及其子shell有效,对其他的shell进程无效;
                定义:export  VAR_NAME = VALUE
导出: export VAR_NAME
                用户可自定义环境变量
                bash有许多内置的环境变量
                撤销变量:unset  VAR_NAME
                只读变量:readonly VAR_NAME

            局部变量:
                对shell脚本中某代码片段有效;通常用于函数本地;
                local VAR_NAME = VALUE

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

            特殊变量:
                $?

查看当前shell进程中的所有变量:set
查看当前shell进程中的所有环境变量:export,printenv,env;
 
变量命名:
    1、不能使用程序中的关键字(保留字)
    2、只能使用数字、字母和下划线,且不能以数字开头;
    3、见名知意;

变量类型:
    1、定义类型,也就声明了存储机制;文本和二进制
    2、存储空间
    
    数值型:
        精确数值:整数
        仅似数值:浮点型
          单精度浮点
          双进度浮点
    字符型
        char
        string
     布尔型:
        true,false
    类型转换
        显示转换
        隐式转换

bash是弱类型的语言,一切皆字符

bash的配置文件:
    profile类:为交互式登录的用户提供配置
        全局:
        /etc/profile
        /etc/profile.d/*.sh
        用户:
            ~/.bash_profile

        功用:
            1、设定环境变量;
            2、运行命令或脚本

    bashrc类:为非交互式的用户提供配置
        全局:/etc/ashrc
        用户:~/.bashrc
        功用:
            1、设定本地变量;
            2、定义命令别名

登录类型:
    交互式:
        直接通过终端输入账号和密码登录
        使用su -l USERNAME 或 su - USERNAME
    非交互式:
        su USERNAME
        图形界面下打开的终端
        执行脚本

通过编辑配置文件修改的配置生效?
    1、退出并重新登录
    2、让bash重读此配置文件:source FILE;. FILE

配置文件读取顺序

    交互登录的用户:
        /etc/profile --> /etc/profile.d/*.sh  --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

    非交互式登录的用户:
    ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

第三课

程序:
    指令 + 数据

    计算机:二进制代码

    编程语言:
    问题空间 --> 解空间 
    bash 编程,
        指令:OS上可运行的指令
        翻译:在当前OS上查找相应命令并提交给内核的过程;
        程序控制语句:略
                 
Linux文本处理工具:
    文本搜索
        
    grep,egrep,fgrep(不支持正则)
      grep:Global search Regular expression and Print out the line.
        文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行。
        语法格式:
            grep [options] ... 'PATTERN' FILE...

        正则表达式:是一类字符所书写的模式。
            基本正则表达式:grep
            扩展正则表达 :egrep 或 grep -E
            fgrep :fast,不支持使用正则表达式
        正则表达式引擎,
        基本正则表达式的元字符:
            字符匹配
                .:匹配任意单个字符
                []:匹配指定范围内的任意单个字符 例:[0-9]  [a-z]
                [^]:匹配非指定范围内的任意单个字符
           次数匹配元字符:用于实现指定其前面的字符所能够出现的次数。
                *:任意长度,它前面的字符可以出现任意次;例:x*y = xxy,xyy,y
                \?:0或1次,它前面的字符是可有可无的 例:x\?y = xy,y,ay
                \{m\}:m次,它前面的字符要出现M次。例:x\{2\}y = xxxxxy,
                \{m,n\}:至少m次,至多n次 例:x\{2,5\}y = xxy,
                 .*:任意长度的任意字符
                工作与贪婪模式:尽可能多的去匹配

[[:space:]] 空白字符
[[:alnum:]] 任何字母
[[:alpha:]] 匹配任何字母和数字
[[:blank:]] space and tab
[[:digit:]] 匹配任何数字
[[:lower:]] 匹配任何小写字母 
[[:print:]] 
[[:punct:]] 匹配任何标点符号 
[[:upper:]] 匹配任何大写字母 
[[:xdigit:] 匹配任何16进制数字 

            位置锚定:
                ^:行首锚定,写在模式的最左侧;
                $:行尾锚定,写在模式的最右侧;
                ^$:空白行,
                不包含特殊字符的连续字符组成的串叫单词;
                \<:词首,出现单词左侧 例:\<char
                \>:词尾,出现单词右侧 例:char\>
                \b:词首、词尾皆可;
                 
            分组:
                \(\) 例:\(ab\){1,\} ab分组至少出现一次
                引用:
                \#:引用第n个括号所匹配到的内容,而非模式本身;例:\(ab\?c).*\1 = abcmnabc , abcmnac(X)
                 
        命令选项:
            -v:反向选取
            -o:仅显示匹配的字串,而非字串所在的行
             -i:忽略字符大小写
             -A (数字)行
     -B (数字)行
     -C (数字)行


第五课

全屏编辑器(),行编辑器(sed)
    nano
    emacs
    vi --> vim
   
vim:
    模式化的编辑器
    模式:
        编辑模式:命令模式,键盘操作常被理解为编辑命令;
        输入模式
        末行模式:vim内置的命令行接口,执行vim的内置命令

打开文件:
    # vim [option]...[FILE]...
   ESC键:
        编辑模式 --> 命令行模式
            i:在光标所在的前方转换为输入模式;
            a:在光标所在的后方转换为输入模式;
            o:在光标所在处的下方新建一个空行并转换为输入模式;
            I:在光标所在行的行首转换额外输入模式;
            A:在光标所在行的行尾转换为输入模式;
            O:在光标所在行的上方新建一个空白行并转换为输入模式;
    输入模式 --> 编辑模式
        ESC键
    编辑模式 -->  末行模式
        :(冒号)
    末行模式 --> 编辑模式
        ESC键

退出文件:
    末行模式:
    1、:q!  不保存退出
    2、:wq 保存退出
    3、:x 保存退出
    编辑模式:
    4、ZZ 保存退出
    
编辑文本:#(以下命令) #代表数字
    光标移动:
       1、字符间移动:h,j,k,l

        2、单词间跳转:
            w:下一个单词词首
            b:当前单词或前一个单词的词首
            e:当前单词或下一个单词的词尾

        行内移动:
           ^:移动到行首第一个非空白字符
           $:移动到行尾
            0:移动到绝对行首
        句子间移动:
              )
              (
          段落间移动:
               }
               {
            行间移动:
                 #G:直接跳转至#号
                 G:最后一行
        编辑命令:
            x:删除光标所在处的字符
            d:删除命令。结合光标跳转字符使用,删除跳转字符内的字符;
            dd:删除光标所在行
            d$:删除光标到行尾的的内容。等于D
注意:最后一次删除的内容会被保存至缓冲区;
            p:paste,粘贴,在光标所在行的下方
            P:粘贴,在光标所在行的上方;
            y:yank,复制
    Y:相当于yy
            c:change,修改。先删除,再转换为输入模式;
            cc、C:删除光标所在处的整行再转换为输入模式;

    撤销命令:
        u:undo,撤销删除
        #u:
    撤销此前的撤销操作:
        Ctrl + r
    重复前一条命令:
       .(点号)

vimtutor - 帮助教程

vim:
    末行模式:
        s/查找模式/要替换成的内容/gi
            查找模式:可以使用正则表达式
            要替换成的内容:不能使用正则模式,仅能使用引用;
            g:global,全行替换
            i:不区分字符大小写

内容界定:
startpos,endpos
#:第#行
.:当前行
%:全文相当1,$
10,$-1

w:将选定内容另存到某文件 w [path]...
r:将选定内容读取到某文件 r [path]...
          
    可视化模式:
        v:光标走过的字符
        V:光标走过的行
        
    文本查找:
        用法同less命令
        /pattern
        ?pattern 

n 向下找
N 向上找

    翻屏:
        Ctrl + f:向文件尾部翻一屏
        Ctrl + b:向文件首部翻一屏
        Ctrl + d:向文件尾部翻半屏
        Ctrl + u:向文件首部翻半屏
        j:
        k:
    多文件模式:
        :next 下一个文件
        :previous 上一个文件
        :last 最后一个文件
        :first 第一个文件
        :wqall 保存所有
    多窗口模式:

多文件
        o:上下分屏显示多个文件 vim -o 文件1,文件2。。。
        O:左右分屏显示多个文件 vim -O 文件1,文件2。。。
ctrl+w切换下个文件 左右箭头

单文件
ctrl+w,s:水平分割
ctrl+w,v:垂直分割
       
    窗口属性定义:
        :set nu :显示行号
     nonu :取消显示行号
             ai 自动缩进
     noai 取消自动缩进
     ic 大小写
     noic 忽略大小写
     sm 括号高亮
     nosm 忽略括号高亮
     hlsearch 高亮搜索
     nohlsearch 取消高亮搜索

语法高亮 :syntax on|off

        :set 
        配置文件:
            全局:/etc/vimrc
            用户:~/.vimrc 不定存在,可以新建

vim回顾:
    编辑-->输入
        i,I
        a,A
        o,O
        c,C
    跳转:
        h,j,k,l
        w,b,e
        ^,$,0
        ),(
        },{

   d,y,c
   u,Ctrl + r

    vim + # FILE

第六课   
 
bash编程:
    bash进程:解释器
        type 
    shell脚本:
        第一行,顶格:
            #!/bin/bash
            其他的以#开头的行均为注释,会被解释器忽略。
        过程式编程语言:
            顺序执行
            选择执行:条件分支
            循环执行

        bash: 
-n  file  语法测试
-x  file  单步执行:

        变量类别:
            本地变量
            环境变量:export:导出
            局部变量
            位置变量:$1,...,$n,${10}
            特殊变量:
                 $?,
                 $#:传递给脚本参数的个数
                 $*:所有参数
                 $@:引用传递给脚本的所有参数
             shift [n]:同时取出N个参数 踹出几个
            
        bash的循环语句:
             for:遍历有限的元素列表;
             while:
             until:
  
             for语句的格式:
                 for VAR_NAME(变量) in LIST(列表);(分号可忽略)
                 do
                     循环体
                 done

                 LIST:列表,中间包括一个或多个元素

    生成数值列表:
        1. {start...end} :起始值...结束值
        2. seq: (起始值) 结束值

例:添加301-310用户
for uno in {301...310}
for uno in $(seq 301 310)
do
useradd user${uno}
done

bash弱类型:

    变量=值 (等号间不能有空格BASH会当成参数)
    任何变量无需事先声明,可直接使用;
    值默认都是字符型
    unset :撤销变量

    算术运算:bash会对数字执行隐式的类型转换
        let Var_Name=VALUES

    bash的算术运算的方式:
        let Var_Name=EXPRESSION
        $[EXPRESSION]
        $((EXPRESSION))

bash的算术运算方式:
    expr ARG1 OP ARG2 (中间要有空格)

for 循环:
    遍历LIST元素,遍历结束,循环退出;

bash中的字符串连接:
    变量引用后方跟直接字符串时,变量名要加${}

echo 可以用单引号将命令放置其中输出 如
echo "This is 'id -u test'";


实现某种操作:总是 测试 前提是否满足

    逻辑运算:
       布尔运算:真,假
        与 &&,或 ||,非(取反),异或(相同为假,不同为真)
        
命令都有其状态返回值:
    成功:0,真
    失败:1--255,假
  
bash条件测试:
0为真;1为假
    命令执行成功与否即为条件测试;
        test EXPR 比较运算
        [ EXPR ] - 比较或单目用中括号
        [[ EXPR ]]
        
    比较运算:
        >,<,>=,<=,==,!=
    
    测试类型:根据比较时的操作数的类型
        整型测试
        字符测试
        文件测试:判断文件的存在及属性等
   
        注意:比较运算通常只在同一种类型间进行;

条件测试:
    整型测试:
        -gt,-lt,-eq,-ge,-ne,-le
    字符串测试:
        >,<,==,!=,=~(模式匹配),-n,-z
        -z:为空则为真,不空则为假
        -n:为空则为假,不空则为真
-a:与
-o:或
-not:非
例: [[ "$var" =~ PATTERN ]] 模式匹配变量

    文件测试:

    组合条件测试:在多个条件间实现逻辑运算

过程式编程:
    顺序
    选择
    循环:for

    选择:if 和 case
    
    if:三种使用格式
        单分支的if语句:
            if (!取反空格)测试条件;then
                选择分支
            fi 闭合标签

echo $? - 输出最近上一步结果

type exit - 结束SHELL进程
        
自定义shell进程的状态返回值:
    exit [n]-数值

        双分支的if语句:
            if 测试条件;then
                 选择分支1
            else
                 选择分支2
            fi

             两个分支仅执行其中一个;
  
        注意:如果把命令执行成功与否当做条件,则if语句后必须只跟命令本身,而不能引用;
        
        多分支if语句:
            if 条件1;then
                分支1
            elif 条件2;then
                分支2
            ...
            else
                分支n
            fi
    if命令: 在bash运行至if时,其后的命令会被执行

bash编程之条件测试:
    条件测试:
        -a,-e:如果文件存在则为真;
        -f :文件存在且是普通文件;
        -d:存在并且为目录文件;
        -L/-h:存在并且为符号链接文件;
        -b:块设备
        -c:字符设备
        -S:套接字设备
        -p:命名管道
        -s:存在并且为非空文件;
        
        -r:
        -w:
        -x:存在可执行
  
        FILE1 -nt FILE2:FILE1的mtime新于FILE2

        FILE1 -ot FILE2:旧于

read 交互式可以用help read 查下手册

-p "输入内容" 
-t 秒
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值