二 shell 基础
一 文件的 权限基础
文件有三类权限 user,group,other,
权限分为 r w x 代表数字分别为 4 2 1
修改权限命令 chmod
权限还有特殊权限,在执行的时候代表某一身份的权限去执行
分别有文件拥有者权限,组权限,所有人权限。
文件拥有者身份的权限即在 user权限将执行权限x改成s。即 rwx=>rws来表示。权限值则为在原有权限前加4000.如原权限为 755,则现权限则变更为4755
组身份权限 即将组的执行权限的x变更为s。权限值为在原有权限前+2000.即755=》2755
所有人执行的权限即在所有人权限组中将x=》s。权限值+1000 即 755=》1755
chmod命令,可以用权限值也可以用标识符
即 chmod +x aa.sh 等同于chmod 755 aa.sh.即对三种身份加上可执行权限
单独针对某一群组增加可执行权限,可以如下操作
chmod u+x/g+x/o+x来操作
去掉某一群组的权限
chmod u-x/g-x/o-x来操作执行
二 通配符
重点的两个通配符 * 和?
* 代表任意字符,可以是空字符串
?代表单一字符,不可以为空字符
例
ls -la /usr/bin/* #列出bin下的所有文件 ls -la /usr/bin/???? #列出bin下的四个字符的文件
还有一些例子。我觉得很实用


转义字符 “ \”
例 echo 9 \* 9 =81 即将*转义成乘号
注意: 单引号转义
echo 'This is jack's book' 这种就无法通过\转义 ,echo 'This is jack\'s book' 因为在shell中,系统会将\当成续航符,认为输入未完成,而允许用户继续输入
争取的做法为
echo This is jack's book 外层不加单引号
echo "This is jack's book" 用双引号括起来
echo 'This is jack'\''s book'
常见的转义字符有


字符集合
用途:对集合内部的任意字符进行匹配,字符集合就是【】中所列的字符范围中的某一个字符,其长度为1
符号: 【】
例子:
ls -la [abc]* #查询首字母为a,b,c的所有文件

注意: “-”字符,因为该字符代表的是字符集合的范围,如上图中【a-z】表示从a-z范围中的任意字符。拿如果要表示-字符时,就需要用下划线_放到横杠的前面来表示待-的字符
ls -la /usr/bin/[a-z_-]#表示查询从a-z以及带-字符的所有文件
非 集合 !
如[!0-9】 【!a-z】等
如果要将!认作叹号而非 非集合字符时,则需要转义字符\来转义
注意:在集合中,无论是.还是*都只代表单一字符,没有任何其他的特殊含义。
[,*] #只代表1,, ,.,*这五个字符其中之一
括号扩展
字符串组合 {}
ls -la /usr/bin/{g,nc,s}ftp #将{}中的字符与后面的ftp进行组合查询
举例说明
ls -la /usr/{sb,b}in/*er #查询sbin和bin中的所有以er结尾的文件

[root@localhost ~]# echo {,,,,,,,,}\*{,,,,,,,,}
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
系统默认开启文件
每个shell script执行时,系统都会默认开启三个标准文件。标准输入 stdin 标准输出 strout 标准错误 strerr

这里有个文件代码的概念,我没有理解,他的用途是什么?百度了一下,找到了答案:
摘抄 https://www.cnblogs.com/YaoDD/p/4921685.html
shell script 学习笔记-----标准输出
1、将标准输出(stdout)和标准错误输出(stderr)分别重定向到两个不同的文件

其中符号'>'默认将标准输出重定向,意思和'1>'相同,‘2>'表示重定向标准错误输出,数字1和2其实是文件描述符,在Linux下默认1为标准输出STDOUT,2为标准错误输出STDERR
2、将标准输出和标准错误输出重定向到同一个文件中,共有下图所示三种写法,后两种写法可以认为符号&是作为特殊标记了,第一种写法则可以看做先将STDOUT输出到both文件,“2>&1”则可将1理解为标准输出重定向的文件,然后“2>&1”相当于一个赋值操作,将文件描述符2指向的文件赋值为文件描述符1指向的文件

3、重定向符'>'默认会将目标文件清空(如果存在的话),然后添加重定向的内容。如果需要在目标文件的末尾进行添加,则需要使用">>"重定向符,如下所示

4、/dev/null是Unix/Linux系统中一个特殊的设备,它并不是真正的设备,所有你认为没用的数据都可以重定向到它,并且不会占据任何磁盘空间,如下图就将错误信息扔进了/dev/null中

5、将多个命令的输出重定向到同一个文件有以下两种方式,但是基于的原理是完全不同的,花括号那组其实只是将括号中命令的输出集中重定向而已,但是普通括号内的命令是在子shell,也就是subshell中运行的。这时我们就会发现,因为cd指令的存在,第一条命令运行后我们仍在之前的目录(因为subshell中位置的改变与父shell无关),但是第二条指令运行之后,我们就在上级目录了

6、将一个程序的输出作为另一个程序的输入,最常见的如下图所示,但是需要注意的是,这两个程序是运行在不同的subshell中的!

7、将管道中的数据流备份:使用如下所示是tee命令,它将数据量输入下一级管道的同时,将它们备份到tee.file文件中

8、将数据重定向到多个文件中,如下图所示,其实本质上就是将写入不同文件描述符的数据重定向到不同的文件中,这样的话,在程序中可以不事先打开文件,而直接向文件描述符写数据,例如:write(3,buf,255),就是直接向文件描述符3写数据,而我事先并没有打开文件的操作

9、如果没有使用特殊的手法,例如将STDERR重定向至STDOUT或者在程序中就进行重定向,那么管道只重定向STDOUT,我们没有办法只重定向STDERR而不重定向STDOUT
10、交换STDOUT和STDERR:如果你想要将STDOUT输出到stdout.logfile中,并且通过tee将STDERR即输出到屏幕又输出到stderr.logfile。这时就需要使用下图所示的方法。其实本质上就是交换了STDOUT和STDERR。类似于两个整数的交换。首先将描述符3赋值为1,即STDOUT,再将标准输出的内容输出到stdout.logfile中,最后"2>&3"表示将标准错误的数据往标准输出中写,因为此时描述符3的值就是标准输出,这样标准错误的内容就能通过标准输出通过管道了

11、我们知道重定向符号'>'会覆盖目标文件中的内容,那么为了防止误操作导致重定向覆盖了我们原先不想被覆盖的文件,我们可以采用如下的方法,如果要恢复默认设置,使用“set +o noclobber”,如果在已经设置了noclobber的情况下,仍然强行做一次重定向覆盖操作,则可使用类似“echo do it >| my.file”的方法,“>|”表示强行重定向覆盖操作

参考文献:《bash Cookbook》,Carl Albing
看到以上的摘抄之后,尤其是第一和第二两个举例,我们就可以明白,可以通过1,2来将输出信息重定向。
标准输入/输出转向
将标准输入/标准输出 重新定向到别的文件。就是上面摘抄中的举例1,2等。学过鸟叔的书中,可以看到,很多shell都会将输出定向到/dev/null这个黑洞中。就是这样用的。
转向输出时,如果输出文件不存在则会创建新文件,如果已存在,则会将源文件内容清空,再输出。如果想在后面继续附加内容,则需要转向附加操作符
>> 则会在文件后面追加标准输出的内容
转向输入
[root@localhost ~]# wc -l #按ctrl+D,则会输出输入的行数
[root@localhost ~]#
同样,如果我们要统计某一个文档的行数时,可以利用标准输入专向来操作。例
[root@localhost ~]# cat /var/log/pcp/pmlogger/pmlogger_daily.stamp #查看该文件的内容。可以看到有两行内容
# -- :: [root@localhost ~]# wc -l < /var/log/pcp/pmlogger/pmlogger_daily.stamp #将该文件,输入到wc-l中 [root@localhost ~]#
转向输出和转向输入的混合使用
用法: 命令或Script < 输入文件 >输出文件
将输入文件的内容,输出到输出文件中
sort < unsort.txt > sorted.txt #将未排序的unsort.txt文件的内容,排序后输出到sorted.txt文件中
利用转向输出做简易编辑
[root@localhost ~]# cat > out.sh
#! /bin/bash echo hello world![root@localhost ~]# sh out.sh
hello world!
[root@localhost ~]# man cat
CAT() GNU CAT() NAME
cat - 连接文件并在标准输出上输出 SYNOPSIS 总览
cat [选项列表] [文件列表]... DESCRIPTION 描述
将文件列表中的文件或标准输入连接到标准输出。 -A, --show-all
等价于 -vET 。 -b, --number-nonblank
给非空输出行编号。 -e 等价于 -vE 。 -E, --show-ends
在每行结束显示 $ 。 -n, --number
给所有输出行编号。 -s, --squeeze-blank
将所有的连续的多个空行替换为一个空行。 -t 等价于 -vT 。 -T, --show-tabs
把 TAB 字符显示为 ^I 。 -u (被忽略的选项) -v, --show-nonprinting
除了 LFD 和 TAB 之外所有控制符用 ^ 和 M- 记方式显示。 --help 显示帮助并退出。 --version
显示版本信息并退出。 没有指定文件或指定的文件是 -,则从标准输入读取。
管道
管道的意义:
管道的意思就是将一个程序的输出,放到管道中,作为另一个程序的输入。从而链接两个程序之间的通道
用法:
基本型 : 命令1 | 命令2
[root@localhost ~]# cat unsort.txt | sort
读取unsort.txt内容,用sort命令排序
[root@localhost ~]# cat unsort.txt | sort > sorted.txt
读取unsort.txt内容,用sort命令排序后输出到sorted.txt文档中
[root@localhost ~]# cat sorted.txt | lp
读取sorted.txt内容输出到lp打印程序中
多管道组合: 命令1 | 命令2 | 命令3 |。。。。| 命令n
一个查询apache日志中 4XX错误的脚本
[root@localhost ~]# grep '".*" 4[0-9][0-9]' access.log | grep -o '".*" 4[0-9][0-9]' | sort | uniq -c | sort -n | tee alog.txt
grep从access.log中将行按照要求取出来=》将这些行按匹配要求取出相应的数据=》排序=》删除重复行,并统计重复数据的次数=》排序=》交给tee打印并输出到alog.txt文档中
前后台工作
这个在鸟个的书中也学习过,就是前后台搭配使用。
& 符号 。意思就是将命令丢到后台执行
当后台执行完毕后,会出现

很简单,不是么?如果想详细了解,还是要看鸟哥的前后台的文章。
二 shell 基础的更多相关文章
- shell基础及变量
一 Shell概述 1.Shell的作用——命令解释器,“翻译官” shell作为一个人机接口,用于解释用户输入的命令,将命令解释为Linux内核可以执行的2进制代码,并将执行的结果返回在标准终端上. ...
- shell基础二十篇 一些笔记
shell基础二十篇 转自 http://bbs.chinaunix.net/thread-452942-1-1.html 研讨:Bash 内建命令 read (read命令更具体的说明见博客收藏的一 ...
- 运维 04 Shell基础命令(二)
Shell基础命令(二) 查看Linux的发行版 cat /etc/redhat-release cat /etc/os-release 查看系统用户的id信息 id 用户名 id root id ...
- LINUX二十个基础命令
LINUX二十个基础命令 一. useradd命令 1.命令格式: useradd 选项 用户名 2.命令功能: 添加新的用户账号 3.常用参数: -c comment 指定一段注释性描述.-d 目录 ...
- shell学习之路:shell基础大全2
原文:http://note.youdao.com/share/?id=cd2ad6e6d5db2b347f92958efc2bdbc1&type=note 正则表达式与通配符: 一.介绍: ...
- shell基础(转)
shell基础1:文件安全与权限 http://bbs.chinaunix.net/forum/viewtopic.php?t=434579&highlight=wingger 附:Linux ...
- Linux实战教学笔记17:精简shell基础
第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...
- Linux基础学习(10)--Shell基础
第十章——Shell基础 一.Shell概述 1.Shell是什么: (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来 ...
- Linux Shell基础(下)
Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...
随机推荐
- 阿里云祝顺民(江鹤):云原生SDWAN加速企业上云 引领未来智能网络
第二届中国SD-WAN峰会于11月16日在北京盛大开幕,阿里云以黄金赞助商之名隆重参与.作为全球前三,亚太第一的云计算厂商,阿里云一直引领云网技术的演进及应用落地.过去一年,阿里云发布以云为中心的云原 ...
- SQL Server查询使用键查找时锁申请及释放顺序
当然看的过程中,其实自己有个疑问: 对于键查找这类查询,会申请哪些锁,锁申请和释放的顺序是怎样的? 准备 备注:测试表仍然使用高兄文中创建的测试表testklup 在开始之前,使用dbcc ind 命 ...
- JS中的Date对象
1.构造函数 Date 对象可以通过构造函数来生成,Date 的构造函数可以放入四种不同的参数 1.1.new Date() ,返回此时的本地日期时间的date对象 let d = new Date( ...
- php大文件断点续传
该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开始. 如何分 ...
- HTML基础入门学习
上一篇给大家介绍了学习HTML的准备工作,本文开始带大家步入HTML的学习 一.HTML基础 网页的组成: HTML:页面构成 css:页面样式表现 JavaScript:交互行为 HTML简介: H ...
- 【HDOJ6621】K-th Closest Distance(主席树,二分)
题意:给定一个长为n的序列,有m次强制在线的询问,每次询问位置[L,R]中abs(a[i]-p)第k小的值 n,m<=1e5,a[i]<=1e6,p<=1e6,k<=169 思 ...
- 对拍 & 随机数生成
用 Windows 批处理对拍: 1. 新建一个批处理(.bat),代码如下: :loop@echo off data_creator.exe force_solution.exe correct_s ...
- codeforces 617 E. XOR and Favorite Number(莫队算法)
题目链接:http://codeforces.com/problemset/problem/617/E 题目: 给你a1 a2 a3 ··· an 个数,m次询问:在[L, R] 里面又多少中 [l, ...
- 关闭myeclipse中烦人的鼠标划过,自动提示功能
eclipse越来越智能,身为码农的我却越来越伤心.虽然你很智能,但请你提供一些有用的信息给我,不要乱七八槽的,不问青红皂白就塞一大堆提示给我,对不起,哥不需要这些!!! 都知道,使用myeclips ...
- Vagrant 入门 - 配置
原文地址 现在我们已经有了一个运行 Ubuntu 的虚拟机,并且可以在宿主机上编辑文件并自动同步到虚拟机.现在让我们安装一个 web 服务器,通过服务器访问这些文件. 可以通过 SSH 进入并安装一个 ...