欢迎转载,请支持原创,保留原文链接: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}

参考

Vimer的世界

进程、端口、文件句柄管理

进程管理

  1. 打印所有进程,
    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 /

参考

linux系统监控、诊断工具之lsof

网络操作

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

  1. cheat