### 4 月2日笔记
– #### IO重定向
“`
I:input指的是标准输入 描述符用0表示
O:output指的是标准输入 描述符用1表示
标准错误 描述符用2表示
“`
一般文件或者命令的标准输入是指的键盘,标准输出是值得终端窗口。
我们用重定向来改变他们的方向
大于号> 表示标准输出:把输出内容定向到一个文件中
“`
> filename
# >操作, 将会把文件”filename”变为一个空文件(就是size为0).
# 如果文件不存在, 那么就创建一个0长度的文件(与’touch’的效果相同).
“`
set –C 禁止将内容覆盖已有文件,
但可追加
\>| file 强制覆盖
set +C 允许覆盖
>> filename
“`
# 》操作, 如果文件不存在会创建文件,如果文件存在将会把输出的内容追加到文件”filename”中
“`
2> fliename
“`
2>filename 指的是把标准错误输出的内容重定向到文件”filename”中清空原文件
“`
同理
2>> fliename
“`
2>> filename指的是把标准错误输出的内容追加到文件”filename”中
“`
2>&1 filename
“`
重定标准错误到标准输出
将错误消息的输出, 发送到与标准输出所指向的地方.
“`
&>filename
将标准输出和标准错误都重定向到文件”filename”中
“`
合并多个程序的STDOUT
( cal 2007 ; cal 2008 ) > all.txt
“`
2>&1
重定向stderr到stdout.
< FILENAME
从文件中接受输入.
与”>”是成对命令, 并且通常都是结合使用.
<< 表示多行重定向
<<后面跟的是多行重定向开始与结束的字符,他可以是任何字符 ,开始字符必须与结束字符相同,结束字符必须单独一行
示例:把两个E之间的多行自发作为cat命令的标准输入
[zhangxiao@zhangxiao ~]$cat <<E
“`
> s
> s
> d
> d
> f
> s
> E
s
s
d
d
f
s
[zhangxiao@zhangxiao ~]$
“`
– #### tr
语法:tr + 【选项】 +参数
常用选项
“`
-c或——complerment:取代所有不属于字符集的字符;(取反)
-d或——delete:删除所有属于第一字符集的字符;(删除)
-s或–squeeze-repeats:把连续重复的字符以单独一个字符表示;(压缩相同的连续字符)
-t或–truncate-set1:先删除第一字符集较第二字符集多出的字符。(当第一字符集比第二个字符集字符多时,第一字符集超出来的不生效)
“`
示例:把输入的小写字母换成大写字母
“`
[zhangxiao@zhangxiao ~]$tr [a-z] [A-Z]
afdfdfyuc
AFDFDFYUC
sssssss
SSSSSSS
[zhangxiao@zhangxiao ~]$
“`
示例:删除输入的字母中的abcd
“`
[zhangxiao@zhangxiao ~]$tr -d “abcd”
ssfaasdasncvj
ssfssnvj
[zhangxiao@zhangxiao ~]$
“`
– #### 管道 |
|表示管道,指的是|前面的标准输出当做|后面的标准输入
示例
“`
[zhangxiao@zhangxiao ~]$cat script.log | tr -d “abcde”
This sttmnt is snt to th log fil, “sript.log”.
“`
– #### tee
用法:cmd1 | tee [-a ]filename | cmd2
把命令1的标准输出保存到filename中同时作为cmd2的标准输入
“`
[zhangxiao@zhangxiao ~]$echo “hello” | tee pwa1
hello
[zhangxiao@zhangxiao ~]$la
-bash: la: command not found
[zhangxiao@zhangxiao ~]$ls
Desktop Documents Downloads helloword Music PAAA Pictures Public pwa1 script.log Templates test1 Videos
[zhangxiao@zhangxiao ~]$
“`
– #### 用户权限管理
> 首先用户的权限是有token决定的,token是登录系统获取的,所以修改了用户权限后只有重新登录系统后才可以生效。
与用户和组有关的文件
“`
/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
/etc/group:组及其属性信息
/etc/shadow:用户密码及其相关属性
/etc/gshadow:组密码及其相关属性
“`
passwd格式:
“`
用户名:密码(X是站位符):UID:gid:备注:家目录:shell
shaow格式:
用户名:密码(加密):mtime(距1970年):密码的最短变更时间(距今):密码的最长有效期:过期几天提醒:过期几天锁定:多长时间失效(距1970.1.1)
“`
group格式:
“`
组名称:组密码(7版本一般在gshaow中):gid:当前组为附加组的用户列表
“`
gshdow:
组名称:组密码:管理员列表:当前组为附加组的用户
> 这四个用户配置文件通常不建议直接修改,如果修改的话最好用命令
> vipw和vigr 修改
> pwck和grpck 检查修改的文件语法有没有错误
– #### :useradd
语法:useradd [选项] 用户名
常用选项:
“`
-u UID
-o 配合-u 选项,不检查UID的唯一性
-g GID:指明用户所属基本组,可为组名,也可以GID号
-c “COMMENT”:用户的注释信息
-d HOME_DIR: 以指定的路径(不存在)为家目录
-s SHELL: 指明用户的默认shell程序
可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,…]:为用户指明附加组,组须事先存在
-N 不创建私用组做主组,使用users组做主组
-r: 创建系统用户 CentOS 6: ID<500,CentOS 7: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
“`
新建用户的相关文件有
/etc/default/useradd
/etc/skel/*
/etc/login.defs
– #### 批量创建用户
– #### newusers
newusers+参数(可以创建一个pass文档格式文件管道传给newusers)
– #### chpasswd
用法同上,批量修改用户口令
– #### usermod
– 语法:usermode [选项] 用户名
常用选项:
“`
-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,…[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-s SHELL:新的默认SHELL
-c ‘COMMENT’:新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字;
-L: lock指定用户,在/etc/shadow 密码栏的增加 !
-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期
-f INACTIVE: 设定非活动期限
“`
示例:把用户zhangxiao加到组xiaoxiao作为附加组
“`
[root@zhangxiao ~]# usermod -G xiaoxiao zhangxiao
[root@zhangxiao ~]# id zhangxiao
uid=500(zhangxiao) gid=500(zhangxiao) groups=500(zhangxiao),501(xiaoxiao)
“`
– #### userdel
语法userdel [选项]…用户名
选项- r 删除用户家目录
– #### id
语法:id+[选项]+用户名
常用选项:
“`
-u: 显示UID
-g: 显示GID
-G: 显示用户所属的组的ID
-n: 显示名称,需配合ugG使用
“`
示例:显示用户zhangxiao的UID
“`
[root@zhangxiao ~]# id -u zhangxiao
500
[root@zhangxiao ~]#
“`
– #### su
用法su [-] username
“`
su username:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
su – UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
“`
常用用法su [-] UserName -c ‘COMMAND’
– #### passwd
– 用法:passwd [OPTIONS] UserName:
“`
常用选项:-d:删除指定用户密码
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-f: 强制操作
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
–stdin:从标准输入接收用户密码
echo “PASSWORD” | passwd –stdin USERNAME
“`
– #### chage
修改用户密码时间
语法chage [OPTION]… LOGIN
“`
-d LAST_DAY
-E –expiredate EXPIRE_DATE
到期时间
-I –inactive INACTIVE
过期的宽限期
-m –mindays MIN_DAYS 最短可修改时间
-M –maxdays MAX_DAYS 密码的最长有效期
-W –warndays WARN_DAYS 提示时间
–l 显示密码策略
“`
– #### chfn
语法:chfn+username
指定用户信息
chsh:指定shell
– #### finger 查看所登录的用户及描述
示例
“`
[zhangxiao@zhangxiao ~]$finger
Login Name Tty Idle Login Time Office Office Phone
xiaoxiao zhangxiao tty3 Apr 3 10:45 bj 000
zhangxiao zhangxiao tty2 1:00 Apr 3 08:15
zhangxiao zhangxiao tty1 2:47 Apr 3 07:59 (:0)
zhangxiao zhangxiao pts/1 1:30 Apr 3 08:16 (vfn795y4y0a39yv.mshome.net)
zhangxiao zhangxiao pts/2 Apr 3 09:24 (vfn795y4y0a39yv.mshome.net)
[zhangxiao@zhangxiao ~]$^C
“`
– #### groupadd
语法:groupadd [OPTION]… group_name
“`
-g GID: 指明GID号
-r: 创建系统组
CentOS 6: ID<500
CentOS 7: ID<1000
“`
组属性修改:groupmod
– #### groupmod [OPTION]… group
-n group_name: 新名字
“`
-g GID: 新的GID
组删除:groupdel
groupdel GROUP
“`
– #### groupmems [options] [action]
options:
“`
-g, –group groupname 更改为指定组 (只有root)
Actions:
-a, –add username 指定用户加入组
-d, –delete username 从组中删除用户
-p, –purge 从组中清除所有成员
-l, –list 显示组成员列表
groups [OPTION].[USERNAME]… 查看用户所属组列表
“`
4月4日笔记
### 权限
修改文件的属主:chown
“`
chown [OPTION]… [OWNER][:[GROUP]] FILE…
用法:
OWNER
OWNER:GROUP
:GROUP
命令中的冒号可用.替换
-R: 递归
chown [OPTION]… –reference=RFILE FILE…
“`
示例:
“`
su root -c ‘chown zhang1.zhang1 ff1′
Password:
[zhangxiao@localhost ~]$
“`
– #### 修改文件的属组:chgrp
“`
chgrp [OPTION]… GROUP FILE…
chgrp [OPTION]… –reference=RFILE FILE…
“`
示例
“`
chgrp zhangxiao ff1
[zhangxiao@localhost ~]$ ll ff1
-rw-rw-r–. 1 zhang1 zhangxiao 0 Apr 5 10:07 ff1
[zhangxiao@localhost ~]$
“`
-R 递归
一个用户的token是登录的时候获取的,所以一旦我们改了用户的属性后新的token需要重新登录才能生效
– 目录的基础权限有三个
文件:
“`
r: 可使用文件查看类工具获取其内容
w: 可修改其内容
x: 可以把此文件提请内核启动为一个进程
目录:
r: 可以使用ls查看此目录中文件列表
w: 可在此目录中创建文件,也可删除此目录中的文件
x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录
X:只给目录x权限,不给文件x权限
“`
#### 文件的权限基本针对三类人
“`
owner: 属主, u
group: 属组, g
other: 其他, o
“`
– #### 修改文件权限:
chmod
语法:chmod(选项)(参数)
> 常用选项:-R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
> –reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
“`
chmod u+x,g+w ff1 //为文件f01设置自己可以执行,组员可以写入的权限
chmod u=rwx,g=rw,o=r f01
chmod 764 f01
chmod a+x f01 //对文件f01的u,g,o都设置可执行属性
“`
– #### umask
umask的本质含义是取消相对应的权限(二进制对位取消)
> 通常情况下新建的文件权限是:666-umask(对位相减)
> 新建的文件夹全是是:777-umask
umask用法
umask (022)
– #### SUID权限用数字4表示
“`
当用户执行程序时,临时集成其程序所有者的权限
只对二进制可执行程序有效
SUID设置在目录上无意义
权限设定:
chmod u+s FILE…
chmod u-s FILE…
“`
SGID:用数字2表示
“`
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属组为原程序文件的属组
权限设定:
chmod g+s FILE…
chmod g-s FILE…
“`
备注:如果给目录增加SGID权限则目录中新建的文件集成目录的所属组
– #### 粘滞位:sticky用数字1表示
一般粘滞位给文件夹用,使文件夹中的文件只能文件的所有者删除
用法:chmod o+t diename
– #### chattr
语法:chattr (选项 )+(属性) 文件或目录
选项:
“`
-R:递归处理,将指令目录下的所有文件及子目录一并处理;
-V:显示指令执行过程;
+<属性>:开启文件或目录的该项属性;
-<属性>:关闭文件或目录的该项属性;
=<属性>:指定文件或目录的该项属性。
“`
属性:
“`
a:(文件只可以追加内容)
A:锁定读取时间
b:不更新文件或目录的最后存取时间;
c:将文件或目录压缩后存放;
d:将文件或目录排除在倾倒操作之外;
i:不得任意更动文件或目录;
s:保密性删除文件或目录;
S:即时更新文件或目录;
u:预防意外删除
“`
备注:lhattr可以查看锁定的文件
– ### ACL
ACL权限是给文件或目录针对除所有者、所属组和其他人之外的人设置权限
命令
setfacl
“`
-m增加权限
-x删除权限
-b删除文件或目录的所有acl权限
-K:删除默认ACL权限
示例:
[zhangxiao@localhost ~]$ setfacl -m u:zhang1:6 ff2
[zhangxiao@localhost ~]$ getfacl ff2
# file: ff2
# owner: zhangxiao
# group: zhangxiao
user::rw-
user:zhang1:rw-
group::rw-
mask::rw-
other::r–
[zhangxiao@localhost ~]$
“`
用getfacl+文件名查看文件的所有权限包括acl权限
##### mask权限
mask给文件权限限高,对除owner和other外的所有人有效
用setfacl -m mask::【0(权限)】| +文件名
– ### 文本处理工具
– WC
语法wc(选项)(参数)
WC+文件名默认显示文件的 行数:单词(空格分割):字节:
“`
-c或–bytes或——chars:只显示Bytes数;
-l或——lines:只显示列数;
-w或——words:只显示字数。
“`
示例
“`
[root@localhost data]# wc fstab
12 60 541 fstab
“`
– #### cut
按照纵列方式切割文本并显示
语法:cut 【选项】+参数
“`
选项:-d:指定字段的分隔符,默认的字段分隔符为“TAB”;
-f:显示指定字段的内容;
-f 可以输出单一字段或者多个字段,多个连续字段用(-)连接 不连续字段用(,)连接
–out-delimiter=<字段分隔符>:指定输出内容是的字段分割符;
-c:仅显示行中指定范围的字符
“`
示例
“`
[root@localhost data]# cut fstab -d’ ‘ -f3
#
by
#
filesystems,
man
#
[root@localhost data]#
“`
– #### sort
语法:sort【选项】文件名
选项
“`
:-f:排序时,将小写字母视为大写字母;
-r:以相反的顺序来排序;
-t<分隔字符>:指定排序时所用的栏位分隔字符;
-k:表示已指定字段排序
-n:按数值大小排序
-u:去除重复
“`
“`
示例:
[root@localhost data]# sort -t: -k3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
zhangxiao:x:1000:1000:zhangxiao:/home/zhangxiao:/bin/bash
xiaoxiao:x:1001:1001::/home/xiaoxiao:/bin/bash
zhang:x:1002:1002::/home/zhang:/bin/bash
zhang1:x:1003:1003::/home/zhang1:/bin/bash
zhang3:x:1004:1004::/home/zhang2:/bin/bash
tomcat:x:1005:1005::/home/tomcat:/bin/bash
qemu:x:107:107:qemu user:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
“`
– #### uniq
用法:uniq 【选项】
通常和sort一起用
“`
-c显示每行重复的次数
-d仅显示重复的行
-u仅显示未重复的行
“`
– #### diff
“`
diff 命令的输出被保存在一种叫做“补丁”的文件中
使用 -u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件
patch 复制在其它文件中进行的改变(要谨慎使用)
适用 -b 选项来自动备份改变了的文件
$ diff -u foo.conf foo2.conf > foo.patch
$ patch -b foo.conf foo.patch
“`
4月6日
Linux的文本处理三剑客
> grep:文本过滤(模式:pattern)工具
> grep, egrep, fgrep(不支持正则表达式搜索)
> sed:stream editor,文本编辑工具
> awk:Linux上的实现gawk,文本报告生成器
– ### grep
作用是根据“pattern”对目标文件进行搜索,并且显示匹配到的行
这就是一个简单的脚本脚本的用途是显示hello
grep分三种
> 1:fgerp不支持正则表达式,但是搜索速度极快
> 2:gerp支持正则表达式
> 3:egerp支持扩展的正则表达式 有
用法:grep [OPTIONS] PATTERN [FILE…]
gerp常用的选项
-color=auto: 对匹配到的文本着色显示
-v: 显示不被pattern匹配到的行
-: 忽略字符大小写
-n:显示匹配的行号
-c: 统计匹配的行数
-o: 仅显示匹配到的字符串
-q: 静默模式,不输出任何信息
-A #: after, 后#行
-B #: before, 前#行
-C #:context, 前后各#行
-e:实现多个选项间的逻辑or关系
-w:匹配整个单词
-E:使用ERE
-F:相当于fgrep,不支持正则表达式
正则表达式的元字符有
“`
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母 [:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…)
[:digit:] 十进制数字 [:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
“`
匹配次数有
“`
* 匹配前面的字符任意次,包括0次
贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次
“`
位置锚定的字符有
“`
位置锚定:定位出现的位置
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词尾锚定;用于单词模式的右侧
\<PATTERN\> 匹配整个单词
“`
分组
“`
分组:\(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, …
“`
– #### 扩展的正则表达式和基本的正则表达式用法基本一样,但比基本的正则表达式方便,用法是在正则表达式的基础上去掉转义符
shell脚本基础
程序的编程风格分为两类
> 1:过程式:以指令为中心,数据服务于数据
> 2:对象式:以数据为中心,指令服务于数据
高级语言大致分为两种
> 编译:高级语言–>编译器–>目标代码
java,C#
> 解释:高级语言–>解释器–>机器代码
shell, perl, python
– ### shell脚本:
包含一些命令或声明,并符合一定格式的文本文件
> 格式要求:在shell脚本中
> 首行需要写shebang机制
> shebang写做#!,#!的作用是告诉cpu此程序是什么机制
示例:#!的写法
> #!/bin/bash
> #!/usr/bin/python
> #!/usr/bin/perl
> shell脚本的用途有:
> 自动化常用命令
> 执行系统管理和故障排除
> 创建简单的应用程序
> 处理文本或文件
简单的脚本可以由简单的命令组合而成。
脚本的基本结构
> #!SHEBANG
> CONFIGURATION_VARIABLES
> FUNCTION_DEFINITIONS
> MAIN_CODE
示例
“`
#!/bin/bash
#—————————
# my first script
# owner :zhangxiao
#—————————
echo “hello”
“`
2018.4.8
张笑
\^o^/\^o^/\^o^/\^o^/\^o^/\^o^/\^o^/\^o^/\^o^/\^o^/\^o^/\^o^/\^o^/\^o^/\^o^/\^o^/\^o^/\^o^/\^o^/
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/94321