Linux运维第5天:Linux下bash配置及I/O重定向和grep文本查找

来源:互联网 发布:大华ddns域名注册 编辑:程序博客网 时间:2024/05/20 21:45
计算器:bc
        scale=n;设置精度
        
手动添加用户(hive):基本组hive,附加组will
    1.修改/etc/passwd文件
    2.修改/etc/shadow文件
    3.修改/etc/group文件
    4.修改/etc/gshadow文件
    5.cp -r /etc/skel/ /home/hive/
    6.chown -R hive.hive /home/hive/
    7.chmod -R go= /home/hive/
    8.openssl passwd -1 -salt 'abcdelfg'
    9.将生成的密码复制到/etc/shadow中第二个字段
    
umask:权限掩码
    文件:666-umask
    目录:777-umask
    
文件默认不能具有执行权限,如果算得的结果中有执行权限,则将其权限加1


站在用户角度来说,SHELL的类型:
    1.登录式shell
        正常通过某终端登录
        su - username
        su -l username
    2.非登录式shell
        su username
        图形终端下打开命令窗口
        自动执行的shell脚本
        
bash的配置文件:
    全局配置
        /etc/profile,/etc/profile.d/*.sh,/etc/bashrc
    个人配置
        ~/.bashrc,~/.bash_profile
        
profile类的文件:
    设定环境变量
    运行命令或脚本(登录之前)
    
bashrc类的文件:
    设定本地变量
    定义别名
    
登录式shell如何读取配置文件
    /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile -->~/.bashrc -->/etc/bashrc
    
非登录式shell如何读取配置文件
    ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
    


运算器、控制器、:CPU
存储器:RAM
输入设备/输出设备


程序:指令和数据


控制器:指令
运算器:
存储器:


地址总线:内存寻址
数据总线:传输数据
控制总线:控制指令


寄存器:CPU暂时存储器


I/O:硬盘


系统设定
    默认输出设备:标准输出,STDOUT,1
    默认输入设备:标准输入,STDIN,0 
    标准错误输出:STDERR,2 
    
标准输入:键盘
标准输出和标准错误输出:显示器


I/O重定向:
    Linux:
        >:覆盖
        >>:追加
        <:输入重定向
        2>:错误重定向
        2>>:追加
        &>:重定向标准输出和错误输出
    
    <<:here document
    cat >> /tmp/test.txt <<EOF
    
set -C:禁止对已经存在的文件使用重定向覆盖
    强制覆盖则使用 >|
    
set +C:关闭上述功能


管道:前一个命令的输出,作为后一个命令的输入
    命令1 | 命令2 | 命令3 | ...
    echo "RatHat" | passwd --stdin
    
tee:输出到标准输出并保存到文件


练习:
    1.统计/usr/bin/目录下的文件个数;
    # ls /usr/bin | wc -l
    2.取出当前系统上所有用户的shell,要求,每种shell只显示一次,并且按顺序进行显示;
    # cut -d: -f7 /etc/passwd | sort -u
    3.思考:如何显示/var/log目录下每个文件的内容类型?
    #file /var/*     #file `ls -d /var/*`
    4.取出/etc/inittab文件的第6行;
    # head -6 /etc/inittab | tail -1
    5.取出/etc/passwd文件中倒数第9个用户的用户名和shell,显示到屏幕上并将其保存至/tmp/users文件中;
    # tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/users
    6.显示/etc目录下所有以pa开头的文件,并统计其个数;
    # ls -d /etc/pa* | wc -l
    7.不使用文本编辑器,将alias cls=clear一行内容添加至当前用户的.bashrc文件中;
    # echo "alias cls=clear" >> ~/.bashrc
    
文本查找:
grep,egrep,fgrep


grep:根据模式搜索文本,并将符合模式的文本行显示出来


Pattern:文本字符和正则表达式的元字符组合而成匹配条件


grep [OPTIONS] PATTERN [FILE...]
    -i:忽略大小写
    --color:
    -v:反向查找
    -o:只显示匹配的字符串
    
正则表达式:(贪婪模式)
    Regular Expression,REGEXP
    元字符
    .:任意单个字符
    *:匹配其前面字符任意次
    .*:匹配任意长度任意字符
    ?:匹配其前面字符1次或0次
    \{m,n\}:匹配前面字符m-n次
    \{m,\}:
    \{,n\}:
    ^:行首,后面的字符必须出现在行首
    $:行尾,后面的字符必须出现在行尾
    ^$:空白行
    []:
    [^]:
    [:digit:],[:lower:],[:upper:] 使用时 [[:digit:]]
    \<:其后面的任意字符必须作为单词首部出现(\b放在单词首)
    \>:其后面的任意字符必须作为单词尾部出现(\b放在单词尾)
    \(\):分组 \(ab\)*  ab可以出现任意次
    后向引用
    \1:引用第一个左括号及其右括号内的所有内容
    \2:
    \3:
    grep '\(l..e).*\1' test.txt


练习:
    1.显示/proc/meminfo文件中以不区分大小的s开头的行;
    grep -i '^s' /proc/meminfo
    grep '^[sS]' /proc/meminfo
    2.显示/etc/passwd中以nologin结尾的行; 
    grep 'nologin$' /etc/passwd


    取出默认shell为/sbin/nologin的用户列表
    grep "nologin$' /etc/passwd | cut -d: -f1


    取出默认shell为bash,且其用户ID号最小的用户的用户名
    grep 'bash$' /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f1


    3.显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;
    grep "^#[[:space:]]\{1,\}[^[:space:]]" /etc/inittab


    4.显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;
    grep ':[0-9]:' /etc/inittab


    5.显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;
    grep '^[[:space:]]\{1,\}' /boot/grub/grub.conf


    6.显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;
    grep '^\([0-9]\).*\1$' /etc/inittab


    
练习:
    1.找出某文件中的,1位数,或2位数;
    grep '[0-9]\{1,2\}' /proc/cpuinfo
    grep --color '\<[0-9]\{1,2\}\>' /proc/cpuinfo


    2.找出ifconfig命令结果中的1-255之间的整数;


      
    3.查找当前系统上名字为student(必须出现在行首)的用户的帐号的相关信息, 文件为/etc/passwd
    grep '^student\>' /etc/passwd | cut -d: -f3
    id -u student


    student1
    student2


练习:分析/etc/inittab文件中如下文本中前两行的特征(每一行中出现在数字必须相同),请写出可以精确找到类似两行的模式:
    l1:1:wait:/etc/rc.d/rc 1
    l3:3:wait:/etc/rc.d/rc 3


    grep '^l\([0-9]\):\1.*\1$' /etc/inittab


正则表达式:
    Basic REGEXP:基本 
    Extended REGEXP:扩展
grep:
    -v
    -i
    -o 
    --color
    -E:
    -A #
    -B #
    -C #


egrep = grep -E 
    
扩展正则表达式:
    +:1到n次
    {m,n}不需要使用\
    分组:
    (),\1,\2,\3 
    |:或
    
4.显示所有以数字结尾且文件名中不包含空白的文件;
ls *[^[:space:]]*[0-9]   ?????????


ifconfig | egrep '\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>' 


ifconfig | egrep --color '(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>' 


IPv4: 
5类:A B C D E
A:1-127
B:128-191
C:192-223


\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])\>(\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>){2}\.\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>




http://mageedu.blog.51cto.com/


fgrep:快速,但是不支持正则表达式
0 0