Linux杂记1

通配符 *[] [^]
命令行光标  home  end  ctrl+u  ctrl+k  ctrl+箭头  ctrl+l
echo $HISTFILE, $HISTFILESIZE, $HISTSIZE 
!100  !-5  !!  !$ (esc + .)  !string
$(cmd)   `cmd`
mkdir -pv ./test/{x/m,y}  ./test2/{a,d}_{b,c}

cp复制的文件,属主,属组是当前执行cp的用户本身
复制链接时,默认是复制链接指向的那个文件本身
cp -a /etc /backup/etc-`date +%F`  归档复制

/etc/default/useradd
/etc/skel
/etc/shells

$SHELL
PATH=$PATH:/bin/go
export PATH

suid 特殊权限位,进程的属主为该执行文件本身的属主,如果本身的owner有x,则为小写s,否则大写S

umask    创建文件默认的权限=最大权限-umask值
    注意:文件一般不给执行权限
    umask
    umask 027
    grep 'umask' /etc/profile /etc/bashrc

bash配置文件  /etc/profile.d/*.sh  /etc/profile  ~/.bash_profile  ~/.bashrc /etc/bashrc
立即生效修改后的配置文件  . file , source file

type set 
set 查看所有变量
set -C  禁止覆盖重定向  (可以使用强制覆盖 >|)
set +C  解除

stdin 0 
stdout 1
stderr 2 

重定向  改变标准输入,输出的设备源
    >  >>  >|
    2>  2>> 
    &>  &>>
    < 
    ls /var > out1 2> out2
    ls /var > out 2> out 
    ls /var &> out

cat < /etc/fstab  接受文件并打印,一般就默认带有stdin重定向
tr a-z A-Z < /etc/passwd

here doc
    cat << END
    ...
    END

    cat >> file << EOF
    ...
    EOF

tee  读取stdin,写到stdout,和文件各一份
    tee file < /etc/file2
    echo xxx | tee file

管道: 前一个命令的标准输出stdout,当前后一个命令的标准输入stdin
    cut -d: -f1 /etc/passwd | sort | tr 'a-z' 'A-Z'

egrep
   egrep -ivo --color pattern file...
   egrep -A|B|C # ...   
   .  单个任意字符
   *  其前面的字符任意次   .*
   ?  其前面的字符0次或1次
   []  [^]
   +  {1,}
   {m,n}
   ^  $  ^$
   \<   \>   \b
   ()   \1  \2 
   a|b   C|cat   (C|c)at 

练习
1. 将一个目录下的所有文件的文件名换成大写?  

2. 显示一个文件的行数,只显示行数,不显示额外信息?

3. 统计/usr/bin/目录下的文件个数

4. 取出当前系统上所有用户的shell,要求,每种shell只显示一次,并且按顺序进行显示 ? 统计每种shell出现的次数?

5. 如何显示/var/log目录下每个文件的内容类型?不使用通配符,能否实现?

6. 取出/etc/inittab文件的第6行

7. 取出/etc/passwd文件中倒数第9个用户的用户名和shell, 显示到屏幕上并将其保存至/tmp/users文件中

8. 显示/etc目录下所有以pa开头的文件,并统计其个数;

9. 不使用文本编辑器,将alias cls=clear一行内容添加至当前用户的.bashrc文件中;

10. 显示所有以数字结尾且文件名中不包含空白的文件?

11. 匹配某文件中 1~255之间的整数?

12. 匹配 ifconfig 显示中的ip地址?
\<([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])\>

13. hadoop用户临时切换其基本组为mygroup (会涉及到给组设置密码 gpasswd,newgrp 临时切换,login机制,exit还原)

14. /etc/shadow 除了root,其他用户应该是没有任何权限的,为什么普通用户还是可以修改自己的密码,即有w权限? suid

15. 若某用户的umask为023,则其创建的文件和目录的权限是?
    目录  754  rwx r-x rw- 
    文件  643  rw- r-- -wx   实际创建文件的权限是 -rw-r--r--  因为文件默认不允许有x权限

16. 手动添加一个用户hive,uid,gid为5000,基本组为hive,额外组为mygroup
    /etc/group  /etc/passwd  /etc/shadow 
    cp -r /etc/skel /home/hive
    chown -R hive:hive /home/hive 
    chmod -R go= /home/hive 

17. 文件名通配符的使用
    字母a开头,数字3结尾   a*3
    以任意一个字符开头,后跟一个y,又跟任意字符的  [a-z]y* 
    以非字母开头 [^a-z]*
    包含空白字符  ls *[[:sapce:]]*
    以a或m开头  ls [am]*
    以数字结尾,且不包含空白  ls . | egrep '[0-9]$' | egrep -v '[[:space:]]'
    包含特殊符号  ls *[[:punct:]]*

18. 手动创建一个用户
    新建一个没有家目录的用户openstack  
    复制/etc/skel为/home/openstack  
    改变/home/openstack及其内部文件的属主属组均为openstack  
    /home/openstack及其内部文件,属组和其它用户没有任何访问权限  

19. 创建一个用户tom,其uid为2002,基本组为distro(gid为3003),额外组为linux

20. 创建一个用户jerry,其全名为jerry is jerry,默认shell为csh

21. 修改tom的uid为4004,基本组为linux,额外组为distro和jerry  
    usermod -u 4004 -g linux -G distro,jerry tom 

22. 给jerry加密码,并设置其密码最短使用期限为2天,最长为50天  
    passwd -n 2 -x 50 jerry 

23. 将tom的默认shell改为bash    
    usermod -s /bin/bash tom 
    chsh tom 
    直接改/etc/passwd

24. 添加系统用户hbase,且不允许其登录系统  
    useradd -r -s /sbin/nologin hbase

25. 添加一个永久的命令别名

26. 用户登录后,打印一段欢迎信息

27. 设置某用户一个永久umask
本作品采用《CC 协议》,转载必须注明作者和本文链接
六月的风
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!