Linux的super super super easy教程 | shell基本命令及基本脚本

在sudoers文件里:

huang这个用户只能用USERMANAGER

到底是sudo好,还是suid权限好,给用户授权的时候?

还是sudo好 控制的更加精准 比较安全

Suid是不分用户,任何用户都可以执行

Sudo是认用户名的,不是任何都可以执行的,sudo要更加精准

Linux下面的正则一般是用来过滤的 和grep命令相结合

grep是每一行作为一个元素进行匹配  

       -v是取反

       -n 添加行号

过滤空行:grep “^$” 文件名   (过滤文件里面的所有空行)

Python里面的匹配时字符匹配 Linux里面的时一行一行匹配

newgrp:一个用户的附属组有多个组  newgrp 命令切换用户的有效组

newgrp [群组名称]

SELinux:是一个Linux系统的一个安全方面的子系统,用来提升Linux的整体的安全级别

所以一般会关闭SELinux

临时关闭:

永久关闭SELinux:

修改

将SELinux等于后面改为disabled

shell编程:

开发先行!

shell编程只能用在Linux里面

shell编程有时间相关 日志分析类 监控类 一键部署类 安全类 用户管理类 备份类 数据库操作类

  1. 抽奖程序:从班级名单里随机抽取学生名字

学生名单:student_name.txt

产生随机数 RANDOM

产生1-15的随机数((RANDOM%15+1))

在双圆括号里面 变量名可以不接$

双圆括号也可以不空格 双中括号有空格

  1. 监控类:内存的使用率

top

free -m

双圆括号里面只能是整数运算

bc是Linux的计算器 使用bc进行小数的运算和比较

scale=n 表示精确到小数点后n位

bc进行小数的比较 看输出值 不能看$?

vim mem_monitor.sh

  1. 局域网扫描工具:知道哪些ip地址在使用,哪些没有使用

Ping命令

-c 1 只ping一次

-w 1 ping不通就1秒

两行代码可以替换成 echo “Host $i is up”|tee -a up.txt

组合一个案例集:

$? 代表上一条命令执行的返回值 0 1

返回值:不等于输出结果

 0 说明上一条命令执行成功   非0  说明上一条命令执行失败

token 理解为不能再进行分割的部分

eval:执行2次

如:myfile=’cat test.txt

echo $myfile 显示cat test.txt 这个字符串

eval $myfile 显示test.txt里面的内容(第一次提取出cat test.txt 第二次执行cat test.txt)

执行命令的过程是内核创建进程

if 命令(若是命令执行成功,if会拿到返回值0,故if自动判断执行成功,执行if后面内容)

vim编辑器 V选中  shift+>缩进

串行:一个一个的执行 有顺序的执行的

并行:同时执行,不分顺序

shell里的多进程并行:大大提升了速度

(命令)& :启动一个子进程去执行命令,并且将这个命令放到后台执行

()表示启动子进程

& 表示扔到后台去进行

前台:人可以看到的界面

后台:人看不到的程序界面

为什么串行顺序是对的,而并行顺序是乱的?

并行:

进程调度的先后顺序不一样

在就绪队列到运行队列里面run的时候就有一定的随机性

强类型 弱类型  静态和动态

go语言是解释型

ss -anplut|grep sshd :查看sshd占用了哪个端口

登录shell:远程或本地 输入用户名密码

Sshd运行bash

然后bash运行

Shell启动配置文件的区别:

/etc/profile:配置全局环境变量(变量和函数 别名),影响所有用户

~/.bash_profile:配置个人环境变量,影响一个用户

/etc/bashrc:配置全局的别名或者函数,影响所有用户

~/.bashrc:配置个人别名或者函数,影响一个用户

影响全局:所有人

/etc/profile,/etc/bashrc

影响局部:个人

~/.bashrc ,~/.bash_profile

非登录shell:

直接敲bash 只执行~/.bashrc

Shell脚本的4种执行方式:

bash a.sh 和./a.sh  调用子bash进程

(子进程调用不了父进程的私有变量 若要调用 需要export 变量名)

. a.sh   当前bash里运行

source a.sh  当前bash里运行

$$ 当前终端的pid号

pstree -p 显示所有的进程tree

export 变量名:就把变量变成全局变量

bashrc中的rc :runing config ==》运行哪些配置

unset 取消变量

位置变量只能传到传到脚本主体里,但是脚本里函数不能直接使用位置变量,因为相当于传了两层,如果函数想调用就需要用变量接受一下

shell变成里面的函数定义

函数名()

{

       函数体

       函数体里面的return语句没有什么用   一般不怎么用

}

shell里调用函数不需要加小圆括号 只需要写函数名就好了

间接引用:shell中值不会传递

如 a=10;b=a;

echo b得到的结果为a

若echo ${!b} 得到的结果为10 (也就是引用了两次 间接引用)

${#变量名}:得到变量的长度

for循环取出所有位置变量

for i in “$*”:

自增方法:

((n++))或者((++n))

let n++ 或者 let ++n

这里不用eval会报错:报错显示num1=$1不是命令

所以需要eval 进行两次调用 第二次调用才能把位置参数真正的赋值给脚本里的变量

产生子进程的四个方法:

1.& 提交给后台作业

2.()

3.执行外部脚本,程序 如直接敲bash 或者 mkdir

4.管道符号 后面那个命令也相当于开了一个子进程

定义新的函数:推荐用第二种

1.function 函数名

{

       命令序列

}

2.函数名()

{

       命令序列

}

调用函数:直接敲函数名

像函数内传参(可以使用位置参数)但不是脚本外面的位置参数

main函数:一般脚本最后一个写main函数,通过case语句去调其他函数

默认函数里的变量是全局变量 ,其他函数也可以使用

local 变量名:表示变量只能在函数中使用

return表示函数返回值:范围是0-255

遇到return就退出函数且后面的语句不再执行

而遇到exit是退出(脚本)子bash进程      exit后面可以接数字作为退出进程的返回值

变量=$(函数)  把函数的输出结果赋值给变量 而不是把返回值赋值给变量

每个脚本只需要一条语句调用库文件即可:

 . 库文件名字或者source 库文件名字(相当于import 库文件)

. /etc/init.d/functions(shell里面的库文件)

看懂这四个脚本

case语句:

case 变量值 in

模式1)

       命令序列

       ;;

模式2|模式3)

       命令序列

       ;;

……

*)

       命令序列

       ;;

esac

while循环:

 

无线循环的写法:

while

while true

while [1]

在shell编程里面 i++和++i是有区别的

++i:先运算再赋值

i++:先引用再运算

 

grade文件中一行有3个变量,且用空格分开,while会自动识别并且赋值

也可以只用一个变量 代表整行

locale可以查看语言编码

产生10-200之内的数字 $((RANDOM%190 +10))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值