linux常用命令
修改/etc/inittab文件中initdefault参数可以修改默认启动图形化界面还是文本界面,3为默认进入文本界面,5为默认进入图形化界面。
Init 6
Shutdown –r now 立刻重启
Shutdown –r 延迟分钟数 延迟多长时间重启
关机
Halt
Init 0
Shutdown –h now
#是root用户
$是普通用户
增加用户,并改密码
useradd liuwu
Passwd liuwu
删除用户
Userdel –r liuwu
切换用户
su
用法: su root 或者 su - root
这两者的区别是su root不会重新加载切换用户的用户变量,su - root会重新加载用户的用户变量
重启、启动、停止网络命令
service network restart/start/stop
vi命令
- 光标定位
M 移动光标到页面中央
L移动光标到页面尾处
H移动光标到页面开始处
Ctrl+f向后翻页
Ctrl+b向前翻页
0移动光标到行首
$移动光标到行尾
/:从上往下开始查找 n下一个 N上一个
?:从下往上开始查找
- 撤销和重复
u复原前一个动作-撤销
. 重复前一个动作-重复
- 复制 粘贴 删除
nyy 复制光标所在的向下n行内容
yw复制光标后的单词,以空格为分界
p在光标处粘贴复制的内容
ndd删除光标所在向下n行的内容
ctrl + d:往下翻半屏内容
ctrl + u:往上翻半屏内容
shift + g:到文件末尾
r:替换当前位置字符
x:删除当前位置字符
dd:删除整行
set number:显示行号
- 复制 粘贴 删除
set nonu:取消显示行号
:1,3y 复制第一行到第三行
:1,3d 删除第一行到第三行
:1,3s/str/str_new/g 替换第一行到第三行中的字符串(一行中所有)
:1,3s/str/str_new 替换第一行到第三行中的字符串第一个字符
:1,3 g/str /d 删除第一行到第三行中含有这个字符串的行
%全部,:%d全部删
:%s/str/str_new/g 替换所有
- 搜索字符串
输入/+要查找的字符串 /bestest
按n键重新查找下一个
N查找上一个
- 退出vi
q 退出vi
q! 不保存退出
wq 保存退出
e!不保存修改的文件
w 保存
!强制,后面加叹号的话表示强制
Uname –a 查看系统版本
Df –lh 显示硬盘多大地方
netstat -nlpt|grep 80 查端口号有没有被占用
|wc –l
ps -ef|grep mysql 查找所有进程,在结果中查找mysql,如果没有mysql还会显示一个grep的进程
ps -ef|grep mysql –v prep 这样排除了grep
- head:显示文件的开头至标准输出中
用法:head [参数]... [文件]...
主要参数:
-n<行数> 显示的行数
- tail:查看文件末尾内容
用法:tail [参数] [文件]
主要参数:-f 动态读取
动态查看日志 tail -f err.log
查看末尾10行日志 tail -10 err.log
动态查看末尾5行日志 tail -5f err.log
- wc:统计指定文件中的行数、字节数、字数,并将统计结果显示输出
用法:wc [选项] [文件]
主要参数:
-c 统计字节数。
-l 统计行数。
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度。
-help 显示帮助信息
可以不加任何参数使用
grep -c “foo” a.txt
ps -ef|grep httpd |grep -v "grep"
find / -name besttest
AWK实战
- 匹配文件出现内容的行
awk ‘/Exception/ {print NR} ‘catalina.out
- 查询tomcat进程号
ps -ef|grep tomcat |grep -v "grep" |awk '{print $2}‘
- 输出apache日志中的访问ip地址、访问路径和状态码
awk '{print "ip=="$1,"path=="$7,"code=="$9}' /opt/lampp/logs/access_log
- 将成绩不及格的学生名称输出
awk '{if($2>60){}else{print $1}}' soce.txt
- 将mysql的进程号写到mysql.pid这个文件中
ps -ef|grep mysql|grep -v "grep"|awk '{print $2 > "mysql.pid"}'
- Shell 支持自定义变量
定义变量时,变量名不加美元符号($)
name='besttest'
注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样,同时还得遵循以下规则:
首个字符必须为字母(a-z,A-Z)。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)。
使用变量,使用变量时前面加上一个美元符号($)或者${name},即可
echo ${name}
变量 |
含义 |
$$ |
当前Shell进程ID,就是这个脚本的pid |
$0 |
当前文件名 |
$n |
取传递给脚本的参数,n是一个数字,n是几就取第几个参数 |
$# |
取参数的个数 |
$@ |
取所有参数,被双引号(" ")包含时,与 $* 稍有不同 |
$* |
取所有参数 |
$? |
最后命令的退出状态,0表示没有错误,其他任何值表明有错误 |
+ - * / % 分别对应加、减、乘、除、取余
只需将特定的算术表达式用“$((” 和“))” 括起来,例如:
a=$((4-2)) a的值为2
a=10
b=2
echo $(($a+$b))
echo $(($a-$b))
echo $(($a*$b))
echo $(($a/$b))
echo $(($a%$b))
运算符 |
说明 |
举例 |
-eq |
检测两个数是否相等,相等返回 true。 |
[ $a -eq $b ] |
-ne |
检测两个数是否相等,不相等返回 true。 |
[ $a -ne $b ] |
-gt |
检测左边的数是否大于右边的,如果是,则返回 true。 |
[ $a -gt $b ] |
-lt |
检测左边的数是否小于右边的,如果是,则返回 true。 |
[ $a -lt $b ] |
-ge |
检测左边的数是否大等于右边的,如果是,则返回 true。 |
[ $a -ge $b ] |
-le |
检测左边的数是否小于等于右边的,如果是,则返回 true。 |
[ $a -le $b ] |
操作符 |
说明 |
举例 |
-d file |
检测文件是否是目录,如果是,则返回 true。 |
[ -d $file ] 返回 false。 |
-f file |
检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 |
[ -f $file ] 返回 true。 |
-r file |
检测文件是否可读,如果是,则返回 true。 |
[ -r $file ] 返回 true。 |
-w file |
检测文件是否可写,如果是,则返回 true。 |
[ -w $file ] 返回 true。 |
-x file |
检测文件是否可执行,如果是,则返回 true。 |
[ -x $file ] 返回 true。 |
-s file |
检测文件是否为空(文件大小是否大于0),不为空返回 true。 |
[ -s $file ] 返回 true。 |
-e file |
检测文件(包括目录)是否存在,如果是,则返回 true。 |
[ -e $file ] 返回 true。 |
定义数组
在Shell中,用括号来表示数组,数组元素用“空格”符号分隔开,不像其他语言中用逗号分隔,shell中只支持一维数组,数组的下标可以不连续。
例如:
array = (value1 value2 … )
array = (value
value1
value2)
也可以通过下标赋值的方式来定义一个数组
list[0]=1
list[8]=9
数组的取值方式:
${array_name[index]}
${list[0]}
使用@ 或 * 可以获取数组中的所有元素,例如
${list[*]}
${list[@]}
获取数组长度的方法与获取字符串长度的方法相同,使用#,例如:
len = ${#list[*]}
- if 语句通过关系运算符判断表达式的真假来决定执行哪个分支。Shell 有三种 if ... else 语句:
- if ... fi 语句;
- if ... else ... fi 语句;
- if ... elif ... else ... fi 语句。
- if ... else 语句的语法:
- if [ expression ]
then Statement(s)
else
Statement(s)
Fi
if ... elif…else…fi 语句的语法:
if [ expression ]
then Statement(s)
elif [expression ]
then
Statement(s)
else
Statement(s)
fi
用if来写一个简单的小脚本
判断一个脚本是否有执行权限,如果没有的话,给它加上可以执行的权限,如果没有这个脚本的话,创建一个
#!/bin/bash
file='/root/my.sh'
if [ -x $file ]
then
echo $file
else
touch $file
chmod +x $file
fi
用case esac来写一个简单的小脚本
根据输入的参数来判断,输入r的话执行一个脚本,输入c的话创建一个脚本,输入d的话删除这个脚本,输入其他的都执行这个脚本
#!/bin/bash
num=$1
case $num in
x)
chmod +x my.sh
;;
d)
rm -rf my.sh
;;
c)
touch my.sh
;;
*)
bash my.sh
;;
esac
做一个小练习,用for和if,遍历/root目录下的所有文件,打印出来可执行的文件
#!/bin/bash
path='/root'
for file in $path/*
do
if [ -x $file -a -f $file ]
then
echo $file
fi
done
做一个小练习,用while写一个计算累加和的脚本,输入一个数字,算它的累加和。
#!/bin/bash
num=$1
i=0
sum=0
while [ $i -le $num ]
do
sum=$(($sum+$i))
i=$(($i+1))
done
echo "$sum"
做一个小练习,写一个函数,功能是显示一个目录下以.sh结尾的文件
#!/bin/bash
function showsh()
{
for file in $1/*.sh
do
echo $file
done
}
showsh $1
find –name ‘*.sh’