linux命令技巧
printf "%-5s %-10s %-4s\n" No Name Mark
printf "%-5s %-10s %-4.2f\n" 1 Sarath 80.3456
%-5s知名了一个格式为左对齐且宽度为5的字符串替换(-表示左对齐)
pgrep -f wechat 查找有wechat的pid
var="hello"
echo $var和echo ${var} 一样
获得变量值的长度:
var='123456789012345!@#$'
echo ${#var} #19
echo $0 显示用的什么shell
-bash
echo $SHELL 显示用的什么shell
/bin/bash
echo $UID 显示当前的用户id
0
使用函数添加环境变量
prepend() { [ -d $2 ] && eval $1=\"$2\$\{$1:+':'\$$1\}\" && export $1 ;}
使用方式:
prepend PATH /opt/myapp/bin
使用shell进行数学运算
在 bash shell 中 ,使用 let (( )) 和 [ ] 执行基本的算术操作 ,而进行高级操作时 , expr 和 bc 这两个工具也会经常用到。
- #!/bin/bash
- no1=4;
- no2=5;
- let result=no1+no2
- echo $result
- #!/bin/bash
- no1=10;
- let no1++
- echo $no1
- let no1--
- echo $no1
简写:
- #!/bin/bash
- no1=10
- let no1+=5
- echo $no1
- let no1-=6
- echo $no1
操作符 [ ] 的用法和 let 命令类似:
#!/bin/bash
no1=2
no2=3
result=$[ no1 + no2 ]
echo $result
#也可以使用 $前缀
result=$[ $no1 + 5 ]
echo $result
expr:
#!/bin/bash
no1=3
no2=4
result=`expr $no1 + $no2`
echo $result
result=`expr 5 + 10`
echo $result
result=$(expr $no1 + 5)
echo $result
标准输出和标准错误
cmd 2>stderr.txt 1>stdout.txt
cmd 2>&1 output.txt 和 cmd &> output.txt 效果一样
tee命令,得到标准输出并写入下一个文件
普通数组和关联数组(hash数组)
bash4.0版本之后才支持关联数组
数组定义:
array_var=(1 2 3 4 5 6)
array_var[0]="test1"
打印数组:
echo ${array_var[0]}
echo ${array_var[*]} #打印所有数组成员
echo ${array_var[@]} #打印所有数组成员
echo ${#array_var[*]} #打印数组长度
关联数组:略
find
find . -iname "example*" #-iname忽略字母大小写
find . \( -name "*.txt" -o name "*.pdf" \) -print #-o OR操作
find /home/users -path "*/slynux/*" -print #-path 用通配符匹配文件路径
find . -regex ".*\(\.py\|\.sh\)$" #用正则找
find . -iregex ".*\(\.py\|\.sh\)$" #让正则忽略大小写
find . ! -name "*.txt" -print #找出所有不以txt结尾的文件名
find . -maxdepth 1 -name "f*" -print #最大深度为1,也就是当前目录
find . -mindepth 2 -name "f*" -print #最小深度为2,从下一层目录找
find . -type d -print #找出所有目录,不包括文件
find . -type f -print #找出所有文件,不包括目录
find . -type f -atime -7 -print #7天内被访问过的恩所有文件
find . -type f -atime 7 -print #打印出恰好在7天前被访问过的所有文件
find . -type f -atime +7 -print #打印出访问时间超过7天的所有文件。
-atime -mtime -ctime #都是基于天
-amin -mmin -cmin #都是基于分钟
find . -type f -amin +7 -print #打印出访问时间超过7分钟的所有文件
find . -type f -newer file.txt -print #找出比file.txt修改时间更近的所有文件
find . -type f -size +2k #大于2kb的文件,b(512字节,块),c字节,w字(2字节),k(1024字节),M(1024k),G(1024M)
find . -type f -size -2k #小于2kb的文件
find . -type f -size 2k #大小等于2kb的文件
find . -type f -name "*.swp" -delete #删除swp文件
find . -type f -perm 644 -print #查找权限为644的文件
find . -type f -name "*.php" ! -perm 644 -print #找出服务器上所有的php文件并且权限不是644的。
find . -type f -user alex -print #找出所有alex拥有的文件
分割文件
split -b 10k data.file #把文件切割成10k大小 data.file xaa xab xac xad
split -b 10k data.file -d -a 4 #切割成4位数字补全的大小data.file x0009 x0019 x0029 x0039
split -b 10k data.file -d -a 4 split_file #data.file split_file0000 split_file0001 split_file0002
split -l 10 data.file #10行一割
使用环回文件
dd if=/dev/zero of=big.img bs=1G count=1
mkfs.ext4 big.img
mkdir /mnt/loopback
mount -o loop big.img /mnt/loopback
sed
sed 's/text/replace/' file >newfile
mv newfile file
等价于 sed -i 's/text/replace/g' file
sed -i 's/text/replace/3g' file #从第三次找到的地方修改,改到最后
echo this is an example | sed 's/\w\+/[&]/g' #已匹配字符串标记使用&匹配找到的内容并加上[ ], [this] [is] [an] [example]
echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/' #this is 7 in a number 命令中 digit 7,被替换成了 7。样式匹配到的子串是 7,\(..\) 用于匹配子串,对于匹配到的第一个子串就标记为 \1,依此类推匹配到的第二个结果就是 \2,例如:
echo aaa BBB | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/' #BBB aaa
awk
awk 'BEGIN {pring "start"} pattern { commands} END { print "end"}' file
工作流程:
1.执行begin{commands}语句快
2.从文件或stdin中读取一行,执行pattern{ commands }。重复这个过程,知道文件全部读取完。
3.最后执行end{commands}语句块
拼接字符串
echo | awk '{var1="v1";var2="v2";var3="v3"; print var1"-"var2"-"var3;}' #v1-v2-v3
特殊变量:
NR: 表示记录数量,在执行过程中对应于行号
NF:表示字段数量,在执行过程中对应于当前行的字段数
$0: 这个变量包含执行过程中当前行的文本内容
$1: 第一个字段的文本内容
$2: 第二个字段的文本内容
echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7"| awk '{ print "Line no:"NR",No of fields:"NF, "$0="$0,"$1="$1,"$2="$2,"$3="$3 }'
结果:
Line no:1,No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3
Line no:2,No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5
Line no:3,No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7
awk运算:
seq 5 | awk 'BEGIN{ sum=0;print "Summation:"}{print $1"+";sum+=¥1}END{print "==";print sum}'
结果:
Summation:
1+
2+
3+
4+
5+
==
15
例子:
awk 'END{print FILENAME}' awk.txt 打印文件名
例子:
cat section.txt
line with pattern1
line with pattern2
line with pattern3
line end with pattern4
line with pattern5
awk */pa.*3/, /end/* section.txt
输出结果是:
line with patern3
line end with pattern4
linux命令技巧的更多相关文章
- 20个 Unix/Linux 命令技巧
让我们用这些Unix/Linux命令技巧开启新的一年,提高在终端下的生产力.我已经找了很久了,现在就与你们分享. 删除一个大文件 我在生产服务器上有一个很大的200GB的日志文件需要删除.我的rm和l ...
- [转帖]50个必知的Linux命令技巧,你都掌握了吗?
50个必知的Linux命令技巧,你都掌握了吗? https://blog.51cto.com/lizhenliang/2131141 https://blog.51cto.com/lizhenlian ...
- Linux命令技巧:如何在Linux下重命名多个文件
我知道我可以用mv命令重命名文件.但是当我想重命名很多文件怎么办?如果为每个文件都这么做将会是很乏味的.有没有办法一次性重命名多个文件? 在Linux中,当你想要改变一个文件名,使用mv命令就好了.然 ...
- linux 命令技巧(转)--history
本文介绍一些关于bash的能够提高效率的技巧,主要是关于历史命令操作和一些快捷键,让你在命令行下工作效率翻倍. 1.history-----最基本的查看历史命令 2.!n-----编号为n的历史命令 ...
- Unix/Linux 命令技巧
锁定一个文件夹 为了我的数据隐私,我想要锁定我文件服务器下的/downloads文件夹.因此我运行了: chmod 0000 /downloads root用户仍旧可以访问,而ls和cd命令则不工作. ...
- linux 命令行 光标移动技巧
linux 命令行 光标移动技巧 看一个真正的专家操作命令行绝对是一种很好的体验-光标在单词之间来回穿梭,命令行不同的滚动.在这里强烈建立适应GUI节目的开发者尝试一下在提示符下面工作.但是事情也不是 ...
- 最有用的Linux命令行使用技巧集锦
最近在Quora上看到一个问答题目,关于在高效率Linux用户节省时间Tips.将该题目的回答进行学习总结,加上自己的一些经验,记录如下,方便自己和大家参考. 下面介绍的都是一些命令行工具,这些工具在 ...
- Linux命令行 3大技巧归纳
在软件开发的世界中,作为web端程序猿打交道最多的操作系统相信就是Linux系统了吧.而对于Linux系统的使用,如果能掌握一些小技巧,在程序开发.调试的过程中,相信做事的效率也会有一些提升.下面就和 ...
- Linux命令行技巧
Linux命令行技巧 命令 描述 • apropos whatis 显示和word相关的命令. 参见线程安全 • man -t man | ps2pdf - > man.pdf 生成一个PDF格 ...
随机推荐
- 第二十节: 深入理解并发机制以及解决方案(锁机制、EF自有机制、队列模式等)
一. 理解并发机制 1. 什么是并发,并发与多线程有什么关系? ①. 先从广义上来说,或者从实际场景上来说. 高并发通常是海量用户同时访问(比如:12306买票.淘宝的双十一抢购),如果把一个用户看做 ...
- Spring Boot集成MyBatis的2种方式
目录 写在前面 准备工作 配置数据库驱动 配置数据源 原生集成MyBatis 依赖配置 注册MyBatis核心组件 定义并使用映射器 通过MyBatis-Spring-Boot-Starter集成 默 ...
- Java String相关
一.String类的常用方法 1. int indexOf(String s) 字符串查找 2. int lastIndexOf(String str) 3. char charAt(int inde ...
- 关于并查集的路径压缩(Path Compress)优化
之前在CSDN看到一篇很受欢迎的讲解并查集的博文,其中自然用到了路径压缩: int pre[1000]; int find(int x){ int root = x; while(pre[root]! ...
- Django组件-分页器
Django的分页器(paginator) view from django.shortcuts import render,HttpResponse # Create your views here ...
- mysql官方测试库
sql语句优化时没有测试数据,oracle官方提供测试数据 https://dev.mysql.com/doc/employee/en/employees-installation.html 到 ht ...
- 【原创】大叔经验分享(18)hive2.0以后通过beeline执行sql没有进度信息
一 问题 在hive1.2中使用hive或者beeline执行sql都有进度信息,但是升级到hive2.0以后,只有hive执行sql还有进度信息,beeline执行sql完全silence,在等待结 ...
- robot总结
1 搭建环境地址 http://www.cnblogs.com/yufeihlf/p/5945102.html 2 页面描述 https://www.cnblogs.com/yufeihlf/p/59 ...
- 如何把PDF文件拆分为多个文件
一个PDF文件有很多个PDF页面组成,有时候我们只需要单个页面的时候应该怎么做呢,这个时候就需要拆分PDF文件了,那么如何把 PDF文件拆分为多个文件呢,应该有很多的小伙伴都想知道吧,那就让我们一起来 ...
- 查看linux空间大小
du -sh : 查看当前目录总共占的容量.而不单独列出各子项占用的容量 du -lh --max-depth=1 : 查看当前目录下一级子文件和子目录占用的磁盘容量.