Git Product home page Git Product logo

linuxtool's Introduction

README

Weapon 本目录中介绍Linux常用的工具,还有常用操作及其命令

综合文件

名称 描述
过滤器 文本过滤相关工具和命令介绍
文件 Ubuntu下文件操作的命令介绍
系统 Linux系统,磁盘管理相关介绍
压缩 压缩,解压及打包的工具命令介绍
网络 网络状态及配置相关命令

常用工具

名称 描述
adb 跨平台安卓手机管理调试工具
awk 与sed齐名
bc 支持浮点运算及其他功能的高级计算器
fdisk 硬盘分区工具
gcc GNU/Linux下C语言编译器
gdb GNU/Linux下C语言调试器
git 我个人的git命令学习日志
grep 常用支持正则表达式的搜索工具
hexdump 十六进制查看器
make 编译C/C++大型程序的make命令
sed Stream Editer常用文本处理工具
tree 文件的树形结构显示
Vim Unix/Linux下强大的编辑器

软件包管理

  • Debian/Ubuntu
  • Red Hat/CentOS
  • Arch Linux

系统检测工具

名称 描述
tcpdump 经典的网络抓包工具
ifconfig
lsof 列出系统打开的文件描述符
nc
starce
netstat 网络信息统计工具
vmstat 实时输出系统中各种资源的使用情况
ifstat
mpstat 监测统计每个CPU状态
iostat

网络服务与工具

名称 描述
网络 网络配置相关命令
cron 计划任务
ftp ftp命令
samba Linux与Windows通信服务
ssh ssh有关的工具和命令
telnet telent远程登陆

过滤器

各种技巧

linuxtool's People

Contributors

guodongxiaren avatar laoreja avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

linuxtool's Issues

Mac与Linux命令辨析

Mac 安装Linux sed

Mac上的很多命令太不友好啦

brew install gnu-sed --with-default-names

配置别名:

alias sed='/usr/local/Cellar/gnu-sed/4.2.2/bin/sed'

查找文件中某单词相邻的行

这个就需要grep的ABC选项了。每个选项后面都跟数字,表示的是行数。

  • -A是显示匹配后和它后面的n行。
  • -B是显示匹配行和它前面的n行。
  • -C是匹配行和它前后各n行。

也就是说C包含了AB的功能,比如:

grep xxx -C 5 a.txt

查询a.txt中xxx出现的位置以及它所在行的前后5行

指定日期加减

20190523 0点的上一个小时!

date +'%Y%m%d%H' -d "20190523 00 -1 hours"

注意:20190523 00 有个空格。 左边的format只是输出的格式。不是输入的格式。

替换TAB分隔的CSV为Markdown表格

原始文件 stu.txt:

姓名	年龄	身高	体重	学校
小明	20	170	180	北大
小红	22	155	80	清华
小强	23	175	140	北

第一行是标题
编写脚本 md_table.sh

# 替换TAB为|
sed -i 's/\t/|/g' $1
# 每行前追加|
sed -i 's/^/|/g' $1 
# 第二行追加md表格分隔行
sed -i '2 i|---|---|---|---|---|' $1 

执行脚本:

sh md_table.sh stu.txt

替换:

姓名 年龄 身高 体重 学校
小明 20 170 180 北大
小红 22 155 80 清华
小强 23 175 140

固定输出某行

输出第10行

awk 'NR==10' trace.log

输出2到4行

awk 'NR >= 2 && NR <= 4' trace.log

sort命令速记

sort -t '.' -k1nr
  • t:指定分隔符。

  • k1:按照第一列排序

  • n:按照数字顺序,而非字典序。避免把1和11,12排到一起

  • r:逆序

一行代码:过滤文件中指定userid的数据

问题

一个CSV文件TAB分割,假设名为data.txt,第二列是userid。
另外有一个文件是userid的文件,假设名为userid.txt。每一行都是一个userid。
过滤data.txt,找到userid.txt中的userid的数据来输出。

一行awk解法

awk -F "\t" 'BEGIN{while(getline<"userid.txt") a[$1]=1;} {if(a[$2]==1) print $0;}' data.txt > 
new_data.txt

解读

BEGIN是在awk循环解析之前都初始化阶段。
a[$1]=1建立关联数组,userid.txt里的每个userid为key,value为1。

查找两个文件的交并补

并:

sort -m <(sort file1 | uniq) <(sort file2 | uniq) | uniq

交:

sort -m <(sort file1 | uniq) <(sort file2 | uniq) | uniq -d

差 file1 - file2:

sort -m <(sort file1 | uniq) <(sort file2 | uniq) <(sort file2 | uniq) | uniq -u

谁有时间帮忙格式化一下Markdown?

由于这个repo的主要写作时间是2014-2015,当时的Markdown语法和如今有区别。比如之前标题的语法#和标题名称之间是不需要空格的,如今强制需要空格。导致当时写的这个repo中的标题基本不能用了。谁有时间帮忙重构下?

提取kv字段的日志中的某类型的全部value

有一个trace.log

cost:1 uid:abc
cost:3 uid:sdc
cost:5 uid:gde
cost:3 uid:bbt
cost:2 uid:aac

提取出所有的cost的数值。可供后续统计分析均值、99分位、最大最小等等。如果是统计uid可以方便捞出每个用户某时间段内的访问次数。
总之这种操作是高频操作!

vim内查找技巧

基础/?

我们都知道的 /?

gg
/hello

G
?world

一个从上到下查找hello,一个从下到上查找world

github在fork之后如何同原仓库同步

github在fork之后,你的repo如何同原repo同步呢?
主要就是给你的repo再添加一个remote,指向原repo。接着从这个remote更新就行了。注意如果和本地repo有冲突可能产生merge。你也可以给本地开个新branch跟进。

先查看当前remote

git remote -v

image

添加新remote

remote名任意,这里我叫root吧。指向原repo

git remote add root [email protected]:ma6174/vim.git

再看看当前remote:
image

从原repo拉更新

git fetch root

本地切换到master

如果你已经是master忽略这步。

git checkout master

合并原repo的master

git merge root/master

image

推送更新到自己repo的云端

git push

wc 用法错误

过滤器/README.md 中wc命令解释有问题

常用选项 描述
l 只统计行数
w 只统计单词数
m 只统计字符数
c 只统计字节数
L 最大行的长度
不管指定选项的顺序如何,其信息显示的顺序都是固定的,遵从上面从上到下的顺序。  
若不加参数,则默认显示l,w,m三项。

若不加参数,则默认显示l,w,m三项。说明有误。实际应该等价于 -lwc

ref

By default, wc prints three counts: the newline, words, and byte counts.

造成误解的一个很大的原因可能因为,字符数和字节数在某些情况下相等了。为什么相等呢?因为

  1. 运行wc的机器对文件内容的解码可能不支持某些特殊字符
  2. 文件内容就是单纯的ascii码

删除CSV某列

比如一个文件是\t 分隔的数据文件,要删除它的第5列:

awk -F'\t' '{$5=null;print $0}' src.txt > dst.txt

但这个有个问题就是分隔符变了,变成空格了
可以用sed替换回来

通过CSV某列的取值过滤数据

比如一个\t分隔的CSV文件。我想过滤出它第4列为1或2的数据行。
这次我们用点稍微高级的awk语法。不要把awk视作命令,它是 脚本!

awk -F'\t' '{if ($4 == "1" || $4 == "1") print $1}' data.txt > new_data.txt

wget下载目录

wget 直接下载网络上的目录,会有问题。要加一堆参数,备忘:

wget -c -r -np -k -L -p http://docs.openstack.org/liberty/install-guide-rdo/

会把目录中所有的文件下载下来。

word库表设计内容转为建表SQL

我们在进行项目详细设计的时候,通常会写数据库设计文档,即用在word文档中插入一个表格描述字段名,类型,描述等信息。
我们将表格复制到excel,调整列的顺序使之只剩下两列。字段名,后面是类型。然后选中两列cat > 到一个文件里,文件内容形如:

id int
name varchar(20)
sex int
school varchar(20)
create_time datetime
modify_time datetime

大文件输出某一行

大文件中复制某一行。我们当然可以用vim打开,然后用鼠标进行选择复制。但是有时候那一行会很长,导致换了多行,鼠标复制会稍显麻烦。其实awk很方便可以实现。

awk 'NR=15000' a.txt

即输出a.txt的第15000行(从1计数)

给Markdown的标题#补充空格

旧的GitHub Markdown的语法里面标题#和文本之间是不需要加空格的。
比如#标题名但是后来经过一次升级,这个语法就不能用了。一定要加空格才行,即# 标题名
但是很多旧的Markdown改起来太麻烦了,当时我也苦于无果,见 #3

后面发现其实sed 强大的匹配替换功能就可以胜任。写法如下:

sed -i  's/\(.*\)#\(.*\)/\1# \2/' xxx.md

mac上面sed -i要多加个参数空字符串

sed -i  '' 's/\(.*\)#\(.*\)/\1# \2/' xxx.md

否则报错:extra characters at the end of p command

date命令的毫秒/微秒/纳秒

date命令可以展示纳秒(用%N)

1000纳秒=1微秒

date +"%T.%N"

显示:

22:33:00.921842596

保留前三位即为毫秒,保留前三位即为微秒

date +"%T.%3N"

显示:

22:33:00.921

python的日志字符串中没有%N。用%f获取毫秒时间

将某字符替换成换行符

某一次我脚本生成的一个README.md文件,缺失了换行符。比如:

拥有 1 位优秀回答者:
谢伟文

这会导致显示的时候,这两行是挤在一行的。我想在有几位优秀回答者这行后面加一个空行。
在vim里面用:s /:\n/:\n\n/g 无效……

awk统计

求和

cat data|awk '{sum+=$1} END {print "Sum = ", sum}'

求平均

cat data|awk '{sum+=$1} END {print "Average = ", sum/NR}'

求最大值

cat data|awk 'BEGIN {max = 0} {if ($1>max) max=$1 } END {print "Max=", max}'

求最小值(min的初始值设置一个超大数即可)

awk 'BEGIN {min = 1999999} {if ($1<min) min=$1} END {print "Min=", min}'

左右合并两个文件

cat的合并是上下合并。现在我们想左右合并两个文件。
num.txt

123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789

alpah.txt

abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi

单行长文本提取URL

Q:单行文本包含多个xml资源的url,要提取出来

形如:

<![CDATA[http://abc.xml]]>xxxx<![CDATA[http://abc.xml]]>sdlfsjdos<![CDATA[http://abc.xml]]>12456

删除某列

删除文件中第一列

123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789

awk暴力解法

cat data.txt|awk -F, 'BEGIN{OFS=","}{$1=NULL;print $2,$3}'

优点是简单,容易想到。缺点是如果列很多就要一一枚举。

awk其他解法

也可以这样:

cat data.txt|awk -F, 'BEGIN{OFS=","}{$1="";print $0}'
cat data.txt|awk -F, 'BEGIN{OFS=","}{$1=NULL;print $0}'

但是这样,会保留分隔符。变成:

,456,789
,456,789
,456,789
,456,789
,456,789
,456,789
,456,789
,456,789
,456,789
,456,789
,456,789
,456,789

可以再搭配一个删除首行字符的操作:

cat data.txt|awk -F, 'BEGIN{OFS=","}{$1="";print $0}'|sed 's/^.//'

如果想删开头两个字符可以用:

sed 's/^..//'

两个点。

文件系统内查找

查找当前目录下所有C++代码文件

find . -regex '..cpp|..h|..hpp|..cc'

查找当前目录下所有C++代码文件,并打包压缩

find . -regex '..cpp|..h|..hpp|..cc'|xargs tar zcvpf code.tar.gz

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.