脚本收集
欢迎转载,请支持原创,保留原文链接:blog.ilibrary.me
基础概念
执行字符串
cat `which cat` # `which pwd` 会被单做一个命令执行,然后执行的结果作为参数给cat
工具包
coreutils
coreutils是GNU操作系统的基础文件操作,文本处理及通用shell脚本工具包, 由Fileutils, textutils, sh-utils合并而来。
所有gnu 软件在mac下面以g打头,如gawk, gsed
文件操作
内容查找
记录一些常用文件和内容查找的命令。
# 内容查找
mdfind "hello" # mdfind应该是mac下速度最快的查找工具,为了这个速度,坑爹的mac要占用系统大量的磁盘资源去建立索引。
ack "hello" # 遍历当前目录及子目录下所有含字符串"hello"的文件, 这个比较快,但是感觉搜索的结果不全,不知道具体哪些文件会参与搜索.
grep "hello" * #当前目录下所有文件里面查找字符串'hello', 比ack慢
grep -r "hello" . #递归搜索所有包含'hello'的内容
grep -rin 'hello' . #递归搜索所有包含'hello'的内容, 忽略大小写(-i),显示文件行号(-n)
grep -rin --include \*.cpp 'hello' . #递归搜索所有cpp文件,忽略大小写,显示文件行号, 注意\*.cpp不要用双引号。
grep -Irin 'hello' . #递归搜索所有文件, 排除binary文件,忽略大小写,显示文件行号。
grep -w "name" test.txt # Grep完整的单词(译注:而不是其它单词的一部分)
# find <指定目录> <指定条件> <指定动作>, http://www.ruanyifeng.com/blog/2009/10/5_ways_to_search_for_files_using_the_terminal.html
find . -name "*.c" 在当前目录及其子目录(用“.”表示)中查找任何扩展名为“c”的文件
find /home/user -maxdepth 1 -type d -empty #找出在/home/user中的所有空子目录:
ls **/ #递归查找所有的子目录, **是一个通用的递归搜索符号, 效果和 `tree` 命令 一样
ls ** # 遍历一级目录
vim /main/gj **/*.js #在vim下递归查找所有js文件,找出main函数所在, *代表任意文件, **代表任意子目录
cd - # 回到之前的工作目录
内容统计
统计文件/目录大小
# 统计
ll tmp #查看tmp目录下每个文件的大小, 不统计文件夹
du -sh * # 以可读的方式显示文件和文件夹的大小
du -sh # 当前目录的总大小
ncdu # 和`du -sh * `功能一样,据说ncdu会快一点, ncdu会排序结果, 文件夹的大小也会统计出来.
内容修改
文件分拆、合并
split -b 200000 big.txt # 拆分文件,按每个文件200000byte大小拆分
cat x* > file.txt # To consolidate split files into a single file
cat xaa xab xac > newfile # 合并文件
< test.txt sed -n '50,60p' # 得到test.txt中50到60行的文本:
sed
# sed [选项] ‘command’ 文件名称
# 选项部分,常见选项包括-n,-e,-i,-f,-r选项。
# command部分包括:[地址1,地址2] [函数] [参数(标记)]
# 基本子命令
# a, 在指定行下边插入指定行的内容。
# i, 在指定行上边插入指定行的内容。
# c, 把指定的行内容替换为自己需要的行内容。
# d, 删除指定的行内容,比较简单,更容易理解。
# y, 字符替换,可以替换多个字符,只能替换字符不能替换字符串,且不支持正则表达式,具体使用方法看例子。
# =, 讲行号打印出来
# r, 类似于a,也是将内容追加到指定行的后边,只不过r是将指定文件内容读取并追加到指定行下边。
# s, 替换子命令,是平时sed使用的最多的子命令,没有之一
sed ‘y/ab/AB/’ message # 把message中所有a字符替换为A符号,所有b字符替换为B符号。
sed 's/hello/A/' file.txt # 修改file.txt的内容然后打印到屏幕,不保存文件。
sed '2,3s/hello/A/' file.txt # 修改file.txt的内容然后打印到屏幕,不保存文件。
sed -i 's/hello/A/' file.txt # 直接修改file.txt内容
sed -i.bak 's/hello/A/' file.txt # 把修改的内容保存到file.txt,同时备份原文件到file.txt.bak
awk
wc
wc -l file_*.txt # 统计所有匹配file_*.txt模式的文件
wc -l file_{1..50}.txt # 统计file_1.txt 到file_50.txt, 按数字顺序
批量创建
mkdir -p AppName/public/{images, js, css}
touch AppName/{config.ru, public/index.html}
参考
进程、端口、文件句柄管理
进程管理
- 打印所有进程,
ps -ef # 打印所有进程 ps -aux # 打印所有进程, mac不支持
两条命令差不多, ps -aux
在mac上不能用,参考
lsof, 文件句柄、端口号管理
lsof /data/
lsof +D /var/log/
lsof -c ssh -c init #列出被指定进程名打开的文件, -c 指command
lsof -i:22 #查看指定端口有哪些进程在使用
lsof -i -a -p 234 #查看进程234打开的所有网络文件
lsof -i -a -c ssh #查看进程ssh打开的所有网络文件
lsof -i tcp #查看所有tcp连接
lsof -i udp #查看所有udp连接
lsof -i@192.168.1.191 #查看指定网口有哪些进程在使用
lsof -u messagebus #查看指定用户打开的文件
lsof / | awk '{ if($7 > 1048576) print $7/1048576 "MB "$9 }' | sort -n -u | tail # 列出10个最大的系统中已打开的文件
磁盘管理
重建索引
sudo mdutil -E /
参考
网络操作
netcat
实时聊天
nc -l 1567 # netcat 命令在1567端口启动了一个tcp 服务器,所有的标准输出和输入会输出到该端口。输出和输入都在此shell中展示。
nc localhost 1567 # 建立了一个到1567的连接,所有该窗口的输入都会显示到前面的窗口上。
文件传输
Server
$nc -l 1567 < file1.txt
client
$nc localhost 1567 > file2.txt
一次性传输,client接收文件以后server就会立刻退出。
ab
jmeter
安全
入侵检测
w # 显示有谁登录了当前主机
whois 220.112.121.66 # 查看ip的注册信息,看不到ip所在的物理地址
last # 查看都有谁登录过
htop # 查找可疑进程
git
git update-index --asusume-unchanged config/elasticsearch/analysis/synonym/synonyms_en.txt # 忽略对文件的修改
brew
brew upgrade --cleanup node # 升级并且清楚老的版本
brew cleanup node # 删除老的node,注意要升级node到最新版以后才有效
brew update && brew upgrade && brew cleanup; brew doctor # 升级,清理老版本,整理link/unlink
常用工具
任务管理用task, 命令行手册用cheat
- cheat