导图社区 Linux
Linux 是一种自由和开放源码的类UNIX操作系统。本图将从0到1带你探究Linux的基础知识,包括部署虚拟环境安装linux系统、新手必须掌握的Linux命令、管道符、重定向与环境变量、Vim编辑器与Shell命令脚本等多个方面,相信你们能很快学会。
编辑于2019-02-13 23:58:59Linux
主题
四节-系统组成获取命令帮助
子主题
子主题
bash常见特性及文本查看
目录(directory)创建与删除
mkdir
mkdir:创建目录
mkdir -p : 按需求自动创建父目录
mkdir -v :显示详细过程
mkdir -m : 直接给定权限
rmdir
rmdir dir(空目录)
rmdir -p:删除模目录后,如果其父目录为空,则一并删除
rmdir -v :显示过程
bash的基础特性:命令行展开
~:自动展开为用户的家目录,或指定用户的家目录
{ } :可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径
例如:/tmp/{a,b}表示 /tmp/a /tmp/b
mkdir -pv tmp/x{y1/{a,b},y2}
mdkdir -pv {a,b}_{c,d}
tree:显示层级目录
tree -L 2 /etc 指定显示层级最大深度到2级
bash的基础特性:命令的执行状态结果
转态结果--bash通过状态返回值来数据此结果,命令执行后,其状态返回值保存于bash的特殊变量$?中
成功:0
失败:1-255
命令结果--命令正常执行时,有的还有命令返回值,根据命令及其功能不同,结果个不相同
引用命令的返回结果
${COMMAND}
mkdir $(date +%Y-%m-%d-%H-%M-%S)
`COMMAND` `是英文输入法的~
bash的基础特性:引用
强引用:' '
弱引用:" "
命令引用:` `
bash的基础特性:快捷键
Ctrl
Ctrl+a :跳转至行首
Ctrl+e :跳转至行尾
Ctrl+u :删除行首至光标所在处之间的所有字符
Ctrl+k :删除光标所在处至行尾之间的所有字符
Ctrl+l :清屏
Esc . : 获取上次命令后的参数
文本、文件查看命令
more/less分屏查看命令
more File :翻屏至文件尾部自动退出
less File : man 命令调用less命令
tail(常用与监控日志) : 查看文件的后n行
tail -n 5 file/tail -5 file : 查看后5行
tail -f : 查看文件尾部内容结束后不退出,跟随显示新增加的行
tail -f 10 file/tail -10f file显示后10行且不退出
tail -n 10 -f file
head
head File: 查看文件头(默认查看前10行)
head -n 20 file 或者head -20 file 查看前20行
stat(查看状态)
liunx文件有两类数据
元数据(metadata)
例如文章的索引,目录
例如stat查看的数据即为元数据(某些属性)
数据(data)
cat等命令查看的内容为数据
时间戳
最近访问(访问文件、读取数据流)
为了提高性能,对于短时间的频繁访问,则时间不会变化
最近更改(数据改变)
数据改变则元数据一定改变
最近改动(元数据改变)
touch
更改时间戳
touch -a : 仅修改访问时间(access time)
touch -m : 仅修改更改时间(modify time)
touch -t : 更改为指定的时间戳(格式:YYMMDDhhmmss)
touch -m -t 1201021212.12 /tmp/functions
touch -c file:指定的位文件路径不存在时不允许创建
cp mv rm(文件管理工具)
cp(copy)复制,针对的是元数据
源文件-->目标文件
单源复制
如果DEST不存在,则事先创建此文件,并复制源文件的数据流至DEST中
如果DEST存在
如果DEST是非目录文件,则覆盖目标文件
如果DEST是目录文件,则先在DEST目录下创建一个源文件同名的文件,并复制器数据流
多源复制
如果DEST不存在,报错,cp: 目标"/tmp/ll" 不是目录
如果DEST存在
如果DEST是非目录文件,则报错
如果DEST是目录文件,分别复制每个文件至目标目录中,并保持原名
cp的参数
-i : 交互式复制,即覆盖之前提醒用户确认是否覆盖
-f : 强制覆盖目录
-r/R : 递归复制目录
-d : 复制符号文件本身,而非其指向的源文件
-a : -dR --preserve=all,archive,用于归档
--preser=
mode : 权限
ownership : 属主和属组
timestamp : 时间戳
context : 安全标签
xattr : 扩展属性
links :符号链接
all : 上述所有属性
mv(move)移动,重命名
-i : 交互式
-f : force
rm(remove)
-i : interactive
-f : force
-r : recursive
删除目录: rm -rf /PATH/..
危险操作 : rm -rf /
所有不用的文件不建议直接删除,而是移动至某个专用目录(模拟回收站)
变量
定义:在程序中快速便捷的引用一段内存空间,实现数据存取的一种机制(命名的内存空间)
变量类型
字符型
数值型
精确数值
近似数值
变量类型决定了
存储格式
数据范围
参与运算
name=tom : 表示把tom变量存在name所指向的内存空间中
5节-运维必备知识-Linux用户组管理
Linux运维高级系统应用-glob通配及IO重定向
globbing(文件名通配)
* : 匹配任意长度的任意字符
? : 匹配任意单个字符
[] : 匹配指定范围内的任意单个字符
[a-z][ A-Z] [0-9] [a-z0-9]
[[:upper:]]:表示所有大写字母
[[:lower:]] : 表示所有小写字母
[[:alpha:]] : 所有字母
[[:digit:]] : 所有数字
[[:alnum:]] : 所有的字母和数字
[[:space:]] :所有的空白字符
[[:punct:]] : 所有的标点符号
[^] : 匹配指定范围外的任意单个字符
[^[:upper:]] : 除了大写字母之外的单个字符
[^0-9] : 除了数字之外的单个字符
[^[:alnum:]] : 除了字母数字之外的单个字符
IO重定向及管道
程序:数据+指令 程序 : IO
程序的数据流有三种
输入数据流:标准输入(stdin)键盘
输出的数据流:标准输出(stdout)显示器
错误输出流: 错误输出(stderr) 显示器
fd:file descriptor(文件描述)
标准输入:0
标准输出:1
错误输出:2
IO重定向
输出重定向: >
特性:覆盖输出
输出到文件:cat /etc/issue /tmp/issue.out
输出到设备:cat /etc/issue > /dev/tty1
/dev/null(数据黑洞,输出重定向) ->通过echo $?获取状态结果
例:head -1 /etc/passwd &> /dev/null
echo $? 状态结果是0,则表示passwd中有第一行;
输出重定向:>>
特性:追加输出(不会覆盖之前的内容)
cat a.txt >>b.txt
禁止覆盖 : set
特点:只对当前进程有效
set -C
禁止覆盖输出重定向至已存在的文件
例 cat a.txt >b.txt -bash: b.txt: 无法覆盖已存在的文件
set +C
解除禁止覆盖
强行覆盖 :>|
cat a.txt >| b.txt
错误输出重定向
2> : cat /etc/issue1 2> /tmp/issue2.out
2>> : cat /etc/issue2 2>> error.out
合并正常输出流和错误输出流(要么是正常、要么是错误结果)
&> : cat /etc/fstab &> /tmp/fstab.out
&>> : cat /etc/rc.d/init.d/function2s >> /tmp/function.out 2>&1
输入重定向
< : cat < /etc/issue
tr命令 tr [OPTION] .. SET1 [SET2]:
把输入的数据当中的字符,把SET1按照SET2对位转换
例:[root@localhost wxl]# tr [abc] [ABC] ac123 AC123
例: tr [a-z] [A-Z] < /etc/issue
tr -d
例:tr -d ‘a-z' < /etc/issue
显示删除小写字母的数据到屏幕
<< 与 EOF
例: cat > /tmp/test.out << EOF
将输入在屏幕的数据输入到test.out中
| 管道
将上一个命令的输出结构指定为下一个命令的输出
cat /etc/issue | tr 'a-z' 'A-Z'
who | head -2 | tr 'a-z' 'A-Z' | tr -d '0-9'
tee
cat /etc/issue | tee /tmp/issue.tee | tr 'a-z' 'A-Z'
上面命令是把从issue查到的内容通过tee存到issue.tee中一份,同时将内容再拿出一份执行tr 这个命令,同时输出到屏幕
Linux系统用户和组
用户
管理员 (0)
普通用户(1-65536)
登录用户(CentOS6:500-60000),(CentOS7:1000-60000)
系统用户(CentOS6:1-499),(CentOS7:1-999)
用户标识(UserID/UID)、密码
认证:Authentication
授权:Authorization
审计:Audition
名称解析:名称转换
Username <-->UID
根据名称解析库(/etc/passwd)解析
组
组类别一
管理员组 (0)
普通用户组(1-65536)
登录用户组(CentOS6:500-60000),(CentOS7:1000-60000)
系统用户组(CentOS6:1-499),(CentOS7:1-999)
组标识(GroupID/GID)、密码
认证:Authentication
授权:Authorization
审计:Audition
名称解析:名称转换
groupname <-->gid
根据名称解析库(/etc/group)解析
组类别二
用户的基本组
用户的附加组
组类别
用户私有组(组名同用户名,且包含一个用户)
公共组(组内包含多个用户)
认证信息
通过事先比对存储的,与登录时提供的信息是否一致
password
用户密码库:/etc/shadow
qimingxin:$6$ntJ9qvAn$7jKVJ0NuBOehf5Q5zZBWmjzaHePubkRunMJr/AtA00W6jHKE6Gn7Fox8jFcxYmRN5VkjrSrHRSfNrGmDp/VMd/:17888:0:99999:7:::
用户名:加密密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:过期期限:保留字段
用户组密码库:/etc/gshadow
qimingxin:!::
/etc/passwd
name:password:UID:GID:GECOS:directory:shell
wangxiaolin:x:1001:1001::/home/wangxiaolin:/bin/bash
wangxiaolin - 用户名
x - 密码
1001 - UID/userID
1001 - groupID
GECOS - 用户的注释信息
directory - 用户的家目录
shell - 用户登录时默认shell程序
/etc/group
组的信息库
group_name:password:GID:user_list
user_list:该组的用户成员,以此组为附加组的用户的用户列表
whatis /etc/passwd
whatis /etc/shadow
密码使用策略
使用随机密码
最短长度不低于8位
使用大写字母、小写字母、数字、标点符号主题
定期更换密码
加密算法
对称加密
加密和解密使用同一个密码
非对称加密
加密和解密使用的一对儿秘钥
公钥:public key
私钥:private key
单向加密
只能加密,不能解密:提取数据特征码
定长输出
root@localhost /# echo "1212313131232wllj" | sha512sum
224873c3574ffc94fc97ec10ded52f90e7faea04edff046c5a8a2dd8e8d5e41ed1c8650f0706b2ac1b6cec5370bba135a38b878d2850ad1f42eaf6d0548996a1 -
雪崩效应
root@localhost /# echo "1212313131232wllj" | md5sum
742f3380b37c2863296206f7f9670243 -
算法
md5
message digest(消息摘要) 5是版本号,128bit
sha
sercure hash algorithm(安全的哈希算法), 160bit
sha224
sha256
sha384
sha512
用户密码相同时,在计算之前加salt(添加的随机数)
wangxiaolin:$6$4FQyM0Z4$23hMFu.6ZOU/SjxLstbL8c9k5MOtDVcTX4fny.gpfCfSsmFVX/HMfhVWTo3DXQqIFCMRz5PSaWxmFZjuDHl3W1:17831:0:99999:7:::
qimingxin:$6$ntJ9qvAn$7jKVJ0NuBOehf5Q5zZBWmjzaHePubkRunMJr/AtA00W6jHKE6Gn7Fox8jFcxYmRN5VkjrSrHRSfNrGmDp/VMd/:17888:0:99999:7:::
命令
[root@localhost /]# su - wangxiaolin 上一次登录:一 12月 24 22:48:07 CST 2018pts/0 上
其他
finger
root@localhost ~# finger wxl Login: wxl Name: wxl Directory: /home/wxl Shell: /bin/bash Last login 四 1月 17 21:59 (CST) on pts/0
chfn
root@localhost ~# chfn dok Changing finger information for dok. 名称 []: DOK 办公 []: Uinnova 办公电话 []: 555 住宅电话 []: 111 Finger information changed.
root@localhost ~# finger DOK Login: dok Name: DOK Directory: /home/dok Shell: /bin/bash Office: Uinnova, 555 Home Phone: 111 Last login 三 1月 16 22:36 (CST) on pts/1
chsh
root@localhost /# chsh dok Changing shell for dok. New shell [/bin/tcsh]: /bin/bash Shell changed.
root@localhost /# chsh -s /bin/tcsh dok
groupmod(修改组的属性)
-g : 修改GID
-n : 修改组名
useradd
adduser
[root@localhost home]# file `which adduser`
/usr/sbin/adduser: symbolic link to `useradd'
-u :指定UID
例:useradd -u 3000 openstack
-g : 指定基本组ID,此组得事先存在
例:useradd -g docker -u 16666 dok
-c : 指明注释信息
useradd -c "王晓林" WXL
WXL:x:16667:16667:王晓林:/home/WXL:/bin/bash
-G:指明用户所属的附加组,多个用户之间逗号分隔
useradd -G docker docker1
docker:x:1003:docker1
-d : 以指定的路径为用户的家目录,通过复制/etc/skel此目录并重新命名实现;指定的家目录如果事先存在,则不会为用户复制环境配置文件;useradd -d /tmp/yy y
-s : 指定用户的默认shell,可用的所有shell裂表存在/etc/shells文件中
-r : 创建系统用户
-D : 显示创建用户对的默认配置,修改默认选项值
usermod
-u : 修改用户的UID
-U:解锁用户的密码
-G:修改用户的所述的附加组,原来的附加组会被覆盖
-a: 与 -G 一同使用,用于为用户追加新的附加组
-c: 修改注释信息
--g:修改用户的所属的基本组
-m: 用于将原来的家目录移动为新的家目录
-l: 修改用户名
-s:修改用户默认shell
-L:锁定用户密码,在用户原来的密码字符串之前加一个!
-d: 修改用户的家目录,用户原有的文件不会被转移至新的位置
userdel
-r:删除用户时一并删除其家目录
子主题
groupadd(添加组)
groupadd -g wxl :表示创建普通用户,g表示GID,默认是上一个组的GID+1
groupadd -r wxl : -r表示创建系统组
groupadd -r -g 100 wxl : -g表示创指定组ID号的系统组(1-999)
gpasswd
默认给组添加密码
当使用newgrp切换当前用户的数组时(且当前用户不在此组下,需要输入密码才可切换)
-a USERNAME : 向组中添加用户
-d USERNAME : 向组中移除用户
newgrp
临时切换所属组,eixt切换回最初的所属组
wxl@localhost ~]$ id uid=1000(wxl) gid=1000(wxl) 组=1000(wxl),1001(xiaolin) [wxl@localhost ~]$ newgrp xiaolin wxl@localhost ~]$ id uid=1000(wxl) gid=1001(xiaolin) 组=1000(wxl) ,1001(xiaolin)
加- : 会模拟用户已重新登录,以实现重新初始化其工作环境
chage
更改用户密码过期信息
-d -E -W -m -M
id
-u : 仅显示有效的UID
-g : 仅显示用户的基本组件
-G: 仅显示用户所属的所有组的ID
-n: 显示名字而非ID
su
完成用户切换
1、登录式切换(完全切换)
会通过重新读取用户的配置文件来重新初始化
su - USERNAME
[root@localhost ~]# su - wxl 上一次登录:四 1月 17 21:54:09 CST 2019pts/0 上 [wxl@localhost ~]$ pwd /home/wxl
su -l USERNAME
2、非登录式切换(半切换)
不会读取目标用户的配置文件进行初始化
[root@localhost ~]# su wxl [wxl@localhost root]$ pwd /root
注意
非管理切换其他用户时,必须要给出目标用户的密码
管理员切换其他用户无需密码
-c comand
不切换换用户,仅以指定用户的身份运行此处指定的命令
[root@localhost ~]# su - wxl -c 'whoami' wxl [root@localhost ~]# whoami root
passwd
passwd:修改用户自己的密码
passwd username : 修改自动用户的密码,当仅root有权限
-l -u :锁定和解锁用户秘密
-d:清楚用户秘密串
-e DATE:过期期限,日期
-i DAYS: 非活动期限
-n DAYS:密码使用最短期限
-x DAYS:密码最常使用期限
-w DAYS:告警期限
--stdin
通过管道方式,重定向到标准输入
echo "PASSWORD" | passwd --stdin USERNAME
[root@localhost home]# echo 555 | passwd --stdin docker 更改用户 docker 的密码 。 passwd:所有的身份验证令牌已经成功更新。
[root@localhost home]# echo 555 | passwd --stdin docker &> /dev/null 不输出到屏幕 ,使用echo $? 结果为0,则是标准输入,表示修改成功
权限管理
rwxrwxrwx
左三位: 定义user(owner)的权限
中三位:定义group的权限
右三位:定义other的权限
进程对文件的访问权限应用模型
进程对文件的访问权限 (检查进程的属主与文件的属主是否相同)
1、若相同,则应用属主权限(左三位)
2、否则,检查进程的属主是否属于文件的属组,如果是,则应用属组权限(中三位)
3、否则,只能应用其它的权限(右三位)
权限
r :readable 可读
w : writable 可写
x :excutable 可执行
文件
r : 可获取文件的数据
w : 可修改文件的数据
x : 可将此文件运为进程
默认情况下,文件一般不应该有执行权限
目录
r : 可使用ls命令获取其下的所有列表
w : 可修改此目录闲得文件列表,即创建或删除文件
x :可cd至此就目录中,且可以使用ls -l来获取所有文件的详细属性信息
mode
rwxrwxrwx
ownership
user , group
权限组合机制
--- 000 : 没有任何权限
--x 001 : 只有执行权限
-w- 010 : 只有写权限
-wx 011 : 只有写、执行权限
r-- 100 : 只有读权限
r-x 101 : 只有读、执行权限
rw- 110 : 只有读、写权限
rwx 111 : 读写执行权限都有
权限管理命令
三类用户
u : 属主
g : 属组
o : 其它
a : 所有
chmod
1、chmod [OPTION]... MODE[,MODE]... FILE...
赋权表示法
赋相同权限时,可以写在一起 ugo=
chmod ugo=rwx WXL
赋不同权限时,可以分开写 u=,g=,o=
chmod u=rxw,g=rxw,o=rxw WXL
授权表示法
u+ u- g+ g- o+ o-
chmod u-rw WXL
chmod ug+x WXL
chmod ugo-wr WXL
注意 :执行 chmod +w 查看赋权结果:d-wx--x--x. 2 root root 6 1月 20 20:46 WXL
+w 全局性写是一个危险的操作,一般不允许所有人对文件有写的权限;所以以上只给属主赋予写的权限
2、chmod [OPTION]... OCTAL-MODE FILE...
八进制表示法
chmod 660 uiv.txt
-rw-rw----. 1 root root 0 1月 20 21:27 uiv.txt
chmod 66 uiv.txt
----rw-rw-. 1 root root 0 1月 20 21:27 uiv.txt
660 66 不一样赋权,不要省略权限位置
3、chmod [OPTION]... --reference=RFILE FILE...
参考其它文件的权限修改当前文件的权限
-rwxrwxrwx. 1 root root 0 1月 20 21:39 test.txt* -rw-rw----. 1 root root 0 1月 20 21:38 uiv.txt
chmod --reference test.txt uiv.txt
rwxrwxrwx. 1 root root 0 1月 20 21:39 test.txt* -rwxrwxrwx. 1 root root 0 1月 20 21:38 uiv.txt*
参数 -R 递归参数
在授权表示法处使用较多,其它方式不常使用。目录有执行权限,文件通常不随便给与执行权限
chmod 700 skel/
drwx------. 3 root root 78 1月 20 21:47 skel/
skel/下的文件 drwxr-xr-x. 4 root root 39 1月 20 21:47 .mozilla/
chmod 700 -R skel/
drwx------. 3 root root 78 1月 20 21:47 skel/
skel/下的文件 drwx------. 4 root root 39 1月 20 21:47 .mozilla/
chown
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown -R docker mytest/
chown -R wxl:docker1 mytest/
chmod -R root.root mytest/
chown [OPTION]... --reference=RFILE FILE...(后面参考前面文件)
chown -R --reference fish.wxl/ mytest/
-R : 递归修改
chgrp
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
-R : 递归修改
只能用来修改属组
用户对目录有权限,对目录下的文件没有写权限,不能修改此文件内容,但是可以删除此文件
umask
文件的权限反向掩码/遮罩码 : umask查看当前umask,默认是0022
root和非root用创建同一个文件或者目录时,文件或目录的权限不同
目录默认权限
777-umask
文件默认权限
666-umask
之所以用666去减是因为,文件默认情况不应该有执行权限 ;
例如umask为023,则666-023为643,则需要在加1,为644;
因此,如意购减得的结果中有执行权限,则需要将其加1;
umask MASK : 设置umask
install
copy files and set attributes
单元复制 :install [options] [-s] [--strip] source dest
多源复制 :install [options] [-s] [--strip] source... directory
创建目录 :install [options] [-d,--directory] directory...
-m : 设定目标文件权限,默认是755
-o : 设定目标文件的的属主
-g : 设定目标文件的数组
install -o wxl -g docker -m 640 /etc/inittab /tmp/
-d : 创建一个空目录
mktemp
mktemp - create a temporary file or directory
创建一个临时文件通过命令引用保存到变量myfile中
[root@localhost home]# myfile=$(mktemp /tmp/mytmp.XXXXXX) [root@localhost home]# echo $myfile /tmp/mytmp.LRa5xj
在tmp下创建的临时文件一个月会被删除,如果不在tmp下有可能不会被删除
-d : 创建临时目录
六节-Bash基础及shell编程初步
shell脚本基础-bash变量和逻辑运算
hash
查看缓存中的命令
-d :hash -d cat : 忘记每一个已经记住的命令的位置(删除记住的命令)
-r :忘记所有位置,清空哈希表
查找结果:key-value
key : 搜索键
value :值
变量
变量赋值: name=value
程序 = 指令 + 数据
指令 : 由程序文件提供
数据 : IO设备、文件、管道
变量名 :表示的是指向某一段内存空间的起始地址
变量类型 : 存储格式、数据范围、参与的运算
变量替换
把变量名出现的位置替换为其所指向的内存空间中的数据
变量引用
$(var_name),$var_name
编程语言
强类型变量
弱类型变量
bahs把所有的变量统统视为字符型
bash中的 变量无需事先声明
bash的变量类型
本地变量
作用域仅为当前shell进程
变量赋值 : name=value
变量引用 : $(name),$name
" " :变量名会被替换为其值
' ' : 不会被替换为其值
查看命令: set
撤销变量 : unset name
环境变量
作用域仅为当前进程及其子进程
变量赋值
方法一、export name=value
方法二、name=value export name
方法三、declare -x name=value : (x表示环境变量)
方法四、name=value declear -x name
变量引用 : $(name),$name
查看变量 : declare -x 、printenv、env、export
撤销变量:unset name
只读变量
1、declear -r name
2、readonly name
无法修改只读变量的值,也无法撤销
存活时间为当前shell进程的生命周期,随shell的进程终止而终止
局部变量
作用域仅为某代码片段(函数上下文)
子主题
位置参数变量
向当前执行的脚本的shell进程传递的参数
特殊变量
通常是shell内置的有特殊功能的变量
$? : 保存上一个命令的执行结果
0 : 成功
1-255 :失败
bash内嵌了许多环境变量(通常全为大写字符),用于定义bash的工作环境
例如: PATH 、HISTFILE 、HISTSIZE 、HISTFILESIZE 、HISTCONTROL
多命令执行
逻辑运算
运算数
真(true,yes,on,1)
假(false,no,off,0)
与
1&&1=1
1&&0=1
0&&1=0
0&&0=0
或
1||1=1
1||0=1
0||1=1
0||0=0
非
!1=0
!0=1
短路法则
COMMAND1&&COMMAND2
COMMAND1为假,则COMMAND2不执行;
COMMAND1||COMMAND2
COMMAND1为真,则COMMAND2不执行
例如:touch /tmp/test.etc && ls /etc > /tmp/test.etc
Bash基础及shell编程初步
编程语言的分类
根据运行方式
编译运行:源代码->编译器(编译)->程序文件
解释运行:源代码->运行时启动解释器,有解释器边解释边运行
根据其编译过程中功能的实现是调用库还是调用外部的程序文件
shell脚本编程
利用系统上的命令及编程组键进行编程
完成编程
利用库或编程组件进行编程
编程模型
过程式编程语言
以指令为中心来组织代码,数据是服务于代码
顺序执行
选择执行
循环执行
对象式编程语言
以数据为中心来组织代码,围绕数据组织指令
类(class):实例化对象,method;
shell脚本编程
过程式编程
解释运行
依赖于外部程序文件
如何写shell脚本
脚本文件的第一行
顶格:给出shebang,解释器路径,用于指明解释执行当前脚本的解释器程序文件
常见的解释器:
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
子主题
文本编辑器
全屏编辑器: nano、vi、vim
行编辑器:sed
shell脚本是什么
命令的堆积
但是很多命令不具有幂等性,需要用程序逻辑来判断运行条件是否满足,一避免其运行中发生错误
如何运行脚本
方法一:赋予执行权限,并直接运行此程序文件
./myfirst.sh
方法二:
直接运行解释器,将脚本以命令行参数交给解释器程序
bash myfirst.sh
脚本中的空白行会被解释器忽略
脚本中,除了shebang,余下的以#字开头的行,都会被注释而被忽略,此即为注释行;
注意:shell脚本的运行是通过运行一个子shell进程实现的
bash的配置文件
profile类
为交互式登陆的shell进程提供配置
全局:对所有的用户都生效
/etc/profile
/etc/profild.d/*.sh
用户个人:仅对当前用户有效;
~/.bash_profile
功能:
1、用于定义环境变量
2、运行命令或脚本
bashrc类
为非交互式登录的shell进程提供配置
全局:/etc/bashrc
用户个人:~/.bashrc
功能:
1、定义本地变量
2、定义命令别名
登录类型
交互式登录shell
直接通过某终端输入账号和密码后登录打开的sehll进程
使用命令 su - USERNAME ,或者使用su -l USERNMAE执行的登录切换
读取顺序:/etc/profile-->/etc/profile.d/*-->~/.bash_profile-->~/.bashrc-->/etc/bashrc
非交互式登录shell进程
su USERNAME自信的登录切换
图形界面打开的终端
运行脚本
读取顺序:~/.bashrc-->/etc/bashrc-->/etc/profile.d/*
注意:
命令行中定义的特性,例如变量和别名的作用域为当前shell进程的生命周期;
配置文件定义的特性,只对随后新启动的shell进程有效
如何让配置文件定义的特性立即生效
1、通过命令行重复定义一次
2、让shell进程重读配置文件
source /PAHT/FORM/CONF_FILE
. /PATH/FORM/CONF_FILE
文本处理工具
文本处理三剑客
grep
文本过滤工具(模式:pattern)工具;
作用:
文本搜索工具,根据用户指定的"模式(过滤条件)",对目标文件逐行进行佩佩检查,打印匹配的行;
模式
有正则表达式的元字符及文本字符所编写出的过滤条件
grep "dev" /etc/fstab
sed
stream editor,流编辑器,文本编辑工具
awk
Linux上的实现为gawk,文本报告生成器(格式化文本)
正则表达式
Regual Expression(REGEXP)
由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能;
1、基本正则表达式
BRE
2、扩展正则表达式
ERE
元字符:\(hello[[:space:]]\+\)\+
子主题
主题
主题
主题
su -sh file : 查看文件大小
注意:用户仅能修改属主为自己的那些文件的权限
注意:仅管理员可修改文件的属主和数组
主题
pstree : 进程树
主题