1. 通用知识
2. 常用命令和操作案例
2.1 压缩命令
- zip:
- 打包 :zip something.zip something (目录请加 -r 参数)
- 解包:unzip something 指定路径:-d 参数
- tar:
- 打包:tar -zcvf something.tar something
- 解包:tar -zxvf something.tar 指定路径:-C 参数
2.2 创建用户相关操作
2.2 文件创建和查找
#touch可以创建多个文件,支持通配符
touch test_{1..10}_linux.txt locate /usr/share/\*.jpg # 查找usr/share 下面的jpg,第一个斜杠是转义*,locate 查本地数据库,有时需要updatedb。
which man # which查找二进制文件在PATH路径下找
whereis who #简单快速查找
sudo find /etc/ -name '\*.jpg' # 查找jpg文件
2.3 用户操作
su,su- 与 sudo 区别 su <user> 可以切换到用户 user,执行时需要输入目标用户的密码,sudo <cmd> 可以以特权级别运行 cmd 命令,需要当前用户属于 sudo 组,且需要输入当前用户的密码。su - <user> 命令也是切换用户,同时环境变量也会跟着改变成目标用户的环境变量
# 输出到文件
$ dd of=test.txt bs=10 count=1 # 或者 dd if=/dev/stdin of=test.txt bs=10 count=1
# 输出到标准输出
$ dd if=/dev/stdin of=/dev/stdout bs=10 count=1
sudo adduser test #添加test用户,默认会创建test用户组,只包含test用户
groups test #查看用户组 cat /etc/group | grep -E "�test"
sudo usermod -G sudo test # 添加到sudo用户
sudo chown ��other test.txt # 将test.txt 所有者改变为other用户
chmod 777 test.txt # 改变test文件权限
sudo deluser test --remove-home # 删除用户
2.4 定时任务
sudo service rsyslog start #开启日志
sudo cron -f & # 开启crontab
crontab -e # 然后选择,在文件最后面加入,每分钟的第一秒就执行
*/1 * * * * touch /home/shiyanlou/$(date +\%Y\%m\%d\%H\%M\%S) 然后保存
crontab -l # 查看添加的定时任务
crontab -r # 删除任务
每个用户使用 crontab -e 添加计划任务,都会在 /var/spool/cron/crontabs 中添加一个该用户自己的任务文档,这样目的是为了隔离
只需要以 sudo 权限编辑 /etc/crontab 文件就可以。
cron 服务监测时间最小单位是分钟,所以 cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron/crontabs 里面的內容。
每个目录的作用:
/etc/cron.daily,目录下的脚本会每天执行一次,在每天的6点25分时运行;
/etc/cron.hourly,目录下的脚本会每个小时执行一次,在每小时的17分钟时运行;
/etc/cron.monthly,目录下的脚本会每月执行一次,在每月1号的6点52分时运行;
/etc/cron.weekly,目录下的脚本会每周执行一次,在每周第七天的6点47分时运行;
系统默认执行时间可以根据需求进行修改
2.5 内容提取
cut
## 以下例子包含第5个
cut /etc/passswd -d ':' -f 1,6 #提取第一个和第六个字段分割符:
cut /etc/passwd -c 5- # 前5个之后包含第5
cut /etc/passwd -c 5 #第5个
cut /etc/passwd -c 5- #前5之后
cut /etc/passwd -c 2-5 # 第二个和第5个之间
wc和grep
ls -l | grep -Inr ''.*test$" #r表示递归,I忽略二进制文件,n表示行号
wc -w /etc/passwd # 单词数
wc -c /etc/passwd # 字节数
wc -m /etc/passwd #字符数wc -L /etc/passwd #最长行的字节数
wc -l /etc/passwd # 行数
sort
cat /etc/passwd | sort -t':' -k 3 -n # -t指定分割符,-k指定第3个字段 -n表示按数字排序,否则按照字典排序,-r表示反向排序
tr
tr [option]...SET1 [SET2]
#-d 删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配
#-s 去除set1指定的在输入文本中连续并重复的字符
cat /etc/passwd | tr '[:lower:]' '[:upper:]'
col
col [option] # -x 将Tab转换为空格 -h 将空格转换为Tab(默认选项)
案例提取历史记录文件中出现频率前三名的命令
history | cut -c 8- | sort |uniq -dc |sort -k 1 -nr |head 3 #不忽略命令参数
history | cut -c 8- | sort |uniq -dc |cut -d ' ' -f 1 |sort -k 1 -nr |head 3 #不忽略命令参数
截取前8个字符后,前8个字符是数字,然后排序,因为uniq不会全局去重,只会连续去重,再次对uniq -dc的结果的第个字段(数量)进行数字反向排序,最后取前三行。
join
# 创建两个文件
$ echo '1 hello' > file1
$ echo '1 shiyanlou' > file2
$ join file1 file2
# 将/etc/passwd与/etc/shadow两个文件合并,指定以':'作为分隔符
$ sudo join -t':' /etc/passwd /etc/shadow
# 将/etc/passwd与/etc/group两个文件合并,指定以':'作为分隔符, 分别比对第4和第3个字段
$ sudo join -t':' -1 4 /etc/passwd -2 3 /etc/group
paste
paste [option] file...
-d 指定合并的分隔符,默认为Tab
-s 不合并到一行,每个文件为一行
$ echo hello > file1
$ echo shiyanlou > file2
$ echo www.shiyanlou.com > file3
$ paste -d ':' file1 file2 file3
$ paste -s file1 file2 file3
cut
$ mkdir Documents
$ cat > Documents/test.c <<EOF
重定向
# 将标准错误重定向到标准输出,再将标准输出重定向到文件,注意要将重定向到文件写到前面
$ cat Documents/test.c hello.c >somefile 2>&1
# 或者只用bash提供的特殊的重定向符号"&"将标准错误和标准输出同时重定向到文件
$ cat Documents/test.c hello.c &>somefilehell
# 重定向到屏幕和文件
$ echo 'out content' | tee file.txt
#屏蔽输出
cat Documents/test.c nefile 1>/dev/null 2>&1