Linux中命令格式为:command [options] [arguments]
中括号代表是可选的,即有些命令不需要选项也不需要参数
选项分为长选项和短选项。
比如-h,-l,-s等。(- 后面接单个字母)
短选项都是使用‘-’引导,当有多个短选项时,各选项之间使用空格隔开。
有些命令的短选项可以组合,比如-l –h 可以组合为–lh
有些命令的短选项可以不带-,这通常叫作BSD风格的选项,比如ps aux
有些短选项需要带选项本身的参数,比如-L 512M
比如–help,–list等。(-- 后面接单词)
长选面都是完整的单词
长选项通常不能组合
如果需要参数,长选项的参数通常需要‘=’,比如–size=1G
参数是指命令的作用对象。
如ls命令,不加参数的时候显示是当前目录,也可以加参数,如ls /dev, 则输出结果是/dev目录。
参数是传递到脚本中的真实的参数
以上简要说明了选项及参数的区别,但具体Linux中哪条命令有哪些选项及参数,需要我们靠经验积累或者查看Linux的帮助了。
竖线‘|’ ,在linux中是作为管道符的,将‘|’前面命令的输出作为’|'后面的输入。举个例子
ps -ef | grep java #使用正则grep命令寻找java进程
实际上似乎可以理解成 grep java (ps -ef)
双竖线‘||’,用双竖线‘||’分割的多条命令,执行的时候遵循如下规则,如果前一条命令为真,则后面的命令不会执行,如果前一条命令为假,则继续执行后面的命令。
[[ 1 -lt 2 ]]||echo b
判断文件是否存在 不存在则创建
[[ -f 1.txt ]] || touch 1.txt
同时执行多条命令,不管命令是否执行成功
可同时执行多条命令,当碰到执行错误的命令时,将不再执行后面的命令。如果一直没有错误的,则执行完毕。
含义:cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
语法格式
cat [-AbeEnstTuv] [--help] [--version] fileName
-n 或 --number:由 1 开始对所有输出的行数编号。
-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
-v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。
-E 或 --show-ends : 在每行结束处显示 $。
-T 或 --show-tabs: 将 TAB 字符显示为 ^I。
-A, --show-all:等价于 -vET。
-e:等价于"-vE"选项;
-t:等价于"-vT"选项;
# 把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里:
cat -n textfile1 > textfile2
#把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)
#之后将内容附加到 textfile3 文档里:
cat -b textfile1 textfile2 >> textfile3
#清空 /etc/test.txt 文档内容:
cat /dev/null > /etc/test.txt
#cat 也可以用来制作镜像文件。
#例如要制作软盘的镜像文件,将软盘放好后输入:
cat /dev/fd0 > OUTFILE
#相反的,如果想把 image file 写到软盘,输入:
cat IMG_FILE > /dev/fd0

在类 Unix 系统中,/dev/null 称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个 EOF。
而使用 cat $filename > /dev/null 则不会得到任何信息,因为我们将本来该通过标准输出显示的文件信息重定向到了 /dev/null 中。
使用 cat $filename 1 > /dev/null 也会得到同样的效果,因为默认重定向的 1 就是标准输出。 如果你对 shell 脚本或者重定向比较熟悉的话,应该会联想到 2 ,也即标准错误输出。
如果我们不想看到错误输出呢?我们可以禁止标准错误 cat $badname 2 > /dev/null。
介绍
全拼:Global search REgular expression and Print out the line.
作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查,打印匹配到的行.
格式
grep [options] [pattern] [file ...]
operations
-a --text # 不要忽略二进制数据。
-A <显示行数> --after-context=<显示行数> # 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-b --byte-offset # 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-B<显示行数> --before-context=<显示行数> # 除了显示符合样式的那一行之外,并显示该行之前的内容。
-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-matches # 列出文件内容符合指定的范本样式的文件名称。
-L --files-without-match # 列出文件内容不符合指定的范本样式的文件名称。
-n --line-number # 在显示符合范本样式的那一列之前,标示出该列的编号。
-P --perl-regexp # PATTERN 是一个 Perl 正则表达式
-q --quiet或–silent # 不显示任何信息。
-R/-r --recursive # 此参数的效果和指定“-d recurse”参数相同。
-s --no-messages # 不显示错误信息。
-v --revert-match # 反转查找。
-V --version # 显示版本信息。
-w --word-regexp # 只显示全字符合的列。
-x --line-regexp # 只显示全列符合的列。
-y # 此参数效果跟“-i”相同。
-o # 只输出文件中匹配到的部分。
-m --max-count= # 找到num行结果后停止查找,用来限制匹配行数
patten
详见正则表达式
实例
查找进程
> ps -ef | grep java
root 16934 1 0 Feb25 ? 00:12:23 java -jar demo.jar
root 6891 2151 0 21:42 pts/2 00:00:00 grep --color=auto java
第一条记录是查找出的进程;第二条结果是grep进程本身,并非真正要找的进程。补显示grep本身可使用
ps -ef | grep redis | grep -v grep
查找进程个数
> ps -ef | grep -c java
10
> ps -ef | grep java -c
10
查找文件关键词
> grep "linux" rumenz.txt
linux123
linuxxxx
// -n 显示行号
> grep -n "linux" rumenz.txt
6:linux123
7:linuxxxx
从文件中读取关键词进行搜索
## k中是要搜寻的关键词
> cat rumenz.txt | grep -f k.txt
redis
linux123
linuxxxx
//显示行号
> cat rumenz.txt | grep -nf k.txt
5:redis
6:linux123
7:linuxxxx
多文件找关键词
> grep "linux" rumenz.txt rumenz123.txt
rumenz.txt:linux123
rumenz.txt:linuxxxx
rumenz123.txt:linux123
rumenz123.txt:linuxxxx
rumenz123.txt:linux100
通配符文件搜索
// 查找当前目录下所有以rumenz开头的文件
> grep "linux" rumenz*
rumenz123.txt:linux123
rumenz123.txt:linuxxxx
rumenz123.txt:linux100
rumenz.txt:linux123
rumenz.txt:linuxxxx
// 查找当前目录下所有以.txt结尾的文件
> grep "linux" *.txt
k.txt:linux
rumenz123.txt:linux123
rumenz123.txt:linuxxxx
rumenz123.txt:linux100
rumenz.txt:linux123
rumenz.txt:linuxxxx
————————————————
版权声明:本文为CSDN博主「入门小站」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_37335761/article/details/122682881
tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail [参数] [文件]
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容
–pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
tail notes.log # 默认显示最后 10 行
tail -f filename #会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
tail -n +20 notes.log #显示文件 notes.log 的内容,从第 20 行至文件末尾
tail -n 100 /etc/cron #显示最后100行数据
tail -n -100 /etc/cron #除了前99行不显示外,显示第100行到末尾行
head命令类似 head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
https://www.runoob.com/linux/linux-vim.html
ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。
ps [options] [--help]
-A 列出所有的进程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的进程
USER PID %CPU %MEM VSZ(虚拟内存占用) RSS(记忆体 内存大小) TTY STAT(该行程的状态:) START TIME COMMAND(所执行的指令)
只用ps 即使加了-a 也不会显示全部进程 要显示全部进程要加-e参数 -f用于显示详细信息
实例
ps -ef | grep 进程关键字 (最后一个进程是grep本身)
显示进程信息 ps -A
ps -u root //显示root进程用户信息
ps -ef //显示所有命令,连带命令行
kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]
-l <信息编号> 若不加<信息编号>选项,则 -l 参数会列出全部的信息名称。
-s <信息名称或编号> 指定要送出的信息。
[程序] [程序]可以是程序的PID或是PGID,也可以是工作编号
使用 kill -l 命令列出所有可用信号。
最常用的信号是:
1 (HUP):重新加载进程。
9 (KILL):杀死一个进程。
15 (TERM):正常停止一个进程。
# 杀死进程
kill 12345
#强制杀死进程
kill -KILL 123456
#发送SIGHUP信号,可以使用一下信号
kill -HUP pid
#彻底杀死进程
kill -9 123456
#杀死指定用户所有进程
kill -9 $(ps -ef | grep hnlinux) //方法一 过滤出hnlinux用户进程
kill -u hnlinux //方法二
linux 的 kill 命令是向进程发送信号,kill 不是杀死的意思,-9 表示无条件退出,但由进程自行决定是否退出,这就是为什么 kill -9 终止不了系统进程和守护进程的原因。
ls(英文全拼:list files): 列出目录及文件名
选项与参数:
-a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
-d :仅列出目录本身,而不是列出目录内的文件数据(常用)
-l :长数据串列出,包含文件的属性与权限等等数据;(常用)
cd(英文全拼:change directory):切换目录
1)cd 进入用户主目录
(2)cd ~ 进入用户主目录
(3)cd - 返回进入此目录之前所在目录
(4)cd … 返回上一级目录
(5)cd …/…返回上两级目录
/代表着根目录,是树形结构的最上层
.表示当前目录,也可以用./表示;
…表示上一级目录,也可以用. ./表示;
pwd(英文全拼:print work directory):显示目前的目录
-P :显示出确实的路径,而非使用连结 (link) 路径。
mkdir(英文全拼:make directory):创建一个新的目录
-m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
-p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!
新建文件可以用touch命令 如touch a.java
虽然touch本来是用来改文件修改日期的
rmdir(英文全拼:remove directory):删除一个空的目录
cp(英文全拼:copy file): 复制文件或目录
rm(英文全拼:remove): 删除文件或目录
mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
移动文件:mv 文件名 移动目的地文件名
重命名文件:mv 文件名 修改后的文件名
find的命令比较复杂 下面几种格式讲的都是一个东西
find [paths] [expression,包含options] [actions]
find [path...] -options [-print / -ecex / -ok]
find path -option [ -print ] [ -exec -ok command ] {} \;
find <指定目录> <指定条件> <指定动作>
find 命令接受一个或多个路径(paths)作为搜索范围,并在该路径下递归地搜索。即检索完指定的目录后,还会对该目录下的子目录进行检索,以及子目录下的子目录……直到到达目录树底部。
默认情况下(不带任何搜索条件),find 命令会返回指定目录下的所有文件,所以常常需要通过特定的 expression 对结果进行筛选。
find 命令默认的 action 是将所有检索结果打印至标准输出。可以通过自定义 action ,让 find 命令对搜索到的结果执行特定的操作。
find还支持and or等逻辑查找符号

这里先不做详细解释,简单地测试下 find 命令:
#如何查找一个文件大小超过5M的文件
find . -type f -size +100M
#如果知道一个文件名称,怎么查这个文件在linux下的哪个目录,
#如:要查找tnsnames.ora文件
find / -name tnsnames.ora
#output
#/opt/app/oracle/product/10.2/network/admin/tnsnames.ora
#/opt/app/oracle/product/10.2/network/admin/samples/tnsnames.ora
#查找小写字母开头的.c文件
find . -name ‘[a-z]*.c‘ -print #支持直接正则表达式
#搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。
find . -name 'my*' (必须用引号括起来)
#搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。
$ find . -name 'my*' -ls
# 删除搜索结果
find directory -name file2 -delete
#按照文件特征查找
find / -amin -10 # 查找在系统中最后10分钟访问的文件(access time)
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于 group为cat的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件(modify time)
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -user fred #查找在系统中属于fred这个用户的文件
find / -size +10000c #查找出大于10000000字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB)
find / -size -1000k #查找出小于1000KB的文件
有如下结构的示例目录 directory
$ tree directory
directory
├── file1
├── file2
├── sub-dir1
│ ├── file1
│ ├── file2
│ └── file3
└── sub-dir2
├── file2
└── sub-subdir1
└── file1
3 directories, 7 files
默认的 find 命令会列出该目录下的所有文件
复制代码
$ find directory
directory
directory/sub-dir1
directory/sub-dir1/file3
directory/sub-dir1/file2
directory/sub-dir1/file1
directory/file2
directory/sub-dir2
directory/sub-dir2/file2
directory/sub-dir2/sub-subdir1
directory/sub-dir2/sub-subdir1/file1
directory/file1
复制代码
为 find 命令指定 expression 以筛选出特定的文件
$ find directory -name file2
directory/sub-dir1/file2
directory/file2
directory/sub-dir2/file2
为 find 命令指定特殊的 action(此处 -delete 表示删除搜索结果)
复制代码
$ find directory -name file2 -delete
$ find directory
directory
directory/sub-dir1
directory/sub-dir1/file3
directory/sub-dir1/file1
directory/sub-dir2
directory/sub-dir2/sub-subdir1
directory/sub-dir2/sub-subdir1/file1
directory/file1
复制代码
二、搜索条件(expression)
-name 和 -iname 两个选项都支持 wildcards 。如:
? 可以表示任意一个单一的符号
有些时候,你需要在搜索时匹配某个文件或目录的完整路径,而不仅仅是匹配文件名。可以使用 -path 或 -ipath 选项。
如查找 /usr 下所有文件名以 .txt 结尾的文件或目录,且该文件的父目录必须是 src。可以使用以下命令:
find /usr -path ‘/src/.txt’
-type 选项最常用的参数如下:
f: 文件
d: 目录
l: 符号链接
find /usr -type d -name ‘python*’ 检索 /usr 下所有文件名以 python 开头的目录
find ~ -type d -empty 检索用户主目录下所有的空目录
如需要检索 /usr 下所有文件名不以 .txt 为后缀的文件。可以使用以下命令:
find /usr -type f ! -name ‘*.txt’
也可以“翻转”任何其他的筛选条件,如:
find /usr -type f ! -empty 检索 /usr 下所有内容不为空的文件
find / -type f -user starky 检索根目录下所有属主为 starky 的文件
类似于 -user选项,-group 选项则可以根据文件或目录的属组进行检索。
Linux 系统中,与文件相关联的时间参数有以下三种:
修改时间(Modification time):最后一次文件内容有过更改的时间点
访问时间(Access time):最后一次文件有被读取过的时间点
变更时间(Change time):最后一次文件有被变更过的时间点(如内容被修改,或权限等 metadata 被修改)
与此对应的是 find 命令中的 -mtime,-atime 和 -ctime 三个选项。
这三个选项的使用遵循以下示例中的规则:
-mtime 2:该文件 2 天前被修改过
-mtime -2:该文件 2 天以内被修改过
-mtime +2:该文件距离上次修改已经超过 2 天时间
find /usr -type f -mtime 2 检索 /usr 下两天前被修改过的文件
如果觉得 -mtime 等选项以天为单位时间有点长,还可以使用 -mmin,-amin,-cmin 三个选项:
find /usr -type f -mtime +50 -mtime -100 检索 /usr 下 50 到 100 天之前修改过的文件
find /usr -type f -mtime 2 -amin 5 检索 /usr 下两天前被修改过且 5 分钟前又读取过的文件
表示文件大小的单位由以下字符组成:
c:字节
k:Kb
M:Mb
G:Gb
另外,还可以使用 + 或 - 符号表示大于或小于当前条件。
find / -size +1G 检索文件大小高于 1 GB 的文件
使用符号形式
如需要检索 /usr 目录下权限为 rwxr-xr-x 的文件,可以使用以下命令:
find /usr -perm u=rwx,g=rx,o=rx
搜索 /usr 目录下所有权限为 r-xr-xr-x(即系统中的所有用户都只有读写权限)的文件和目录,可以使用以下命令:
find /usr -perm a=rx
很多时候,我们只想匹配文件权限的一个子集。比如,检索可以直接被任何用户执行的文件,即只关心文件的执行权限,而不用管其读写权限是什么。
上述的需求可以通过以下命令实现:find / -type f -perm /a=x
其中 a=x 前面的 / 符号即用来表示只匹配权限的某个子集(执行权限),而不用关心其他权限的具体设置。
使用数字形式
-perm 选项也支持数字形式的文件权限标记。
find /usr -perm 644 搜索 /usr 目录下权限为 644(即 rwxr-xr-x)的文件
find / -maxdepth 3 搜索时向下递归的层数最大为 3
此外还可以使用小括号对搜索条件进行分组。注意 find 命令中的小括号常需要用单引号包裹起来。因小括号在 Shell 中有特殊的含义。
如检索 /usr 下文件名以 python 开头且类型为目录的文件
find /usr -type d -name ‘python*’
该命令等同于:
find /usr -type d -a -name ‘python*’
更复杂的组合形式如:
find / ‘(’ -mmin -5 -o -mtime +50 ‘)’ -a -type f
三、对搜索结果执行命令
如删除 home 目录下所有的空目录:
find ~ -type d -empty -delete
如需要将 home 目录下所有的 MP3 音频文件复制到移动存储设备(假设路径是 /media/MyDrive),可使用下面的命令:
find ~ -type f -name ‘*.mp3’ -exec cp {} /media/MyDrive ‘;’
其中的大括号({})作为检索到的文件的 占位符 ,而分号( ;)作为命令结束的标志。因为分号是 Shell 中有特殊含义的符号,所以需要使用单引号括起来。
每当 find 命令检索到一个符合条件的文件,会使用其完整路径取代命令中的 {},然后执行 -exec 后面的命令一次。
另一个很重要的用法是,在多个文件中检索某个指定的字符串。
如在用户主目录下的所有文件中检索字符串 hello ,可以使用如下命令:
find ~ -type f -exec grep -l hello {} ‘;’
-exec 选项中的 + 符号
创建 Gzip 格式的压缩文件的命令为:tar -czvf filename.tar.gz
现在假设需要将用户主目录下所有的 MP3 文件添加到压缩包 music.tar.gz 中,直观的感觉是,其命令应为如下形式:
find ~ -type f -name ‘*.mp3’ -exec tar -czvf music.tar.gz {} ‘;’
实际情况是,这样得到的 music.tar.gz 其实只包含一个 MP3 文件。
原因是 find 命令每次发现一个音频文件,都会再执行一次 -exec 选项后面的压缩命令。导致先前生成的压缩包被覆盖。
可以先让 find 命令检索出所有符合条件的音频文件,再将得到的文件列表传递给后面的压缩命令。完整的命令如下:
find ~ -type f -name ‘*.mp3’ -exec tar -czvf music.tar.gz {} +
显示文件信息
如果想浏览搜索到的文件(目录)的详细信息(如权限和大小等),可以直接使用 -ls 选项。
find / -type file -size +1G -ls 浏览所有 1G 以上大小的文件的详细信息
locate tnsnames.ora
#该指令会在特定目录中查找符合条件的文件。
#这些文件应属于原始代码、二进制文件,或是帮助文件。
whereis nginx
- ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组
- chown (change ownerp) : 修改所属用户与组。
- chmod (change mode) : 修改用户的权限。
chgrp [-R] 属组名 文件名
参数选项
-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
你可以使用 man [命令] 来查看各个命令的使用文档,如 :man cp。
查看日志
5.如何查看测试项目的日志
一般测试的项目里面,有个logs的目录文件,会存放日志文件,有个xxx.out的文件,可以用tail -f 动态实时查看后端日志
先cd 到logs目录(里面有xx.out文件)
tail -f xx.out
这时屏幕上会动态实时显示当前的日志,ctr+c停止
6.如何查看最近1000行日志
tail -1000 xx.out
查看端口
7.LINUX中如何查看某个端口是否被占用
netstat -anp | grep 端口号
图中主要看监控状态为LISTEN表示已经被占用,最后一列显示被服务mysqld占用,查看具体端口号,只要有如图这一行就表示被占用了
查看82端口的使用情况,如图
netstat -anp |grep 82
可以看出并没有LISTEN那一行,所以就表示没有被占用。此处注意,图中显示的LISTENING并不表示端口被占用,不要和LISTEN混淆哦,查看具体端口时候,必须要看到tcp,端口号,LISTEN那一行,才表示端口被占用了
查看当前所有已经使用的端口情况,如图:
netstat -nultp(此处不用加端口号)
tree 查看当前的目录树