第一部分:基础
一:文件操作
二:权限管理
三:文本操作
四:打包与压缩
第二部分:进阶
一:http请求与传输
二:网络常用工具命令
三:远程命令
四:进程与系统
五:其他
第三部分:shell脚本
数组
参数传递
shell运算符
shell流程控制
shell函数
其他
使用帮助:man和info 命令帮助
第一部分:基础
一:文件操作
1:文件显示
- ls 显示当前目录下的目录或者文件夹(不显示以.开头的的隐藏文件。)
ls+目录名 查看目录下的所有文件
ls -a 查看目录下的所有文件 包括隐藏文件
ls -l 查看文件全部信息 权限 ,所属人,大小(以字节为单位),修改时间等
ls -lh 查看文件可以查看文件大小
ls -r 将结果以倒叙方式显示
ls -s 以文件大小排序
ls-t 以修改时间排序
例子:
ls lsrth : 按时间倒叙(这个老师也没讲明白)我推测-s比较时是根据文件相同的权限,往后看看 再验证
ls / :查看电脑根目录下的文件
- pwd 显示当前目录
- cd进入目录
cd . 访问当前目录
cd . . 访问上一级目录
cd - 返回上一级=次访问的目录
cd ~ 进入当前用户的home目录,相当于我电脑的 /home/sysadmin
2:文件管理
- cp 复制文件 cp 源文件名 复制后的文件名
cp -r 原目录名 复制后的目录名
- mv 重新命名 或者移动文件
修改文件名:mv 原文件名 新文件名
移动文件:mv 原文件 新文件目录
- rm 删除文件
rm 文件名或者目录/文件名 删除文件
rm -r 删除问价
rm -rv 告诉我们删除了啥都
rm -f 删除时报的错误不显示
3.链接
硬链接只能针对文件使用,ln a.sh b.sh 指b链接a 如果cat b.sh 展示的内容和a一样。如果删除了a.sh 那么b.sh仍然可以访问。
软链接可以针对目录,ln -s a.sh b.sh 指b链接a 一个软连接。如果删除或修改了a目录,那么b无效 了就。
ln -f 可以覆盖存在的链接。
4查看磁盘大小
df -h 查看磁盘大小和使用情况
du 查看文件占用大小、
5文件查找
find 时间、类型、名称
例如:find 目录 -time+3 -type f :在目录下查找三天前修改的文件
二:权限管理
root用户
r=4=读
w=2=写
x=1=执行
drwx-rwx-rwx 当前用户权限-组用户权限-所有用户权限 第一个d代表 目录
-rwx-rwx-rwx 当前用户权限-组用户权限-所有用户权限 第一个-代表 文件
- 修改权限
chmod 修改权限 chmod 744
chmod -r 递归给目录下的全部修改权限 - chown修改所有者
- chgrp修改所属组
su切换用户 什么也不加默认root
sudo -u制定用户 也可以什么不加 默认root
三:文本操作
- cat 查看
- head 看头几行 head -行数 看头几行行数
- tail -行数 看后几行行数
- tail -f 不断输出
- less 查看大文件第一屏: G 最后 , g最开始, 200g指定第200行,/关键字 看关键字几行
- grep 过滤 grep 关键字 文件名
- sort 排序按字符串进行排序 -r倒序 -k指定列 -n按数字排序
- uniq 去重(相同的挨着)进行去重 -c输出重复出现的次数
- wc统计行数,字节数,单词数
例如:sort 文件 | uniq -c | sort -k1,1nr | head 出现重复的去重最多的前十行。 - vim 文本操作:
d删除 dd删除整行 u撤销删除 w删除一个单词
i进入编辑模式,:q 退出不保存。:wq! 保存病退出。
四:打包与压缩
压缩 tar -zcvf 文件.tgz bakup/
解压 tar -xzf 文件.tgz
zip unzip
zcat和zgrep
第二部分:进阶
一:http请求与传输
- curl 模拟http请求
-x 指定resquest的method,如post get等
-h 指定请求的header,如“content-type:application/json”
-d 指定post请求的detd,消息体
-b 指定请求的cookie,可以在-h里面设置
-c 输出响应的set-cookie的内容输出到文件
-i 指定输出去response的header信息等
-w 指定输出部分格式化的数据,如请求时间,http_code等%{http_code} - wget下载文件 wget+地址
二:网络常用工具命令
- ping 检测网络连通性
-c 数字 ping几次
-W 数字 超时时间 -
host
host ip 解析ip: 获取有 主机名host 主机名 :获取ip地址
- nc 网络发包
- netstat 查看端口使用情况 netstat -an 所有的端口以 ip形式
- tcpdump
三:远程命令
ssh 远程登录工具
scp远程拷贝: 本地和远程文件间的拷贝
scp ./本地文件.txt haibo.liu@远程机器:/远程目录 本地拷到远程
scp haibo.liu@远程机器:/远程目录 /远程文件 ./ 本地目录 远程拷到本地
四:进程与系统
- ps 显示进程与线程信息
- free 查看内存使用情况
free -m 以m为单位
free -h 根据文件大小,自动选择单位跟在后面
- top 动态显示cpu 内存和进程的使用情况
1:展示多核cpu使用情况
load average 指平均每一分钟处理的任务数。 - kill 向指定进程发信号
kill -l 中断,正常退出,暂停,继续进程
kill -9 pid(进程id)结束进程
五:其他
hostname :看主机名
ifconfig :查看个网卡ip
第三部分:shell脚本
#!/bin/sh 1:脚本解析器:
mkdir shell_test 2:生成文件夹
cd shell_test
for((i=0;i<5;i++));do 3:循环操作,touch 生成空文件
touch test_$i.txt
done
-
数组
定义:array_name=(value0 value1 value2)
读取:value1=¥{array_name[1]}
获取数组中的所有元素:使用@或者× 可以获取数组中国的所有元素
例如:touch haiboa.sh创建一个脚本文件 将他的权限修改成777
#!/bin/sh
my_ary=(1 2 3 4)
my_ary[5]=6
#my_ary[7]=6
echo "第一个数组为" :${my_ary[0]}
echo ${#my_ary[@]}
echo ${#my_ary[@]}
echo "数组的长度" :${#my_ary[0]}
结果:
第一个数组为 :1
5
5
数组的长度 :1
-
参数传递
$n n代表一个数字;0为执行的文件名;1为执行的脚本的第一个参数,以此类推
$# 传递到脚本的参数个数
$*以一个单字符串显示所有有向脚本传递的参数,以“$1...$n”的形式输出所有参数
$@与$*相同,但是使用时加引号,并在引号中返回每个参数,以“$1...$n”的形式输出所有参数。
例如:
#!/bin/sh
echo '$#:'$#
echo '$0:'$0
echo '$1:'$1
echo '$2:'$2
echo '$*:'$*
echo '$@:'$@
echo '----$* start----'
for i in "$*"
do
echo $i
done
echo '----$* end----'
echo '----$@ start----'
for i in "$@"
do
echo $i
done
echo '----$@ end----'
运行:./haiboa.sh 1 2 3 4 5 6
结果:
$#:6
$0:./haiboa.sh
$1:1
$2:2
$*:1 2 3 4 5 6
$@:1 2 3 4 5 6
----$* start----
1 2 3 4 5 6
----$* end----
----$@ start----
1
2
3
4
5
6
----$@ end----
-
shell运算符
算数运算符、关系运算符、布尔运算符、逻辑运算符、字符串运算符、文件测试运算符(-b,-c,-d,-e文件存在不,-d文件是目录不,-s文件是空不,-f 是普通文件不,)
例子
#!/bin/sha=20
b=4
echo "a="$a
echo "b="$bval=expr$a+$bexpr$a+$b
echo "a + b : $val"val=expr$a−$bexpr$a-$b
echo "a - b : $val"val=expr$a⋅$bexpr$a⋅$b
echo "a*b : $val"val=expr$a$bexpr$a$b
echo "a / b : $val"if [ $a == $b ]
then
echo "a等于b"fi
if [ $a != $b ]
then
echo "a不等于b"
fi
结果:
a=20
b=4
a + b : 24
a - b : 17
a*b : 80
a / b : 5
a不等于b
!!!!!!!!!!!注意 !!!!!!!!val=expr$a$bexpr$a$b 的符号是 不是' '
!!!!!!!!!!!注意 !!!!!!!!if [ $a == $b ] 的[] 与字符之间的空格
!!!!!!!!!!!注意 !!!!!!!!a \* $ 乘法加一个转义字符
-
shell流程控制
if,for,while.,until,case,break,continue
-
shell函数
[function] funname [()]
{
action;
[return int;]
}
-
其他
xargs 分组
alias 设置别名