shell
shell简介
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核
shell实现对Linux系统的大部分管理例
1. 文件管理
2. 用户管理
3. 权限管理
4. 磁盘管理
5. 软件管理
6. 网络管理
shell脚本优势
批量处理,自动化减少人为失误
shell底层的实现原理
shell底层也是用c语言实现的
shell注意事项
1、Shell脚本的开头必须先输入 #!/bin/sh 或 #!/bin/bash 。
2、#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。/bin/bash指明解释器的具体位置。
3、完成脚本后,要使脚本具有执行权限
$ sudo chmod +x ./test.sh
4、运行shell脚本时,两种方式,例如脚本名为test.sh:
./test.sh 或者 sh test.sh
5、使用变量名时,最好在变量名前加$
6、保存退出 :wq
不保存退出:q!
7、开始输入字符:i/inter键—插入,a—输入下一个字符,o—在下一行输入字符。
8、Linux允许将命令执行结果重定向到一个文件,将本应显示在终端上的内容输出/追加到指定文件中,其中:
> #表示输出,会覆盖文件原有的内容
>> #表示追加,会将内容追加到已有的文件的末尾。
9、脚本内一行中可输入多句命令,用 ; 隔开即可。
10、推荐给所有变量加上花括号
有无;都是一样的
11、$# 显示传递的参数的总个数
$* 将传递的参数均列出来
$@ 将传递的参数均列出来
{$* 和 $@ 都表示传递给函数或脚本的所有参数。但当它们被双引号(" ")包含时,表现有所不同。详情可见
shell语法注意事项
变量赋值
必须有空格
[ ]表示条件测试。注意这里的空格很重要。要注意在'['后面和']'前面都必须要有空格
[ ]表示条件测试。字符串、数值、逻辑运算 中间的符号(= 、eq、 )前后都统一加空格;
花括号
获取变量值都加上花括号{},便于阅读,也容易出错;
双引号
“$” "\" "." 有特殊含义,其他没有特殊含义;echo “${name}” 输出tongy
规范:所有变量引用都加双引号 "${name}"
规范:所有的变量赋值,要是字符串都加引号 name="tongy"
单引号、反引号 “ ` ”
单引号:所有的字符都没有特殊含义;echo ‘${name}' 输出${name}
双引号:“$” "\" "." 有特殊含义,其他没有特殊含义;echo “${name}” 输出tongye;规划所有变量引用都加双引号
反引号:反引号中用来引用系统命令,其中的内容会被优先执行,功能和$()一样。规范的写反都用$()来表示
shell语法
变量:字符串、数字、环境和参数;
条件:shell中的布尔值;
程序控制:if、elif、for、while、until、case;
命令列表;
函数;
Shell内置命令;
获取命令的执行结果;
Here文档;
主要的环境变量
$HOME 当前的家目录
$PATH 以冒号分隔的用来搜索命令的目录列表
$0 shell脚本名字
$# 参数的个数
$$ Shell脚本的进程号,脚本程序通常会用它来生成一个唯一的临时文
字符串比较
st1 = st2 判断两个字符串是否相等
st1 != st2 判断不相等
-n st 如果字符串为空,结果为真
-z st 如果字符串韦null 结果为真
算术比较
expression1 -eq expresssion2 两个表达式相等为真
expression1 -ne expresssion2 两个表达式不相等为真
expression1 -gt expresssion2 1大于2 结果为真
expression1 -ge expresssion2 1大于等于 结果为真
expression1 -lt expresssion2 1小于2 结果为真
expression1 -le expresssion2 1小于等于2 结果为真
!expression 表达式为真,则结果为假,反之
文件条件测试
-d file 文件是一个目录结果为真
-e file 文件存在为真
-f file 文件为普通文件为真
-g file 文件的set-group-id位被设置为真
-u file 文件的set-user-id位被设置为真
-r file 文件可读为真
-s file 文件大小不为0为真
-w file 文件可写 为真
-x file 文件可执行为真
控制结构
1、if
if [ 条件判断式 ]
then
语句
fi
2、if -else
if [ 条件判断式 ]
then
语句1
else
语句2
fi
3、if-elif-else
语句1
elif [ 条件判断式2 ];then
语句2
elif [ 条件判断式3 ];then
语句3
……
else
语句e
fi
4、case
case $变量名 in
"值1")
语句1
;;
"值2")
语句2
;;
……
*)
语句*
;;
esac
5、while
while [ 条件判断式 ]
do
语句
done
6、for
注意:在for循环中表达式不需要使用-gt -ne等等 可以使用 = > >= 等
7、for in
for 变量 in 计算值1 计算值2 计算值3 ……
do
语句
done
命令
break
:
.continue
echo
eval
exec
exit n
export
expr
find主要选项和常用测试
-depath 查看目录之前先搜索目录本身
-follow 跟随符号链接
-maxdepaths N 最多搜索n层目录
-mount (-xdev) 不搜索其他目录下的文件
-atime N 文件在N天之前被最后访问过
-mtime 文件在N天之前被最后修改过
-user username 文件的拥有者是指定的用户username
最常用的特殊符号
^ 指向一行的开头
$ 指向一行的结尾
. 任意单个字符
[]方括号内包含一个字符范围,其中任何一个字符都可以被匹配;
linux常用命令
目录操作
切换目录 cd
查看目录 ls
-l 列出文件详细信息 或者直接ll
-a 列出当前目录下所有文件及目录,包括隐藏的a(all)
创建目录 mkdir
-p 创建目录,若无父目录,则创建p(parent)
输出信息 echo
打印文件到命令行(查看文件) cat
改变文件所属用户 chown
改变文件所属组 chgrp
下载文件 wget
在文本文件中查找某个字符串 grep
统计文本中行数、字数、字符数 wc
部分显示 more/less
查找文件 find / -name 'auto.cnf'
创建空文件 touch
复制文件 cp
移动或重命名 mv
删除文件 rm
-r 递归删除,可删除子目录及文件
-f 强制删除
删除空目录 rmdir
树形结构显示目录,需要安装tree包 tree
显示当前目录 pwd
创建链接文件 ln
分页显示文本文件内容 more、less
显示文件头、尾内容 head、tail
vim操作
进入编辑器 vi/vim,vim三种模式:命令模式、插入模式、编辑模式。使用ESC或i或:来切换模式。
进入编辑模式插入 i
退出编辑模式 esc
保存:后面输入w
退出:后面输入q
不保存退出:后面输入q!
显示行号 set number
查找关键字 /xxxx 按n跳到下一个,shift+n上一个
复制光标所在行,并粘贴 yyp
h(左移一个字符←)、j(下一行↓)、k(上一行↑)、l(右移一个字符→)
打包压缩相关命令
打包压缩 tar\gzip\bzip2
-c归档文件
-x 压缩文件
-z gzip压缩文件
-j bzip2压缩文件
-v 显示压缩或解压缩过程 v(view)
-f 使用档名
例:
只打包,不压缩:tar -cvf /home/abc.tar /home/abc
打包,并用gzip压缩:tar -zcvf /home/abc.tar.gz /home/abc
打包,并用bzip2压缩:tar -jcvf /home/abc.tar.bz2 /home/abc
如果想解压缩,就直接替换上面的命令 tar -cvf / tar -zcvf / tar -jcvf 中的“c” 换成“x” 就可以了。
Linux管道
将一个命令的标准输出作为另一个命令的标准输入。也就是把几个命令组合起来使用,后一个命令除以前一个命令的结果。
例:grep -r "close" /home/* | more 在home目录下所有文件中查找,包括close的文件,并分页输出。
三种基本权限
R:读,数值表示为 4
W:写,数值表示为 2
X:可执行,数值表示为1
后台运行
运行 nohup command >out.file 2>&1 &
退出 ps -ef |grep 关键字 |awk '{print $2}'|xarg kill -9
服务方式运行
设置开机启动 systemctl enable
启动systemctl start
关闭systemctl stop
系统管理命令
显示指定文件的详细信息,比ls更详细 stat
显示在线登陆用户 who
显示当前操作用户whoami
显示主机名hostname
显示系统信息uname
动态显示当前耗费资源最多进程信息top
显示瞬间进程状态 ps \ ps -aux
查看目录大小 du -h /home (带有单位显示目录信息)
查看磁盘大小 df -h (带有单位显示磁盘信息)
查看网络情况 ifconfig
测试网络连通 ping
显示网络状态信息 netstat
命令不会用了,看文档 如:man grep
防火墙
查看防火墙状态 firewall-cmd --state
停止防火墙 systemctl stop firewalld.service
禁止firewall开机启动 systemctl disable firewalld.service
关机和重启
关机 shutdown -h now
-r 关机重启
-h 关机不重启
now 立刻关机
重启 reboot
关机 halt
网络配置
查看网卡信息 ifconfig
网络配置 /etc/sysconfig/network-script/ifcfg-eth0
配置网卡 /etc/udev/rules.d/70-persistent-net.rules
用户管理
创建用户 useradd
设置密码 passwd
存储组账号 /etc/group
系统用户配置文件 /etc/passwd
存储用户账号的密码 /etc/shadow
存储用户组账号的密码/etc/gshadow
用户名useradd
用户名userdel
用户名adduser
组名groupadd
组名groupdel
更改文件的用户及用户组
chown
sudo chown [-R] owner[:group] {File|Directory}