Linux系统命令及Shell脚本实践指南笔记

系统运行级别


运行级0:关机
运行级1:单用户模式,系统出现问题时可使用这种模式进入系统维护,典型的使用场景


就是在忘记root密码时可进入次模式修改root密码。
运行级2:多用户模式,但是没有网络连接。
运行级3:完全多用户模式,这也是Linux服务器最常见的运行级。
运行级4:保留未使用。
运行级5:窗口模式,支持多用户,支持网络。
运行级6:重启。


系统用户指的是系统运行时必须有的用户,比如在redhat或者centos下运行网站服务时


,需要使用系统用户apache来运行httpd进程,而运行mysql数据库服务时,使用系统用


户mysql来运行mysqld进程,1-499为系统用户进程。


id命令 确定自己的uid


finger 调查用户


who命令,查询当前在线用户


groups命令,确认自己所属的用户组


at单一时刻执行一次任务 他at  now + 30minutes


atq  查询at的任务队列


/etc/passwd和/etc/shadow


grep 搜索文本
sort 排序 -n采取数字排序 -t指定分隔符 -k指定第几列 -r 反向排序


cat abc.txt | sort | uniq  删除重复
uniq -i忽略大小写 -c 计算重复行数
 
cut截取文本  -f 指定的列  -d '分隔符'


cat /etc/passwd | tr '[a-z]' '[A-Z]' 小写替换成大写


cat /etc/passwd | tr -d ':' 删除':'


paste b.txt a.txt  文本合并  按行的 
paste -d: a.txt b.txt 使用分隔符合并


ifconfig 网络连接配置命令


host  查询DNS记录的   host www.baidu.com   出现的地址可以放到浏览器上看一下


ps  top  查看进程


kill 终止进程


基础的正则表达式


“.”(一个点)符号
点符号用于匹配除了换行符之外的任意一个字符
eg: grep 'r..t' /etc/passwd
搜索出包含r后面带两个字符然后是t的字段


“*”符号
星符号用于匹配前一个字符0次或者任意多次
eg: grep 'r*t' /etc/passwd
搜索出包含连续零个或几个r之后接一个t的字段
eg: grep 'r.*t' /etc/passwd
搜索出包含r,后紧跟任意长度字符在跟一个t的字段


“\{n,m\}”符号
\{n\}匹配前面字符n次
\{n,\}匹配前面字符至少n次
eg: grep 'r\{1,\}' /etc/passwd


“^”符号 尖角号
匹配开头的字符
eg: grep ^root /etc/passwd
匹配root开头的行


“$”符号 
匹配尾部字符
eg: grep '^r.*h$' /etc/passwd
匹配r开头h结尾的




“[]”符号
集合匹配
eg: grep '^[a-c]' /etc/passwd
匹配a-c开头的行


“\”符号
 转义字符
[\ \-]就是有空格和短横杠
\\反斜杠 \.点


“\d”符号
匹配一个数字等价于[0-9] 是一种Perl兼容模式表达式
eg: echo 123 | grep [0-9]
eg: echo 123 | grep -P '\d'


“\<”符号和“\>”符号
用于界定单词的左右边界
eg: echo "hello" | grep '\<hello\>'
eg: echo "hellod" | grep '\<\hello>'


“\b”符号
匹配单词的边界
eg: echo "hellodd" | grep 'hello\b' 不可匹配
eg: echo "hellodd" | grep '\bhello' 可匹配


“\B”符号
匹配非单词边界
eg: echo "hellodd" | grep 'hello\B' 可匹配


“\w”符号
匹配字母数字和下划线 等价于 [A-Za-z0-9]
eg: echo "a" | grep '\w' 匹配
eg: echo "\\" | grep '\w' 不匹配


“\W”符号
匹配非字母、非数字、非下划线 等价于[^A-Za-z0-9]
eg: echo "\\" | grep '\W' 匹配


“\n”符号
匹配一个换行符


“\r”符号
匹配一个回车符


“\t”符号
匹配一个制表符




“\f”符号
匹配一个换页符


“\s”符号
匹配任何空白字符


“\S”符号
匹配任何非空白字符


扩展的正则表达式
需要使用egrep
“?”符号
用于匹配前一个字符0次或1次,所以“ro?t”仅能匹配rot或者rt


“+”符号
用于匹配前一个字符1次以上,所以“ro+t”可以匹配 rot  root


“|”符号
多种可能的罗列,彼此间是分支关系


区号是3、4位的固定电话的正则表达式
()与| 
eg: ^0[0-9]\{2,3\}(-| )[0-9]\{8\}
021-88888888和0511 88888888 都可以匹配 
^0[0-9]\{2,3\}[\ \-][0-9]\{8\}
相同的


eg: h(ar|oo|ol)d  可以匹配 hard、hold或hood


eg: grep -c '^$' /etc/passwd
计算文件中有多少空行


eg: grep '^[^cr].*h$' /etc/passwd
匹配h结尾但是不能用c或r开头的行(中括号中^用来反选)


运行脚本示例
chmod +x helloworld.sh
./helloworld.sh


停止脚本 ctrl + c




数组定义
declare -a array
数组赋值
array[0]=0
array[1]=1
数组创建同时赋值
declare -a Name={'john' 'sue'}
增加元素
Name[2]='wang'
直接创建
Nmae={'john' 'sue'}
跳号赋值
Socre=([2]=2 [5]=5 [7]=7)
取值
echo ${array[0]}
echo ${array[@]}
echo ${array[*]}


函数是否可以改变数值
vi newtest.sh


#!/bin/bash
var=100
function chvar(){
        var=200
}
echo "Before var:$var"
chvar
echo "After  var:$var"


chmod +x newtest.sh
./newtest.sh 
结果
Before var:100
After  var:200



function chvar(){
        local var=200
}
结果
Before var:100
After  var:100




\转义字符
全引用 单引号
echo '$var03'


命令替换方式
date11=`date`
date12=$(date)
echo $date11
echo $date12


位置参数 
$0 脚本名本身
$1-${10} 脚本的第一个参数--脚本的第十个参数
$# 变量总数
$@、$* 显示所有参数
$? 前一个命令退出的返回值
$! 最后一个后台进程的ID号


对文件操作
#!/bin/bash
while read LINE
do
NAME=`echo $LINE | awk '{print $1}'
AGE=`echo $LINE | awk '{print $2}'
sex=`echo $LINE | awk '{print $3}'
echo "My name is $NAME......."
done < student_info.txt




测试手段  bash -x test.sh


给命令传入参数
useradd $USERNAME
echo $PASSWD | passwd -- stdin $USERNAME

















猜你喜欢

转载自blog.csdn.net/u014717398/article/details/78450095
今日推荐