Linux Shell 基础知识(二)
1.本文知识结构

2.文件的查询与检索
2.1. cd 目录切换
- 找到文件/目录位置:cd
- 切换到上一个工作目录: cd -
- 切换到home目录: cd or cd ~
- 显示当前路径: pwd
- 更改当前工作路径为path: $cd path
2.2. locate 查找目录及文件
- find 实时查找
- locate 为文件系统建立索引数据库,如果有文件更新,需要定期执行更新命令来更新索引库,在查找文件之前要先更新数据库
# 搜寻文件或目录:
$find ./ -name "core*" | xargs file
# 查找目标文件夹中是否有obj文件:
$find ./ -name '*.o'
# 递归当前目录及子目录删除所有.o文件
$find ./ -name "*.o" -exec rm {} \;
# 寻找包含有string的路径
$updatedb
$locate string
2.3. chown 文件与目录权限修改
- 改变文件的拥有者 chown
- 改变文件读、写、执行等属性 chmod
- 递归子目录修改: chown -R tuxapp source/
- 增加脚本可执行权限: chmod a+x myscript
2.4. 管道和重定向
- 批处理命令连接执行,使用 |
- 串联: 使用分号 ;
- 前面成功,则执行后面一条,否则,不执行:&&
- 前面失败,则后一条执行: ||
- 重定向: >
3.文本处理
3.1. find 文件查找
find命令用来在指定目录下查找文件。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。
一般来说,其语法格式为:
find path -option [ -print ] [ -exec -ok command ] {} \;
find 后分为两部分: path 和 expression ,以 第一个 - 为分隔线。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
常用的expression选项
| 选项 | 含义 |
|---|---|
| -mount, -xdev | 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件 |
| -amin n | 在过去 n 分钟内被读取过 |
| -anewer file | 比文件 file 更晚被读取过的文件 |
| -atime n | 在过去 n 天内被读取过的文件 |
| -cmin n | 在过去 n 分钟内被修改过 |
| -cnewer file | 比文件 file 更晚被更新过的文件 |
| -ctime n | 在过去 n 天内被修改过的文件 |
| -empty | 空的文件 |
| -gid n , -group name | gid 是 n 或是 group 名称是 name的文件 |
| -ipath p , path p | 路径名称符合 p 的文件,ipath 会忽略大小写 |
| -name name , -iname name | 文件名称符合 name 的文件。iname 会忽略大小写 |
| -size n | 文件大小 是 n 单位。b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组 |
| -type c | 文件类型是 c 的文件。d 代表目录,c 代表字型装置文件,b 代表区块装置文件,p 代表具名贮列,f 代表一般文件,l 代表符号连结,s 代表socket |
| -pid n | process id 是 n 的文件 |
另外,在find查找文件也是可以使用正则表达式的。
使用正则表达式查询需要的选项有两个:-regextype 和 -regex。----regextype 指定正则匹配的类型,可用的选项有很多,常见的有:'awk' , 'egrep' , 'ed', 'emacs', 'grep', 'sed' 等,不同匹配模式匹配的结果不一样。默认是emacs。
-regex pattern 表示文件名与正则表达式 pattern 匹配。这是对整个路径的匹配,不是搜索文件。即书写正则表达式时要考略前面的路径。
3.2. grep 文本搜索
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。
其一般语法为:
grep [ options ] pattern [file]
常见的 options 选项
| 短命令 | 长命令 | 含义 |
|---|---|---|
| -a | --text | 不要忽略二进制的数据 |
| -A | --after-context = 行数 | 除了显示符合范本样式的那一行之外,并显示该行之后的内容 |
| -b | --byte-offset | 在显示符合样式的那一行之前,标示出该行第一个字符的编号 |
| -c | --count | 计算符合样式的列数 |
| -C | --context = 行数 | 除了显示符合样式的那一行之外,并显示该行之前后的内容 |
| -d | --directories = 动作 | 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作 |
| -e | --regexp = 范本样式 | 指定字符串做为查找文件内容的样式 |
| -E | --extended-regexp | 将样式为延伸的正则表达式来使用 |
| -f | --file = 规则 | 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式 |
| -F | --fixed-regexp | 将样式视为固定字符串的列表 |
| -G | --basic-regexp | 将样式视为普通的表示法来使用 |
| -h | --no-filename | 在显示符合样式的那一行之前,不标示该行所属的文件名称 |
| -H | --with-filename | 在显示符合样式的那一行之前,表示该行所属的文件名称 |
| -i | --ignore-case | 忽略字符大小写的差别 |
| -l | --file-with-match | 列出文件内容符合指定的样式的文件名称 |
| -L | --file-without-match | 列出文件内容不符合指定的样式的文件名称 |
| -n | --line-number | 在显示符合样式的那一行之前,标示出该行的列数编号 |
| -o | --only-matching | 只显示匹配 pattern 部分 |
| -q | --quiet , --silent | 不显示任何信息 |
| -r | --recursive | 此参数的效果和指定"-d recurse"参数相同 |
| -s | --no-messages | 不显示错误信息 |
| -v | --revert-match | 显示不包含匹配文本的所有行 |
| -V | --version | 显示版本信息 |
| -w | --word-regexp | 只显示全字符合的列 |
| -x | --line-regexp | 只显示全列符合的列 |
| -y | 此参数的效果和指定 -i 参数相同 |
3.3. xargs 命令行参数转换
xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令。xargs 一般是和管道一起使用。
其一般语法为:
somecommand | xargs -item command
常见的item选项
| 选项 | 含义 |
|---|---|
| -a file | 从文件中读入作为sdtin |
| -e flag | 当xargs分析到含有flag这个标志的时候就停止,默认为'_' |
| -p | 当每次执行一个argument的时候询问一次用户 |
| -n num | 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的 |
| -t | 先打印命令,然后再执行 |
| -r | no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了 |
| -s num | 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数 |
| -L num | 从标准输入一次读取 num 行送给 command 命令 |
| -d delim | 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符 |
| -x | exit的意思,主要是配合-s使用 |
| -P | 修改最大的进程数,默认是1,为0时候为as many as it can |
3.4. uniq 删除重复
uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
# 消除重复行
$ sort unsort.txt | uniq
# 统计各行在文件中出现的次数
$ sort unsort.txt | uniq -c
# 找出重复行
$ sort unsort.txt | uniq -d
3.5. tr 字符转换
tr 命令用于转换或删除文件中的字符。它从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。
其一般语法为:
tr [options] SET1 [SET2]
常见options选项
| 短命令 | 长命令 | 含义 |
|---|---|---|
| -c | --complement | 反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换 |
| -d | --delete | 删除指令字符 |
| -s | --squeeze-repeats | 缩减连续重复的字符成指定的单个字符 |
| -t | --truncate-set1 | 削减 SET1 指定范围,使之与 SET2 设定长度相等 |
常见SET字符含义
| 字符 | 含义 |
|---|---|
| \NNN | 八进制值为NNN的字符 |
| \\ | 反斜杠 |
| \a | 终端鸣响 |
| \b | 退格 |
| \f | 换页 |
| \n | 换行 |
| \r | 回车 |
| \t | 水平制表符 |
| \v | 垂直制表符 |
| char1-char2 | 从char1到char2的升序递增过程中经历的所有字符 |
| [:alnum:] | 所有的字母和数字 |
| [:alpha:] | 所有的字母 |
| [:blank:] | 所有呈水平排列的空白字符 |
| [:cntrl:] | 所有的控制字符 |
| [:digit:] | 所有的数字 |
| [:graph:] | 所有的可打印字符,不包括空格 |
| [:lower:] | 所有的小写字母 |
| [:print:] | 所有的可打印字符,包括空格 |
| [:punct:] | 所有的标点字符 |
| [:space:] | 所有呈水平或垂直排列的空白字符 |
| [:upper:] | 所有的大写字母 |
| [:xdigit:] | 所有的十六进制数 |
| [=char=] | 所有和指定char相等的字符 |
3.6. cut、paste 裁剪与拼接
cut命令用于显示每行从开头算起 num1 到 num2 的文字。
cut 取的范围
N- 第N个字段到结尾
-M 第1个字段为M
N-M N到M个字段
cut 取的单位
-b 以字节为单位
-c 以字符为单位
-f 以字段为单位(使用定界符)
paste 指令会把每个文件以列对列的方式,一列列地加以合并。
其一般语法为:
$ paste [-s] [-d <间隔字符>] [文件...]
参数:
- -d<间隔字符>或--delimiters=<间隔字符> 用指定的间隔字符取代跳格字符。
- -s或--serial 串列进行而非平行处理。
- --help 在线帮助。
- --version 显示帮助信息。
- [文件…] 指定操作的文件路径
3.7. sed 文本替换
sed 命令可依照脚本的指令来处理、编辑文本文件,它主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。sed 命令是一行一行的处理文件内容的,一般在动作前加数字以确定对应的行。
其一般语法为:
$ sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
- -e script 或--expression=script 以选项中指定的script来处理输入的文本文件。
- -f script文件 或--file=script文件 以选项中指定的script文件来处理输入的文本文件。
- -h或--help 显示帮助。
- -n或--quiet或--silent 仅显示script处理后的结果。
- -V或--version 显示版本信息。
- -r或--regexp-extended 在脚本中使用扩展的正则表达式
动作说明:
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
- d :删除,因为是删除啊,所以 d 后面通常不接任何东西
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
- s :取代,可以直接进行字符级的替换的工作
# sed 命令需要多练习,可参考菜鸟教程实例
3.8. awk 数据流处理
awk 是一种处理文本文件的语言,是一个强大的文本分析工具。
其一般语法为:
awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)
选项参数说明:
- -F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。 - -v var=value or --asign var=value
赋值一个用户定义变量。 - -f scripfile or --file scriptfile
从脚本文件中读取awk命令。 - -mf nnn and -mr nnn
对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。 - -W compact or --compat, -W traditional or --traditional
在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。 - -W copyleft or --copyleft, -W copyright or --copyright
打印简短的版权信息。 - -W help or --help, -W usage or --usage
打印全部awk选项和每个选项的简短说明。 - -W lint or --lint
打印不能向传统unix平台移植的结构的警告。 - -W lint-old or --lint-old
打印关于不能向传统unix平台移植的结构的警告。 - -W posix
打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符和=不能代替和=;fflush无效。 - -W re-interval or --re-inerval
允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。 - -W source program-text or --source program-text
使用program-text作为源代码,可与-f命令混用。 - -W version or --version
打印bug报告信息的版本。
4.进程管理
4.1. lsof 查看进程状态
lsof 命令的全称是 list open files ,它是一个列出当前系统打开文件的工具。在 Linux 环境中,所有的事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。
其一般语法为:
$ lsof [options] filename
常用参数列表:
| 选项 | 含义 |
|---|---|
| lsof filename | 显示打开指定文件的所有进程 |
| lsof -a | 表示两个参数都必须满足时才显示结果 |
| lsof -c string | 显示COMMAND列中包含指定字符的进程所有打开的文件 |
| lsof -u username | 显示所属user进程打开的文件 |
| lsof -g gid | 显示归属gid的进程情况 |
| lsof +d /DIR/ | 显示目录下被进程打开的文件 |
| lsof +D /DIR/ | 显示目录下被进程打开的文件,它会搜索目录下的所有目录,时间相对较长 |
| lsof -d FD | 显示指定文件描述符的进程 |
| lsof -n | 不将IP转换为hostname,缺省是不加上-n参数 |
| lsof -i | 用以显示符合条件的进程情况 |
$ lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
# 46 –> IPv4 or IPv6
# protocol –> TCP or UDP
# hostname –> Internet host name
# hostaddr –> IPv4地址
# service –> /etc/service中的 service name (可以不只一个)
# port –> 端口号 (可以不只一个)
4.2. pmap 分析线程栈
Pmap 提供了进程的内存映射,pmap命令用于显示一个或多个进程的内存状态。其报告进程的地址空间和内存状态信息
其一般语法为:
$ pmap [options] PID
常见的options选项为:
- -x:显示扩展格式;
- -d:显示设备格式;
- -q:不显示头尾行;
- -V:显示指定版本。
5.性能监控
5.1. sar 性能监控
sar 命令是系统维护的重要工具,主要帮助我们掌握系统资源的使用情况,特别是内存和CPU 的使用情况。
其一般语法为:
$ sar [options] [-A] [-o file] t [n]
其中:t为采样间隔,n为采样次数,默认值是1;-o file表示将命令结果以二进制格式存放在文件中,file 是文件名。
常见的options选项有:
| 选项 | 含义 |
|---|---|
| -A | 所有报告的总和 |
| -u | 输出CPU使用情况的统计信息 |
| -v | 输出inode、文件和其他内核表的统计信息 |
| -d | 输出每一个块设备的活动信息 |
| -r | 输出内存和交换空间的统计信息 |
| -b | 显示I/O和传送速率的统计信息 |
| -a | 文件读写情况 |
| -c | 输出进程统计信息,每秒创建的进程数 |
| -R | 输出内存页面的统计信息 |
| -y | 终端设备活动情况 |
| -w | 输出系统交换活动信息 |
参考材料:
Linux教程|菜鸟教程
Linux Tools Quick Tutorial
Linux 命令帮助文档
Linux Shell 基础知识(二)的更多相关文章
- Linux shell基础知识(上)
Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...
- Linux Shell 基础知识(一)
1. 本文知识结构 2. shell 基础知识 2.1 shell 简单介绍 GNU bash shell 能提供对 Linux 系统的交互式访问,一般来说,使用快捷键 Ctrl + Alt + ...
- Linux Shell基础知识
一.文件系统和安全 chmod命令 chmod命令有两种模式,一种是符号模式,用ugo执行用户,用rwx执行权限:另一种是绝对模式,用八进制不同位置的不同值来代表不同用户的不同权限. 符号模式 chm ...
- Kali Linux渗透基础知识整理(二)漏洞扫描
Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...
- Kali Linux渗透基础知识整理(四):维持访问
Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...
- Linux Shell基础(下)
Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...
- 运维 04 Shell基础命令(二)
Shell基础命令(二) 查看Linux的发行版 cat /etc/redhat-release cat /etc/os-release 查看系统用户的id信息 id 用户名 id root id ...
- Linux shell脚本编程(二)
Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...
- java 基础知识二 基本类型与运算符
java 基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...
随机推荐
- 安装python的第三方库pillow
参考:http://jingyan.baidu.com/article/ff42efa929e6c8c19f220254.html 用Python做图像处理时,需要用到PIL(图像处理库).但是PIL ...
- POJ - 3436 ACM Computer Factory 网络流
POJ-3436:http://poj.org/problem?id=3436 题意 组配计算机,每个机器的能力为x,只能处理一定条件的计算机,能输出特定的计算机配置.进去的要求有1,进来的计算机这个 ...
- CodeForces -Codeforces Round #496 (Div. 3) E2. Median on Segments (General Case Edition)
参考:http://www.cnblogs.com/widsom/p/9290269.html 传送门:http://codeforces.com/contest/1005/problem/E2 题意 ...
- POJ 2155 Matrix (2维树状数组)
POJ-Matrix 题意:给你一个n*n矩阵的灯泡,灯泡的初始状态都为0,T次操作,分别是翻转操作:将x1,y1 --- x2, y2的灯泡状态反转 和 查询操作 找出x1, y1位置灯泡的状态. ...
- lightoj 1044 - Palindrome Partitioning(需要优化的区间dp)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1044 题意:求给出的字符串最少能分成多少串回文串. 一般会想到用区间dp暴力3个for ...
- 用深度学习技术FCN自动生成口红
1 这个是什么? 基于全卷积神经网络(FCN)的自动生成口红Python程序. 图1 FCN生成口红的效果(注:此两张人脸图来自人脸公开数据库LFW) 2 怎么使用了? 首 ...
- Go第三方日志库logrus
日志是程序中必不可少的一个环节,由于Go语言内置的日志库功能比较简洁,我们在实际开发中通常会选择使用第三方的日志库来进行开发.本文介绍了logrus这个日志库的基本使用. logrus介绍 Logru ...
- 六星教育php vip视频(分享)
最近看的一个swoole的课程,应该也算是vip课程了,不是公开的直播课 比较有特点有一定深度,swoole的实战教程一直也不多,结合swoole构建一个新型框架,最后讲解如何实现分布式RPC的调用. ...
- 《程序实现》从xml、txt文件里读取数据写入excel表格
直接上码 import java.io.BufferedReader; import java.io.DataInputStream; import java.io.File; import java ...
- (附源码gitHub下载地址)spring boot -jta-atomikos分布式事务
应用场景:双数据源,就是某些项目会涉及到两个数据源或者两个以上的数据源,这个多数据源的项目一般是数据同步,也就是把数据从另一个系统中,保存到另一个系统,两边的 数据库又不一样,比如一个Mysql.一个 ...