ctrl+s卡死时使用ctrl+q恢复
换源sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
后台运行nohup ./program >/dev/null 2>&1 &
, 格式为nohup ... &,这个&无意义
打包zip -qr xxx.zip xxx
, 删除某个文件zip -dv xxx.zip a.cc
conda列出所有环境conda info -e
find命令
查找某一文件名后缀的文件
find ./ -name '*.jpg'
逻辑反"!" 逻辑或"-o" 逻辑与"-a"
查找不为.jpg后缀的, 以及不为.jpg .png后缀的
find ./ ! -name '*.jpg'
find ./ ! -regex ".*\.\(jpg\|png\)"
查看某一文件名后缀文件的数量
find ./ -name "*.gif" | wc -l
ls *.gif | wc -l
参考https://blog.csdn.net/huayangshiboqi/article/details/80635863
find命令可以在不通位置根据不同标准搜索任何文件,并支持多种方式处理搜索结果。其工作流程:
(1)搜索所有用户指定的路径,包括所有的子目录。
(2)对于遇到的每个文件,根据是否符合用户指定的条件,所有符合条件的文件形成一个列表。
(3)对于结果列表的文件,执行用户指定的操作。
参数:
-name filename #表示包含指定匹配模式的文件名
-iname filename #表示包含指定匹配模式的文件名,不区分大小写
-type #指定文件类型,f表示普通文件 ,d表示目录,c表示块设备,p表示管道,l表示连接
-user userid #匹配其所有者为指定用户ID的文件
-group groupid #匹配其所有者的组为指定组ID的文件
-size size #匹配其大小为size的文件
-empety #匹配空文件
-amin[-+]n #文件最后一次访问时间,-n表示时间为n分钟以内,+n表示n分钟之前,n表示刚好n分钟
-atime [-+]n #天
-cmin[-+]n #文件最后一次状态改变时间
-ctime[-+]n #
-mmin [-+]n #最后一次被修改时间
-mtime [-+]n
动作:
-print #默认动作,将搜索结果写入到标准输出
-fprint file #将搜索结果写入到file中
-ls #以详细格式展示搜索结果
-fls file #将详细格式结果写入file
-delete #将结果文件删除
-exec command {} \; #查找并执行命令,{}表示搜索到的文件名
-ok command {}\; #查找并执行命令,但是需要用户确认
参考https://blog.51cto.com/12013190/2105868
grep命令
grep -r "tast_struct {" /usr/
寻找定义结构体的头文件, 因为find只能查找属性(如文件名), 但grep使用正则表达式在文件内容中做检索.
locate命令
[root@node-2 ~]# touch helloWorld
[root@node-2 ~]# locate helloWorld
[root@node-2 ~]# updatedb
[root@node-2 ~]# locate helloWorld
/root/helloWorld
直接查找文件名即可, 只不过数据库每天更新一次, 所以新文件需要updatedb
批量转化图片格式
mogrify -path newdir -format jpg *.gif
将所有.gif转化成.jpg
也可使用shell脚本
for file in *.gif; do convert $file ${file%%.*}.jpg; done
或
for file in *.png
do convert $file ${file%%.*}.jpg
done
截短文件名
filename="hello.jpg"
name=${filename%lo*} //截取文件名从右向左第一个.之后全删除
echo $name //打印hel
filename="hello.jpg"
name=${filename#*lo} //截取扩展名,从左向右第一个点后面所有,##从右向左第一个点后面所有
echo $name //打印.jpg
%abc*
从尾部开始删, 保留前面的, 所以abc后面的*是什么都无所谓
#*abc
从头部开始删, 保留后面的, 所以abc前面的*是什么都无所谓
%%或##为贪婪匹配, 尽可能多删
读取输入数据
read -p "Enter an integer:" num
大小比较
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
变量类型转换
数字类型转字符类型
aa=$((1+1));echo $aa
变量aa赋值为整数2,但echo 输出时已被当成字符型。当然我们也可以强制进行转换,如:
echo $aa""
通过与空字符串进行连接,强化将变量aa转化成了字符型。
字符类型转数值类型
反过来,字符类型转数值类型也是可以实现的。
如:
aa=12;
aa=$(($a+4));
echo $aa;
在shell中,给变量赋值中的数字默认是被当做字符串的。
进制转换
temp1=400d7c
echo $((16#${temp1}+4)) (打印默认是十进制输出的)
4197760
temp2=$((16#${temp1}+4)) (转为16进制进行运算)
echo "obase=16;${temp2}"|bc (以16进制打印)
400D80
以上内容是将字符串转为16进制后进行运算,然后再以16进制打印出来。
十进制转其他进制:
借用bc外部命令, bc命令格式转换为:echo "obase=进制;值"|bc
其他进制转十进制:
[chengmo@centos5 ~]$ ((num=0xff));
[chengmo@centos5 ~]$ echo $num;
255
[chengmo@centos5 ~]$ ((num=16#ff));
[chengmo@centos5 ~]$ echo $num;
255
同理 ((num=0123));
或((num=8#123));
shell中内置各种进制表示方法非常简单。记得base#number 即可。这里记得赋值时候用(())符号。不能直接用=号了。=号没有值类型。默认将后面变成字符串了.
可以通过定义符:let达到(()) 运算效果。
num=0123
echo $num
0123
可见直接赋值是字符串, 需加(())或字符串
批量杀进程
查看keras的僵尸进程
ps -aux | grep train_icdar_*
批量杀进程
ps -aux | grep train_icdar_pa* | grep -v grep | cut -c 9-15 | xargs kill -s 9
kill -9 pid
杀死单个进程
批量修改文件名
rename 's/JPG/jpg/' *
's/JPG/jpg'是perl表达式, rename命令在ubuntu下是2个参数, centos下是3个参数, 如rename 'JPG' 'jpg' *
curl命令
curl -s -L http****
-s silent不显示进度条
-L 重定向, 如果页面不存在跳转到新的页面
-O 直接下载下来
-o a.txt 重命名并下载到本地
wget命令
使用账户下载
wget -vcr -np www.xxx.com/a.txt --http-user name --http-passwd password --no-check-certificate
ubuntu挂载移动硬盘/U盘
sudo fdisk -l # 列出所有硬盘
sudo mount -t vfat /dev/sdb1 /media # U盘
sudo mount -t ntfs /dev/sdb3 /media # 移动硬盘
cd /media
sudo umount /dev/sdb1 #卸载
如果读取不了exfat可以安装exfat-fuse包
awk命令
对于'|'或'\t' '\n'分割的文件test.txt, awk可以输出分割后的内容
# 利用printf格式化输出, %s 字符,%d 整数,%f 浮点 ; %5.2f代表最小长度5位保留2位小数, 即2整数+小数点+2小数, 整数部分超出则保留
# %30s 右对齐,长度30,实际长度大于设置长度,按实际长度
# %-30s 左对齐,其他同上
# NR行数, NF列数, $0所有列
#打印文件内容
cat -n kimbo_test.txt
#打印第二行之后的,列1,列4
awk -F"|" 'NR>=2{print $1,$4}' kimbo_test.txt
#打印第二行之后的,列1,列4 ,利用printf格式化输出 ,列1左对齐
awk -F"|" 'NR>=2{printf "%-30s\t%5.2f\n",$1,$4;}' kimbo_test.txt
#打印第二行之后的,列1,列4 ,利用printf格式化输出 ,列1右对齐
awk -F"|" 'NR>=2{printf "%30s\t%5.2f\n",$1,$4;}' kimbo_test.txt
##多个命令,也可以分号分隔, 同第二句
## 打印第二行之后的,列1,列4 ,利用printf格式化输出 ,列1左对齐
awk -F"|" 'NR>=2{printf "%-30s\t",$1}; NR>=2{printf "%5d\n", $4}' kimbo_test.txt

##begin end 用法
#打印第二行之后的,列1,列4
awk -F"|" 'BEGIN {print "start-->"} NR>=2{print $1,$4} END{print "end"}' kimbo_test.txt
sed命令
一般和awk命令一起使用用于输出文件行的内容
ps | awk '{print $2}' | sed -n '1,3p'
查看当前进程表第2列的1到3行
sed -n '3p' /var/log/yum.log # 显示第3行, $是最后一行
sed -n '3,9p' /var/log/yum.log # 显示第3到9行
sed '3,9d' /var/log/yum.log # 删除第3到9行
# 在文件第一行上面插入happy,在文件结尾添加new year
sed -e '1i happy' -e '$a new year' yum.log #【界面显示】
sed -i -e '1i happy' -e '$a new year' yum.log #【真实写入文件】
-n是选择性输出, -i是修改文件内容, -e是多项编辑但不修改, 在行号后面p是print, d是delete, i是insert, a是add. &符号代表上次匹配到的行
cat写入文件内容
cat > exocr.txt << EOF ......EOF
当docker无vi时使用cat写入, 记得结尾加EOF
python中执行shell脚本
使用os.system
import os
os.system('python3 /usr/local/lib/python3.5/dist-packages/uff/bin/convert_to_uff.py models/lenet5.pb')
引用父级目录的文件
若无法导入父级目录的文件需要将父级目录加入PYTHON_PATH
import sys, os
sys.path.insert(1, os.path.join(sys.path[0], ".."))
截取文件首尾
截取头部的18000行
head -n18000 train.txt > train.txt.tmp
mv train.txt.tmp train.txt
截取尾部的2000行
tail -n2000 train.txt > test.txt
随机选择验证集的2000行
shuf -n2000 train.txt > test.txt
sort test.txt > test.txt.tmp
mv test.txt.tmp test.txt
>和>>
当文件不存在时, 二者皆创建文件
当文件存在时, >覆盖, >>追加
tee命令
who | tee userinfo.txt
, 把输出到终端的信息备份一份到一个文件中, 如果tee > userinfo.txt
会直接重定向到文件, 不会输出到终端.
apt离线安装包
先sudo apt install -d ***
, 只下载包
然后sudo dpkg -i ***
手动解压
注意依赖的包要下全
缺失的依赖包如libsm6可以到https://packages.ubuntu.com/xenial/libsm6下载, xenial是ubuntu16.04的代号, libsm6是包名. 架构选amd64即可下载对应的.deb包
定时任务
先crontab -e
, 然后在里面输入时间频率 + 命令, 时间格式为分时日月周, 之后service cron restart
(mac是sudo /usr/sbin/cron restart)
# 每天9点运行一次语句为:
0 9 * * * /usr/bin/python3 /home/xiaofeng/cleanroom.py
每小时执行 0 * * * *
每隔2小时执行 * */2 * * * (/表示频率)
每天执行 0 0 * * *
每周执行 0 0 * * 0
网友评论