在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档; linux系统内置的帮助文档很详细,通常能解决我们的问题,我们需要掌握如何正确的去使用它们;
比如可是使用 --help 查看帮助选项。如 `ls --help`
## 文件和目录管理
### 创建和删除
- 创建:mkdir
- 删除:rm
- 删除非空目录:rm -rf file目录
- 删除日志 rm *log (等价: $find ./ -name “*log” -exec rm {} ;)
- 移动:mv
- 复制:cp (复制目录:cp -r )
- 创建文件 touch
### 查看
- 显示当前目录下的文件 **ls**
- 按时间排序,以列表的方式显示目录项 **ls -lrt**
```shell
ls -l
<div class="se-preview-section-delimiter"></div>
- 查看文件内容 cat 可以加more 、less控制输出的内容的大小
cat a.text
cat a.text | more
cat a.text| less
<div class="se-preview-section-delimiter"></div>
权限
- 改变文件的拥有者 chown
- 改变文件读、写、执行等属性 chmod
- 递归子目录修改: chown -R tuxapp source/
- 增加脚本可执行权限: chmod a+x myscript
管道和重定向
- 批处理命令连接执行,使用 |
- 串联: 使用分号 ;
- 前面成功,则执行后面一条,否则,不执行:&&
- 前面失败,则后一条执行: ||
ls /proc && echo suss! || echo failed.
<div class="se-preview-section-delimiter"></div>
文本处理
文件查找 find
find 参数很多,本文只介绍几个常用的
-name 按名字查找
-type 按类型
-atime 访问时间
find . -atime 7 -type f -print
find . -type d -print //只列出所有目录
find / -name "hello.c" 查找hello.c文件
<div class="se-preview-section-delimiter"></div>
文本查找 grep
grep match_patten file // 默认访问匹配行
<div class="se-preview-section-delimiter"></div>
常用参数
- -o 只输出匹配的文本行 VS -v 只输出没有匹配的文本行
- -c 统计文件中包含文本的次数
grep -c “text” filename
- -n 打印匹配的行号
- -i 搜索时忽略大小写
- -l 只打印文件名
grep "class" . -R -n # 在多级目录中对文本递归搜索(程序员搜代码的最爱)
cat LOG.* | tr a-z A-Z | grep "FROM " | grep "WHERE" > b #将日志中的所有带where条件的sql查找查找出来
<div class="se-preview-section-delimiter"></div>
文本替换 sed
sed [options] 'command' file(s)
<div class="se-preview-section-delimiter"></div>
- 首处替换
sed 's/text/replace_text/' file //替换每一行的第一处匹配的text
<div class="se-preview-section-delimiter"></div>
- 全局替换
sed 's/text/replace_text/g' file
<div class="se-preview-section-delimiter"></div>
默认替换后,输出替换后的内容,如果需要直接替换原文件,使用-i:
sed -i 's/text/repalce_text/g' file
<div class="se-preview-section-delimiter"></div>
- 移除空白行
sed '/^$/d' file
<div class="se-preview-section-delimiter"></div>
sed 's/book/books/' file #替换文本中的字符串:
sed 's/book/books/g' file
sed '/^$/d' file #删除空白行
数据流处理awk
详细教程可以查看 http://awk.readthedocs.io/en/latest/chapter-one.html
awk ' BEGIN{ statements } statements2 END{ statements } '
工作流程
1.执行begin中语句块;
2.从文件或stdin中读入一行,然后执行statements2,重复这个过程,直到文件全部被读取完毕;
3.执行end语句块;
特殊变量
NR:表示记录数量,在执行过程中对应当前行号;
NF:表示字段数量,在执行过程总对应当前行的字段数;
0:这个变量包含执行过程中当前行的文本内容;
0
:
这
个
变
量
包
含
执
行
过
程
中
当
前
行
的
文
本
内
容
;
1:第一个字段的文本内容;
$2:第二个字段的文本内容;
awk '{print $2, $3}' file
# 日志格式:'$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"'
#统计日志中访问最多的10个IP
awk '{a[$1]++}END{for(i in a)print a[i],i|"sort -k1 -nr|head -n10"}' access.log
排序 port
- -n 按数字进行排序 VS -d 按字典序进行排序
- -r 逆序排序
- -k N 指定按第N列排序
sort -nrk 1 data.txt
sort -bd data // 忽略像空格之类的前导空白字符
去重uniq
- 消除重复行
sort unsort.txt | uniq
统计 wc
wc -l file // 统计行数
wc -w file // 统计单词数
wc -c file // 统计字符数
“`
wc -l file // 统计行数
wc -w file // 统计单词数
wc -c file // 统计字符数
磁盘管理
查看磁盘空间利用大小
df -h
查看当前目录所占空间大小
du -sh
打包和解压
在linux中打包和压缩和分两步来实现的
tar、zip命令
打包是将多个文件归并到一个文件:
tar -cvf etc.tar /etc <==仅打包,不压缩!
gzip demo.txt #压缩
zip -q -r html.zip /home/Blinux/html #打包压缩成zip文件
解压
tar -zxvf xx.tar.gz
unzip test.zip# 解压zip文件
进程管理
查看进程 ps
ps -ef # 查询正在运行的进程信息
ps -A | grep nginx #查看进程中的nginx
top #显示进程信息,并实时更新
lsof -p 23295 #查询指定的进程ID(23295)打开的文件:
杀死进程 kill
# 杀死指定PID的进程 (PID为Process ID)
kill 1111
#杀死相关进程
kill -9 3434
查看网络服务和端口
netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
列出所有端口 (包括监听和未监听的):
netstat -a
列出所有 tcp 端口:
netstat -at
列出所有有监听的服务状态:
netstat -l
查看内存free
缺省时free的单位为KB
$free
total used free shared buffers cached
Mem: 8175320 6159248 2016072 0 310208 5243680
-/+ buffers/cache: 605360 7569960
Swap: 6881272 16196 6865076
free的输出一共有四行,第四行为交换区的信息,分别是交换的总量(total),使用量(used)和有多少空闲的交换区(free),这个比较清楚,不说太多
“`