欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux shell基础2

程序员文章站 2022-07-12 12:11:15
...

8.10 shell特殊符_cut命令

  • 特殊符号
    (1)ls *.txt //表示列出包含文件名为一个或多个字符的txt文件,或者理解为所有的.txt文件
    (2)ls ?.txt //表示匹配一个字符的txt文件
    (3)# 表示注释字符,后面的内容不生效
    (4)\ 脱义字符。取消它的原意。
    (5)| 管道符。命令的结果传递给后ngl的命令。
  • cut命令
    cut命令用来截取某一个字段。格式如下:
cut -d '分割字符' [-cf] n   // -d 指定分隔符  -f 指定段号  -c 指定第几个字符     n为数字

示例: 

Linux shell基础2


8.11 sort_wc_uniq命令

  • sort命令用做排序。格式为:
sort  [-t 分隔符] [-kn1,n2] [-nru]   //n1与n2表示数字 

Linux shell基础2

如果不加任何选项,从首字符向后依次按ASCII码值进行排序。按升序输出 

//-t 指定分隔符,作用与cut -d 一样 
-n 表示用纯数字排序 ,特殊符号或者字母会按0排序 

Linux shell基础2

-r 表示反向排序 

Linux shell基础2

-u 表示去重 

Linux shell基础2

-kn1,n2 表示由n1区间排序到n2区间

sort -t ; -k1,3 /etc/passwd
  • wc命令用于统计文档的行数、字符数或词数
wc -[lmw] filename 
     //-l 统计行数
     //-m 统计字符数。包括换行符,可以使用cat -A来查看到
     //-w 统计词数 ,以空白字符作为分隔符

如果不跟任何选项,会把文档的行数,字符数,词数依次输出 :

Linux shell基础2

  • uniq命令用来删除重复的行,其中-c选项用来统计重复的行数。前提是排序后执行uniq 

Linux shell基础2


8.12 tee_tr_split命令

  • tee命令后面跟文件名,其作用类似于重定向>,但他比重定向多一个功能,即把文件写入后面所跟的文件时,还显示在屏幕上,追加使用-a选项 

Linux shell基础2

  • tr命令应用于替换字符,常用来处理文档中出现的特殊符号。 

Linux shell基础2

  • split命令用于切割文档,把一个很大的文件分成一定大小或一定行数的多个文件。 
find /etc/ -type f -name "*conf" -exec cat {} >> a.txt \; //将所有找到*conf文件全部写入a.txt中

(1)-b //表示依据大小来分割文件,单位为Byte。  

Linux shell基础2

还可以指定分割后文件名的前缀

split -b 1000 a.txt  xzl. //表示分割后的小文件的文件名前缀为xzl.xx

Linux shell基础2

(2)-l //表示依据行数来分割文件。 
Linux shell基础2


8.13 shell特殊符号(下)

  • (1)$ 变量前缀 !$组合,在正则中表示行尾
  • (2)多条命令写入一行,用分号分割。 

Linux shell基础2

  • (3)~ 用户家目录,在正则表达式中表示匹配符 
  • (4)& 放在命令后面,会把命令丢到后台 
  • (5)`> 正确重定向,会把之前文件的内容全部覆盖掉
>> //正确追加重定向,不会覆盖之前的文件内容,只是在文件最后加入新的文件。
2> //表示错误重定向,只输出错误的信息,前面命令没有产生错误,则不会有数据写入到文件中
2>> //错误追加重定向
&> //正确和错误的一起写入文件
  • (6)[ ]指定字符中的一个[0-9],[a-zA-Z],[abc]
  • (7)|| 用在shell中表示或者的意思,用在2条命令中间时,当第一条命令执行不成功时,才执行第2条命令

Linux shell基础2

  • (8)&& 表示当第一条命令成功后,才会执行第2条命令。

Linux shell基础2

[ -d aminglinux ] //在shell中这是用来判断aminglinux目录是否存在


课堂笔记:

source 命令

source 环境变量配置文件名 或者 . 环境变量配置文件名

# 修改配置文件后,必须注销重新登录才能生效,使用source 命令可以不用重新登录

环境变量配置文件

PATH、HISTSIZE、PS1、HOSTNAME等环境变量写入对应的环境变量配置文件

环境变量配置文件中主要是定义对系统操作环境生效的系统默认的环境变量,如PATH等。

 

  • /etc/profile 用户环境变量,交互登录才执行

 

  • /etc/bashrc 用户不用登录,执行shell就生效

在/etc/目录下的配置文件会对所有用户生效,放在家目录的配置文件,只会对当前用户生效。

 

 

|| 和 &&,用于命令之间

|| 表示或,如果第一条命令执行正确,第二条命令则不执行。如果第一条命令执行错误,则执行第二条命令。

&& 如果第一条命令执行成功了才执行第二条命令,如果第一条命令错误,第二条命令则不执行。


 

测验题目:

1. 设置环境变量 HISTSIZE , 使其能够保存10000条命令历史。
答:HISTSIZE=10000   如果要永久有效需要vi  /etc/profile  将HISTSIZE=10000 再保存退出。

2. 为什么如果这样设置PS1 (PS1="[\aaa@qq.com\h \W]\$ ")  显示的结果和我们预想的不一样,那要如何设置才能恢复原来默认的?
答:因为是双引号括起来的,$为脱意字符有特殊意义, 改成PS1='[\aaa@qq.com\h \W]\$ '就能恢复默认的。

3. 想办法把当前目录下的文件的文件名中的小写字母全部替换为大写字母。
答:ls -l |grep ^[^d] |awk '{print $9}'|tr '[a-z]' '[A-Z]'        

4. 使用sort以":"为分隔符,对/etc/passwd文件的第5段排序。
答:sort -t: -k5 /etc/passwd    

5. 使用cut以":"为分隔符,截图/etc/passwd的第三段字符。
答:cut -d : -f3 /etc/passwd     

6. 简述这几个文件的作用: /etc/profile, /etc/bashrc, .bashrc, .bash_profile.
答:/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。
      /etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
     ~/.bashrc:该文件包含专用于单用户的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。
     ~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息即可以设置用户的特定程序和启动环境。

   
7. export 的作用是什么?
答:export是声明变量的意思,让该shell的子shell也知道该变量的值是多少.如果export后面不加任何变量名,则它会声明所有的变量。

8. linux下自定义变量要符合什么样的规则呢?  
答:a.设定变量的格式为 “a=b”, 其中a为变量名,b为变量的内容,等号两边不能有空格;
       b.变量名只能由英、数字以及下划线组成,而且不能以数字开头;
       c.当变量内容带有特殊字符(如空格)时,需要加上单引号;


9. 如何把要运行的命令丢到后台跑?又如何把后台跑的进程给调到前台?
答:Ctrl+z 或是在命令最后加上&        fg +作业号

10.  列出当前目录下以"test"开头的文件和目录。
答:ls -d test*

11.  如何把一个命令的输出内容不仅打印到屏幕上而且还可以重定向到一个文件内?
答:echo xxxx |tee 1.txt  将xxxx打印到屏幕且输入到1.txt

12. 假如有个命令很长,我们如何使用一个简单的字符串代替这个复杂的命令呢?请举例说明。
答:alias dns='vi /etc/resolv.conf'   再在命令行输入dns,就进入到/etc/resolv.conf文件里了

13. 我如何实现这样的功能,把一条命令丢到后台运行,而且把其正确输出和错误输出同时重定向到一个文件内?
答:例子:cat 2.txt 3.txt>1.txt 2>&1 &  (2.txt为存在的文件    3.txt为不存在的文件)  1.txt里面包含正确输出和错误输出
0、1和2分别表示标准输入、标准输出和标准错误信息输出,1一般为默认的。


14. 如何按照大小(假如按照10M)分隔一个大文件,又如何按照行数(假如10000行)分隔?
答:split -b10000000 1.txt     split -l 10 1.txt       wc -l *看所有文件的行数

15. 做实验,搞明白 ; && || 这三个符号的含义。
答:command1 ; command2  表示command1 和 command2为两个单独分开执行的命令,互不影响。
       command1 && command2  1假为假 ,若command1为假时,则整条语句是假,不用执行command2,若command1为真时,再去执行command2
       command1 ||   command2  1真为真,若command1为真时,则整条语句是真,不用执行command2,若command1为假,再去执行command2

16. 如果只想让某个用户使用某个变量如何做?
答:例子仅在root下设置变量: echo "export myname=baozhen">>~/.bashrc   source ~/.bashrc(使配置生效)  echo $myname

17. 使用哪个命令会把系统当中所有的变量以及当前用户定义的自定义变量列出来?
答:set


扩展:

 


关于PROMPT_COMMAND环境变量的含义   http://www.linuxnote.org/prompt_command-environment-variables.html
source exec 区别 http://alsww.blog.51cto.com/2001924/1113112
Linux特殊符号大全http://ask.apelearn.com/question/7720
sort并未按ASCII排序 http://blog.csdn.net/zenghui08/article/details/7938975

 

简易审计系统(必须要预习): http://www.68idc.cn/help/server/linux/2014042190951.html