前言
今天总结一下这段时间学到的关于Linux的知识
一.文件类型
1.- regular file 普通文件
2.d directory 目录
3.l link 链接
4.b block 块设备 存储数据以供系统存取的接口设备,也就是就硬盘
5.c character 字符设备 串口设备 键盘鼠标等
6.s socket 套接字
7.p pipe 管道
二.命令系统
1.文件
0 标注输入
1 标注输出
2 标准错误输出
2.通配符
匹配字符
1.? 单个字符
2.* 任意字符
3.任务管理
1.& 后台执行
2.;顺序执行
3.&& 只有第一个命令成功第二个才执行
4.|| 如果第一个失败,则执行第二个命令
5.`x` 优先执行被包裹的命令,命令替换符
6.ctrl + z 挂起进程
7.bg 挂起到后台
8.fg 挂起到前台
9.jobs 查看所有前后台进程任务
4.管道 重定向
1.> 重定向,命令到文件
2.>> 追加重定向
3.< 文件到命令
4.<< 结束符
5.转义符
1.‘ ’ 硬转义,不允许替换
2.“ ”软转义,允许替换
3.\
三.修改权限与环境
1.su - xxx
切换用户 - 代表更新环境
2.chmod
1.ugo
1.u user 用户
2.g group 群组
3.o others 其他
2.用法
1.chmod ug+x,o-r 1.c
2.chmod ugo=x 1.c
3.chmod 777 1.c
4.cmod a+x 1.c a==all 所有人
3.chown 改变所属用户或所属组
4.chgrp 改变所属组
用法 usermod -G 用户组 用户名
5.vim .zshrc source .zshrc 别名设置,这是bash环境下的命令
6.exit logout ctrl + d 退出用户
7.man 查询详细信息也可以用info,有多个分区
man -k xxx 查询关键信息
man -f xxx
四.基础信息获取
1.uptime 打印系统运行时长和平均负载
2.who 显示当前登陆系统胡用户信息
3.last 显示用户最近登陆信息
4.date 系统时间,打印计算机元年到现在秒数
用法 date +"%Y-%m -%d %H:%M:%S"
date +"%s"
5.w 当前登陆用户列表和正在执行的任务
USER (登录用户名)
TTY (登录后系统分配的终端号)
FROM (远程主机名)
LOGIN@ (登录时间)
IDLE (空闲时间)
JCPU (和终端相连胡所有进程占用的时间,包含当前正在执行的后台作业)
PCPU (当前进程所占用时间)
WHAT (当前进程正在执行的命令)
6.whoami 打印当前有效的用户名称
7.uname 打印当前系统信息
8.cal 日历
9.!xxx 快速查找历史记录
10.basename 取文件名
11.dirname 取目录名
12.nl 显示行号
13.head tail
用法 head -n 10 取前十行
14.more less 区别主要在于less可以上下翻页且搜索找到时高亮,more不行
15.文件的三个时间,三个时间都可以用touch修改
touch -a -c -m <file>
1.mtime 内容数据改动时更新
2.ctime 文件权限,属性被修改时更新
3.atime 文件内容被执行成功时修改时间
16.chattr 改变文件隐藏属性
17.lsattr -a 打印隐藏文件的隐藏信息
18.文件的特殊权限
1.set_uid 执行权限占位符为s,如果原先有执行权限则是s,没有则是S,
下面两个也一样,作用对象为二进制程序文件,非脚本,
效果是用户在执行该程序时获得所有者权限
2.set_gid 占位符为s,作用对象为目录和二进制文件,用户在该目录里,
有效组变为目录所属组
3.sticky bit 占位符为t,作用对象为目录
在该目录下,用户只能删除自己创建的内容
19.ls -ald xx 读取目录权限
20.命令与文件查询
1.which 寻找执行文件
2.whereis 寻找特定文件
3.locate 搜索文件(可部分查找)
4.find 多样化高级查找
find -mtime +n n天之前,不包含n,修改过的文件
-mmin 分钟
find ./ -mtime -1 -user userB 只找用户userB的一天内修改过的文件
find ./ -name xxx 查找文件
find ./ -name "*.c" 查找目录下所有.c文件
+- size 大小
21.tldr xxx 相当于man
22.三剑客
1.grep
2.awk 文本数据处理
3.sed
替换 sed -i 's/abc/123/g' a.log没有i不会保存
删除 sed '6,8d' a.log 删除6-8行
sed '/xxxx/d' a.log 找到某一行删除
sed '/xxx/,$d' a.log 删除包括这行后面所有
显示 sed '/3q;d' a.log 显示第三行
可以直接在vim命令行中替换 :%s/abc/123
23.数据提取操作
1.cut 切分
-d "x" 按字符x切割
-f num 显示num
2.grep 检索
-c 计数
3.sort
排序 -u 去重
-n -r 降序
4.wc 统计字符,字数,行数
wc -l 行数
wc -c 字符
5.uniq 去重
uniq 只会把连续的才认为是重复的,所以要先用sort
uniq -c
6.tee 双向重导项 相当于重定向
7.split 文件切分
split -l 20 按20行一组
8.xargs 参数代换
echo "./c" | xargs ls
9.tr 替换 压缩 删除
1.tr ":" " " 讲冒号替换为空 \n
2.tr -c "0-9" " " 把不在0-9之间的替换成空格
3.tr -d "0-9" 删除0-9
4.-s 压缩
24.看进程
1.ps -ef
2.ps -aux
25.文件节点
1.inode 文件节点 放文件属性信息权限等等
一个文件有一个inode多个blocks
ls -ali xxx 显示inode
2.blocks
文件块
3.superblock
放12的信息
26.连接
1.软连接是有新生成
ln -s 1.c 2.c
2.硬连接没有
ln 1.c 2.c
五.shell编程
1.变量
1.a=2 不能空格会变成命令
2.a=`pwd`
3.局部变量 local a=12
4.特殊变量
1.$n 获取当前执行脚本的第n个参数
如果大于9则需要将n用大括号括起来n=0意思是脚本名包括路径
2.$# 得到执行当前脚本的参数个数
3.$@ 获取这个程序所有参数并保留参数之间的任何空白,相当于 “$1” “$2” “$3"
4.$* 获取当前shell的所有参数,将所有的命令行参数视为单个字符串
相当于“$1$2$3”
5.$? 判断上一命令是否成功执行,0为成功,非0为失败
6.$$ 获取当前进程PID
7.$! 上一个命令的PID
8.read echo 输入输出
9.prinf 输出
2.函数
1.function _printf_() { echo $1 return} 注意没有形参
_printf_ “1111111” 调用
2.流程控制
1.if if [[ ]];rhen if 里是test表达式
else
fi
eq ==
gt >
lt <
ge >=
le <=
ne !=
2.case
case $a in
1)
echo 1
::
esac
3.循环
1.for
1.for i in $@;do
echo $i
done
2.for((i=1;i<=100;i++));do
echo $i
done
2.while
while [[ ]];do
echo $i
done
3.until
until [[ ]];do
echo $i
done
3.数组
1.read -a a
2.declare -a a
3.a=(1,2,3,4,5) 可以不定义
a+= (6,7,8) 追加
unset a 删除数组
unset a[1] 删除单个元素
4.echo {$a} 输出数组全部元素