Linux笔记
指令
权限管理:
chgrp
chown
chmod:更改权限时直接用=
就行了,chmod a=rwx,u=r…
pwd:查看当前目录
文件操作:
mkdir
rmdir:必须为空目录
rm
cp
mv:可以用来改名
basename:获取文件名
dirname:取得目录名
查看操作:
cat:更多的使用less比较好
tac
nl:会输出行号
more,less:查看更多,less更加方便
head:只显示头几行 -n参数指定几行
tail(尾巴):只显示尾巴几行,-n 参数指定行
file:查看文件类型
查找:
which command:查找命令所在位置
whereis、locate、find:查找文件,find比较慢,locate是在某个数据库中,但是每天只更新一次
压缩:
压缩:tar -cz -f file.tar.gz file
解压缩:tar -xz -f file.tar.gz
-c:创建打包文件
-x:解压打包文件
-z:使用gzip处理
-f:指定压缩文件
截取:
cut -d ":" -fn /etc/passwd
:以:为分割符进行分割,选取第n列
其他:
seq 1 100
:获取1-100的值,也可以使用{1…100}、{a…d}
shell
-
shell是与kernel进行沟通的工具、bash就是多数Linux系统默认的shell
-
设置变量:
k=v
,变量里边包含命令:命令使用符号``包含或者
(
u
n
a
m
e
−
r
)
,
变
量
内
部
嵌
套
变
量
使
用
(uname -r),变量内部嵌套变量使用
(uname−r),变量内部嵌套变量使用{},记忆:变量
,
命
令
:
{},命令:
,命令:()
取消变量:
unset name
环境变量:
-
env:查看变量
-
导出变量:
export name 将变量导出到环境变量,子程序是在shell中新开的一个shell,新的shell不能访问父shell的变量,但是如果变量导出即可访问,子程序只会继承父程序的环境变量,而不会继承自定义变量
$RANDOM:随机获取数值
变量处理:
- read:读取输入到变量,-p:提示,-t:只等待一段时间
- declare:类型声明
-i:数字类型
-a:数组类型
-r:只读类型
数组:var[1]=2
、var[2]=3
的形式进行声明
限制资源使用:ulimit
命令别名:alias lm=“ls -la”、unlias lm:取消别名
历史命令:histroy,history 3:最近的3个命令
数据流重导向:
- 标准输入:< 或 <<
- 标准输出:> 或 >>
- 标准错误输出:2> 或 2>>
两个符号的重导向进行数据的累加而不进行数据删除
/dev/null
会吃掉所有导向该设备的信息,如果不想将信息显示也不想导入文件可以将其导入该处
命令执行依据:
command 1;command 2;command 3:连续下达命令
command 1&&command 2、command 1||command 2:短路与和短路或
管线命令:
command 1 | command 2:命令1的输出作为命令2的输入,命令2必须能够接收标准输入
查找命令:
grep -n ‘exp’ content.txt:exp可以为正则表达式或者普通的文本,-n显示行号
diff file1 file2:比较两个文件不同
shell scripts
只要文件可执行就可以使用 ./shell.sh 的方式进行执行,如果文件可读的话就可以使用bash shell.sh 或者 sh shell.sh (bash的连接文件)的方式使用bash执行
上边两种执行方式称为直接执行,是新开一个bash进行执行,就是子程序,所以执行完毕后在父窗口是访问不到执行时变量的
另外一种方式就是使用父bash进行执行,source shell.sh
#!/bin/bash :声明使用/bin/bash 进行执行。不然可能会有些系统无法判断使用什么shell执行
$?:判断shell执行状态,0执行成功,1失败,可以使用exit n 的形式自定义返回
数值运算除了使用declare声明,还可以使用如下方式:
#!/bin/bash
echo $((2*3))
可以利用$?获取上一条命令的表达式作为判断依据对下一步就行处理,也可以使用&&、||操作符
默认参数:
$0:脚本文件名
$1…:参数
$#:参数个数
@ 、 @、 @、*:获取全部参数
使用shift命令对参数进行偏移,默认偏移1,也可以在shift后加数字指定偏移
条件判断:
[]可以用于判断
[ "${name}" == "a" ]&&echo"yeah"
大于、小于应该使用 -gt、-lt
if then
name1="a"
name2="a"
if [ "${name1}" == "${name2}" ];then
echo "name1=name2"
elif [....];then
echo "....."
else
echo "name1!=name2"
fi
多个判断分开写,然后使用&&、||
case in esac
case $1 in
"hello")
echo "你输入的参数1为hello"
;;
"shell")
echo "你输入的参数1为shell"
;;
*)
echo "请输入参数"
;;
esac
两个分号结束语句
函数
定义方式
function name(){
}
函数内部也有默认变量$0代表函数名、$1…代表参数
调用函数只需要写函数名即可,如果有参数在函数名后加参数
循环
while do done 满足条件循环、until do done直到满足条件就终止循环
while [ "${yn}" != "yes" ]
do
read -p "input some: " yn
done
for do done
for animal in cat,dog,pig
do
echo "animal is ${animal}"
done
echo "find root"
for user in $(cut -d ":" -f1 /etc/passwd)
do
if [ "${user}" == "root" ];then
echo "root in /etc/passwd"
fi
done
for do done 数值处理
for ((i=1;i<10;i++))
do
echo ${i}
done
debug:
bash -n :查看语法
bash -v :查看过程
bash -x:执行到的语句显示