-
七种基本文件:
数据文件:要用指定命令才能打开,用某种格式编码的;例如系统日志
1)- :regular file 普通文件
2)d : directory 目录
3)l : link 链接
4)b : block 块设备 存储数据以供系统存取的接口设备,即硬盘
5)c : character 字符设备 串口设备,键盘,鼠标等
6)s : socket 套接字
7)p : pipe管道
- 文件权限
1)r - 可读 w - 可写 x - 可执行 s - 二进制文件暂时root权限 g - 组 t - 当前目录的创建者或root有权限。ls -l查看权限时,第一个是用户,第二个是组,第三个是other
2)命令: chmod - 更改文件权限。chown - 更改文件所属用户。chgrp - 更改文件所属组
-
zsh : shell解释器
1) ping : 显示网络状态, 例如只ping两次
ping -c 2 www.google.com
2)file : 确定文件类型
3)touch : 修改文件时间 与 新建文件
-
任务管理
1)&:加在命令后面表示后台执行
2); : 加在命令中间表示顺序执行
3)&& :链接两个命令即与
4)|| :连接两个命令即或
5)`` : 命令中如果包含另一个命令,用此符号包括的命令将优先执行
6)ctrl/command+z : 命令挂起
7)bg : 将挂起的命令后台执行
8)fg : 将挂起的命令或后台执行的命令,变为前台运行
9)jobs : 查看后台执行和挂起的任务及任务编号
-
重定向
1)> : 重定向符号,从命令到文件的重定向
2)>> : 追加符号,从命令到文件的追加
3)< : 重定向符号,从文件到命令的重定向
4)<< : 从控制台读,遇到后边指定的字符串结束
-
管道
1)| :将管道符号左边命令的标准输出,作为管道符号右边命令的标准输入
2)词频统计,统计一篇出现频率最高的十个单词
cat 1.log | tr -c -s "a-zA-Z" "\n" | start | uniq -c | sort -n -r | head -n 10
-
转义符
1)\ : 去除其后元字符或通配符特殊意义
2)’’ : shell里面的硬转义,硬引用,其不允许出现 ‘’ 。关掉shell所有的元字符、通配符
3)"" : shell里面的软转义,软引用,只允许出现特定的shell元字符。
$ 用于变量值替换、` 用于命令替换、\ 用于转义单个字符
- VIM使用
1)%s\str1\str2\g
: 命令模式下将str1替换成str2,其中的g表示全局替换,即全部替换
2)set paste
:命令模式下 格式粘贴模式,忽略之前的空格,粘贴成当前的格式
3)set num
: 命令模式下 显示行号
4)set nonu
: 命令模式下 取消显示行号
5)split
: 命令模式下 实现上下分屏 ctrl/commad + w 进行切换
6)vsplit
: 命令模式下 实现左右分屏
7)ctrl/command + v : 实现可视化块操作,即可以操作多行
8)ctrl/command + ]
: 命令模式下 查看选中函数的定义,按ctrl/command + o
即可返回
9)K
: 命令模式下 按大写的K即可跳转到此选中函数的手册, 3+ K 即可进入其手册第三章说明
10)/***
: 命令模式下 查看/后面的字符串,n继续查找下一个,N继续查找上一个
11)vimtutor
: 终端命令行下 教你怎么使用VIM(纯英文)。vimtutor zh
中文模式
-
Linux系统信息
1)uptime : 打印系统运行时长和平均负载
2)who : 显示当前登陆系统的用户信息
3)last : 显示用户最近登陆信息,打开/var/log/wtmp文件;还有wtmp.1(备份文件),btmp(没有登陆成功的),btmp.1等
4)date 显示或设置系统时间与日期
5)w : 当前用户列表及正在执行的任务
6)whoami : 打印当前有效的用户名称,还有
who am i
命令,,即who 后面随便两个参数不管是啥都和who am i
一样的效果7)uname : 打印当前系统信息
8)cal : 显示日历
9)lastlog : 打印每个账号的最近登陆时间,在
/var/log/lastlog
10)write : 发送信息给另一个用户
11)wall : 给其它登陆用户广播信息 即给当前主机的所有用户发送信息
-
目录
1)cd : 切换当前工作目录
cd
或cd ~
切换回到当前用户家目录;cd -
切换到上次工作目录2)pwd : 打印当前工作目录
3)mkdir : 创建目录
4)rmdir : 删除目录
5)cp : 拷贝
6)rm : 删除
7)mv : 移动
8)dirname : 输出路径,不包括最后一个路径
9)basename : 删掉所有的前缀包括最后一个slash(‘/’)字符,然后将字符串显示出来
-
文件内容查阅
1)cat : 正向连续读
2)tac : 反向连续读
3)nl : 输出行号显示文件
4)more : 一页一页显示文件内容
5)less : 与more相似,比more厉害
6)head : 显示文件前几行,例如前3行
head -n 3 ***.txt
7)tail : 只看末尾几行
8)od : 以二进制方式查看文件内容
9 )seq : 利用脚本来处理文本文件 例如显示a文本101~120行
sed -n '101,120p' a
或head -n 120 a | tail -n 20
-
文件的三个时间ACM access status/change modify
1) atime : 内容被取用时,更新这个读取时间
2) ctime : 权限、属性、所有者改动时,更新这个时间
3) mtime : 内容数据改动时,更新这个时间
可用touch命令修改文件时间
查看a.txt的ACM的时间:
stat a.txt
-
文件隐藏属性
1)lsattr: 查看文件隐藏属性
2)chattr : 修改文件的隐藏属性
-
文件特殊权限
1)SUID: set_uid
s=4
普通用户执行程序获取root权限,仅限于非脚本的二进制文件,大写的S
表示没有此权限2) SGID: set_gid
s=2
用户在该目录里,有效组变为目录所属组3) SBIT: sticky bit
t=1
在该目录下,普通用户只能删除自己创建的文件 -
命令与文件的查询
1)which : 寻找可执行文件即PATH路径(
echo ${PATH}
)的文件路径2)whereis : 寻找特定文件
3)locate : 搜索文件(可部分查找)
4)find : 多样化高级查找
5)/dev/null/ : 数据黑洞 空设备文件,等价于一个仅仅写文件,全部写入它的内容都会永远丢失。而尝试从它那儿读取内容则什么也读不到 0:表示键盘输入(stdin)。 1:表示标准输出(stdout),系统默认是1。 2:表示错误输出(stderr)。
-
用户管理
1)重要的配置文件 :
配置文件 内容 /etc/passwd 用户名 密码位 用户编号 归属组编号姓名 $HOME $SHELL /etc/shadow 用户名 已加密密码 密码改动信息 密码策略 /etc/group 群组名 密码位 群组编号 组内用户 /etc/gshadow 群组密码相关文件 - /etc/shadow : 账户名称 : 密码 : 修改密码的日期 : 密码不可改动日期 : 密码需要重修修改的日期 : 密码变更期限前警告日期 : 密码过期的宽限时间 : 账号失效日期 : 保留
- /etc/group : 组名 : 密码 : 群组管理员 : 加入该群组的所属账号
2)su : 切换用户
su - 用户
【-】或【-l】表示重新登陆初始化,最好不要省略3)sudo : 临时切换为root用户
4)passwd : 设定用户密码
5)gpasswd : 设定群组密码
6)chsh : 更改用户shell
7)usermod : 修改用户账号
8)useradd : 新建用户
9)userdel : 删除用户
10) id : 显示用户信息
-
进程管理
1)free : 打印系统情况和内存情况
2)top : 显示当前系统进程情况,内存,CPU等信息,升级版htop
3)dstat : 实时监控磁盘,CPU等
4)ps : 报告当前进程状态
ps -ef
和ps -aux
查看进程5)pstree : 以树状显示进程派生关系
6)pgrep : 查找进程ID
7)kill : 删除执行中的程序和工作
8)pkill : 批量按照进程名杀死进程
-
数据提取操作 管道 |或 %提取
1)cut : 切分
2)grep : 检索 去掉空行
grep -v "^$"
3)sort : 排序
4)wc : 统计字符、字数、行数
5)uniq : 去重
6)tee : 双向重定向
7)split : 文件切分
8)xargs : 参数代换
9)tr : 替换、压缩和删除
10)bc : 计算算数表达式
shell脚本编程
-
#!/bin/bash : 放在shell脚本的第一行,告诉系统要用什么解释器去解释后面的内容
-
# : 注释
-
echo “Hello World!” : 打印Hello World!输出到屏幕
-
bash .sh : 命令行下 运行shell脚本,当shell脚本有+x权限时,也可在其目录*./*.sh**运行
-
*bash -x .sh : 命令行下 调试脚本
-
*bash +x .sh : 命令行下 取消调试脚本
-
set -x 和 set +x : 前者在shell脚本里下一行的内容开始调试,后者结束调试
-
变量与局部变量
1)shell的变量默认都为全局变量
a=1 #整数1或字符串1 a=hello #字符串 a='pwd' #使用命令替换符,即执行命令的结果赋给a b=&a:a #拼接 即a的值加上a这个字符串
2)局部变量
local a=1
3)声明变量
declare a
可不写,照顾C语言用户 -
特殊变量
- 位置变量
1)$0 : 获取当前执行shell脚本的文件名,包括路径
2)$n : 获取当前执行脚本的第n个参数,n为正整数,若n大于9则要使用大括号括起来
3)$* : 获取当前shell脚本所有参数,即所有命令行参数为单个字符串 “$1$2…”
4)$# : 得到执行当前脚本的参数个数
5)$@ : 获取此程序所有参数,保留参数之间的任何空白,即 “$1" “$2” …
- 状态变量
1)$? : 判断上一条指令是否执行成功 0-成功 非零-不成功
2)$$ : 取当前进程PID
3)$! : 上一个指令PID
-
输入输出
1)read : 输入
2)echo : 输出 -e参数为加上转义字符
3)printf : 输出 例如
printf "I am %s years old." "18"
-
函数
1)使用的3种方法
function _printf_() { return } function _printf_ { return } _printf_() { return }
-
if 条件分支
if [[ condition ]]; then
#statements
elif [[ condition ]]; then
#statements
else
#statements
fi
-
test表达式 :
[[ ]]
可以用man test
查看手册说明 -
case 条件分支
case word in
pattern1 )
;;
pattern1 )
;;
esac
- for 循环 2 种表示
for i in words; do
#statemens
done
for (( i = 0; i < 10; i++ )); do
#statemens
done
- while 循环
while [[ condition ]]; do
#statemens
let num-- #使num的值减1
done
- until 循环
until [[ condition ]]; do
#statemens
done
-
数组
#声明一个数组 -a是固定的关键字 declare -a a #索引型 下标为非负整数 declare -A arr #关联型 下标为字符串 #对数组进行赋值 a[0]=0 a=(0 1 2) #输出数组内容 ${a[*]} ${a[@]} #确定数组元素个数 ${#a[@]} #找到数组下标 ${!a[@]} #数组追加 a+=(3 4) #数组排序 sort #删除数组与元素 unset
-
RegExp正则表达式 1)-E选项表示扩展的正则,否则要用转义符\转义 2)-P选项表示Perl正则
POSIX字符集:[:upper:] 等 可移植操作系统接口
-
sed 流编辑器
1)-n : 安静模式,只输出处理的
2)-e : 默认,不编辑源文件
3)-f : 输出一个文件
4)-r : 支持正则
5)-i : 直接修改文件
6)a 表示追加,c替换行,d删除,i 插入,p 打印,s 替换字符,都需要拿引号括起来,例如
sed "1a hello"
- ~ 表示步长 例如
sed -n '0~2p'
偶数行 - + 表示连续几行 例如
sed -n '1,+3p'
打印1~4行
- ~ 表示步长 例如
-
awk 处理字符串语言
- eval 命令重新运算求出参数的内容
- 16进制对比查看文本内容
od -tx1 -tc 1.txt