文件处理
// 查看单个文件
* 有加号代表从某行开始,没有加号则是多少行
tail -n 1000:显示最后1000行
tail -n +1000:从1000行开始显示,显示1000行以后的
* 显示filename文件的3000-3999行
cat filename | tail -n +3000 | head -n 1000
* 显示filename文件的1000-3000行
cat filename | head -n 3000 | tail -n +1000
// 比较文件
diff a.txt b.txt
// 搜索
* 搜索单个文件( / 表示从根目录搜索 . 表示从当前目录搜索)
find -name
$ find / -name a.txt
* 搜索字符串test,在file文件中搜索
* -r:递归搜索,
* -n:显示行号
* -i:忽略字符串大小写,
* -v:取反,表示不包含该字符串的搜索
* -w:精准匹配,可在一定程度上提升搜索效率
$ grep -n "test" file
* wc -l : 统计行数,一般用于管道符连接
$ grep -rni "this" | wc -l
* 正则搜索 -P:正则;\d:可以搜索数字0-9
$ grep -P "a\d" file
* 显示grep出来行的前后几行,前(-B) 前+后(-C) 后(-A)
$ grep -n "123" file -A 3
// 排序
* 顺序排不加r; 按照大小: -S
$ ls -lrt
// 单个文件内部处理
* 删除文件中每行开头的前5个字符,并重定向到new_demo.txt, 不修改源文件demo.txt
demo.txt:
This is ubuntu demo1 text
This is ubuntu demo2 text
new_demo.txt:
is ubuntu demo1 text
is ubuntu demo2 text
$ sed 's/^.\{5\}//g' demo.txt > new_demo.txt
* 在第1行之后新增1行 add one line after one line
demo.txt:
This is ubuntu demo1 text
This is ubuntu demo2 text
new_demo.txt:
This is ubuntu demo1 text
add one line after one line
This is ubuntu demo2 text
$ sed -e 1a\add\ one\ line\ after\ one\ line demo.txt > new_demo.txt
查看
关键字段:ls, tac,cat, more, less, head tail
创建删除拷贝
关键字段:mkdir, touch, ln, rm, cp, mv
# 删除过滤后的文件
123456
123111
123444
123432ccc
find . -name "123*"| grep -v "ccc"| xargs rm -r # 只保留123432ccc,其他文件删除
find . -name "123*"| grep -v "ccc"| xargs -I{} cp -rp {} /home/fc # 拷贝过滤出来的数据到某处,借助-I{}和{}
搜索
关键字段:find, grep, which
# 分隔符-F
awk -F ':' '{print $1}' file
# 计算每一行的累加和
awk -F ' ' '{sum=0; for(i=1;i<4;i++) {sum+=$i} print sum}' file
# 计算第一列的累加和
awk '{sum+=$1}END{print sum}' file
权限管理
* 更改文件权限:chmod
-R 改变多层权限
$ chmod -R 777 /home/demo
* 更改目录所属用户,用户需要在系统中/etc/passwd
$ chown root /home/demo
* 更改目录所属用户组,用户组需要在系统中/etc/group
$ chgrp root /home/demo
shell
定时执行
# shell定时
# 定时任务所在文件/etc/crontab
# ubuntu 重设crontab -e的默认编辑器:$ select-editor
$ crontab -e # 添加定时任务或者可以直接编辑/etc/crontab
$ crontab -l # 查看定时任务
$ crontab -r # 删除所有的定时任务
日志记录: /var/log/cron
# cron 服务的启动与停止
# 1)service cron start /*启动服务*/
# 2)service cron stop /*关闭服务*/
# 3)service cron restart /*重启服务*/
# 4)service cron reload /*重新载入配置*/
# 5)service cron status /*查看crond状态*/
定时任务中使能环境变量(用户登陆Linux操作系统的时候,"/etc/profile", "~/.bash_profile"等配置文件会被自动执行,crontab定时任务一般不会自动执行,需要任务中配置)
source /etc/profile # 此文件为系统的每个用户设置环境信息
source ~/.bash_profile # 是交互式、login 方式进入 bash 运行的
~/.bash_profile 内容一般为:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
文件合并
# 文件合并,文件按行合并,用于处理csv文件很方便
# file1.csv file2.csv result:
# 1 one 1,one
# 2 two 2,two
# 3 three 3.three
$ paste -d ',' file1.csv file2.csv # -d表示分隔符
脚本交互expect
安装:sudo apt install expect
执行脚本:./script.sh
脚本内容如下:
#!/bin/expect
set timeout 30 # 设置为-1为永不超时
spawn su root # spawn是执行的命令
expect "Password:" # 命令行屏幕出现的内容
send "root\n" # 输入的命令
expect "#" # 屏幕出现的值
send "echo -e 'this is expect script'\n" # 执行命令行echo内容
interact
数组遍历与存储
# 遍历
run_case=("case1.py"
"case2.py")
for(( i=0;i<${#run_case[@]};i++ )) do
echo "${run_case[i]}"
python3 ${run_case[i]}
done
# 存储,从txt里面读取存储为数组
run_case=()
while read line; do
run_case+=($line)
done < ./test.txt
参数
全部参数: $*
参数个数:$#
第几个参数:$1
shell并行python
#!/bin/bash
# 通过符号&实现1.py和2.py并行
python3 1.py &
python3 2.py &
# 等待脚本全部结束
wait
echo "all finish"
vim的使用
vim分为一般模式,编辑模式,命令行模式。使用命令vim file(文件名)
,打开文件进入一般模式
* 命令行模式:显示行号
$ :set nu
* 命令行模式:跳转到某一行(例如跳转到第10行)
# 文件内容清空
$ :%d
$ :10
* 命令行模式:搜索字符串a
$ /a
* 查看下/上一个匹配
键盘按下n/N
* 跳转
* 跳到首行
* :1 或者 gg
* 跳到尾行
* :$ 或者 Shift + g
拷贝文件
拷贝第1-12行的内容到13行后命令行模式 :1,12 co 13
删除文件
删除第10到11行命令行模式 :10,11d
行首添加
10-15行首添加字符#:10,15 s/^/#
行尾添加
10-15行尾添加字符#:10,15 s/$/#
列删除
按v,进入横向选择列模式,左右选择列
按ESC
按Ctrl + v进入列编辑,向上或向下移动光标,选择行
按d,删除
修改颜色
可选颜色路径/usr/share/vim/vim81/colors
可修改内容:在文件/etc/vim/vimrc
最后添加colorscheme 颜色(blue)
echo -e "\033[32m绿色\033[0m"
磁盘挂载(不分区)
- 查看磁盘信息
fdisk -l - 如果需要分区的话,还需要进行分区,然后分区进行挂载
- 格式化磁盘
mkfs.ext4 /dev/sdb - 挂载,使用命令
df -h
查看是否挂载成功
挂载之前先备份/home下的文件,再删除/home下文件,挂载之后再拷贝回/home,删除备份的文件
mount /dev/sdb /home - 持续挂载
blkid # 查看UUID
vim /etc/fstab # 添加UUID
UUID=dsahj-dsahj-ddsga-h9ffb34627 /home ext4 defaults 0 0