linux
2022-04-10 17:22:21 0 举报
AI智能生成
linux相关知识
作者其他创作
大纲/内容
linux
面试
Linux 如何查看端口占用情况
lsof -i:端口号
用于查看某一端口的占用情况
使用
centos默认是没有安装lsof(list open files)的,需要手动安装
yum install lsof
lsof -i:8080
返回参数含义
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
netstat -tunlp | grep 端口号
用于查看指定端口号的进程情况
使用
netstat -tunlp|grep 8080
各参数含义
-t : 指明显示TCP端口
-u : 指明显示UDP端口
-l : 仅显示监听套接字(LISTEN状态的套接字)
-p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序
-n : 不进行DNS解析
-a 显示所有连接的端口
怎么查看某个进程中的线程?
ps
由进程号为<pid>的进程创建的所有线程
ps -T -p <pid>
top
top输出某个特定进程<pid>并检查该进程内运行的线程状况
top -H -p <pid>
pstree
树状图显示关系
pstree -p <pid>
怎么批量替换一个文件夹下所有文件中的一个字符
sed命令参数
-i选项是直接在文件中替换,不在终端输出;
-r选项是所给的path中的目录递归查找;
-l选项是输出所有匹配到oldstring的文件;
操作
替换某个文件
sed -i “s/oldstring/newstring/g” filename
将1.log中的字符2修改为a
sed -i "s/2/a/g" 1.log
替换某个文件夹下所有的文件
sed -i “s/oldstring/newstring/g” path
将/opt/app/sed目录下所有文件下的文件2变成aaa
sed -i "s/2/aaa/g" *.log
sed -i "s/4/bbb/g" /opt/app/sed/*
找某个文件文件内容关键字段 的前5行
grep -A/B/C n '关键字' filename
打印匹配行的前后3行
grep -3 '5' test.log
grep -C 3 '5' test.log
grep -A 3 -B 3 '5' test.log
打印匹配行的前3行
grep -B 3 '5' test.log
打印匹配行的后3行
grep -A 3 '5' test.log
cat filename |grep -A/B/C n '关键字'
cat filename | grep -C 5 '关键字' (显示日志里匹配字串那行以及前后5行)
cat test.log |grep -C 3 '5'
cat filename | grep -B 5 '关键字' (显示匹配字串及前5行)
cat test.log |grep -B 3 '5'
cat filename | grep -A 5 '关键字' (显示匹配字串及后5行)
cat test.log |grep -A 3 '5'
查看日志命令
tail
实时查看日志
tail -f filename (默认最后10行,相当于增加参数 -n 10)
tail -f app.log
head
显示文件的前几行
cat sed.txt |head -n 5
语法
tail -n 1000:显示最后1000行
tail -n +1000:从1000行开始显示,显示1000行以后的
head -n 1000:显示前面1000行
cat
介绍
cat命令的用途是连接文件或标准输入并打印。这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,
它常与重定向符号配合使用。
它常与重定向符号配合使用。
功能
一次显示整个文件:cat filename;
从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件.;
将标准输入的内容写入file,所见即所得,Ctrl+d结束,适合交互式的创建文件
将几个文件合并为一个文件:cat file1 file2 >> file。
语法
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"选项;
tac
反向列示文件内容,由最后一行到第一行反向在萤幕上显示出来!
语法格式
tac [参数] [文件]
常用参数
-b 在行前而非行尾添加分隔标志
-r 将分隔标志视作正则表达式来解析
-s 使用指定字符串代替换行作为分隔标志
--version 显示版本信息并退出
--help 显示此帮助信息并退出
echo
linux上查看java进程
jps
java process status
参数
-q 只显示pid,不显示class名称,jar文件名和传递给main 方法的参数
-m 输出传递给main 方法的参数,在嵌入式jvm上可能是null
-l 输出应用程序main class的完整package名 或者 应用程序的jar文件完整路径名
-v 输出传递给JVM的参数
ps -ef|grep java
操作产生的问题
当前文件没有执行权限
问题
解决
查看当前用户
who
如果是非root 用户,切换为root用户
查询文件执行权限:没有执行权限
对单个文件授权
chmod 777 startup.sh
对某个文件下所有的文件授权
chmod -R 777 /opt/tomcat
启动成功
shell编程(2021-04-26)
什么是shell
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
分类
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
脚本运行
脚本格式要求
脚本以#!/bin/bash 开头
shell对脚本大小写敏感
脚本的执行
赋予用户脚本执行权限
chmod 744 hello.sh
执行
绝对路径
/opt/test-shell/hello.sh
相对路径
./hello.sh
作为解释器参数
sh hello1.sh
/bin/sh hello1.sh
shell变量
分类
系统变量
$HOME
$PWD
$SHELL
$USER
用户自定义变量
a=5
变量定义规则
变量名和等号之间不能有空格
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
中间不能有空格,可以使用下划线(_)
不能使用标点符号
不能使用bash里的关键字(可用help命令查看保留关键字)
变量名称一般习惯为大写
显示系统中的变量
set
基本语法
定义变量
变量=值,=两边不能有空格
撤销变量
unset 变量
静态变量
readonly 变量,注意:`不能unset`
将命令的返回值赋给变量
V=`ls -l`
V=$(ls -l)
变量使用
$变量名
${变量名}
大括号是为了区分变量的边界
删除变量
unset
变量类型
局部变量
在脚本或命令中定义,仅在当前shell实例中有效
环境变量
定义
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
使用
export 变量名=变量值:将shell变量输出为环境变量
source 配置文件:让修改后的配置文件信息立即生效
echo $变量名:查询环境变量的值
shell变量
由shell程序设置的特殊变量
shell注释
#
以 # 开头的行就是注释,会被解释器忽略。
多行注释
EOF 也可以使用其他符号
使用
位置参数
介绍
在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
特殊位置参数
$#
传递到脚本的参数的个数
$*
以一个单字符串显示所有向脚本传递的参数。如"\$*"用「"」括起来的情况、以"\$1 \$2 … \$n"的形式输出所有参数。
$$
脚本运行的当前进程ID号
$!
后台运行的最后一个进程的ID号
$@
与\$*相同,但是使用时加引号,并在引号中返回每个参数。如"\$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$-
显示Shell使用的当前选项,与set命令功能相同。
$?
显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
shell字符串
单引号
限制
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用
示例
str='this is a string'
双引号
使用
双引号里可以有变量
双引号里可以出现转义字符
示例
str="Hello, I know you are \"$your_name\"! \n"
拼接字符串
使用双引号拼接
greeting="hello, "$your_name" !"
使用单引号拼接
greeting_2='hello, '$your_name' !'
获取字符串长度
示例
提取子字符串
示例
从字符串第 2 个字符开始截取 4 个字符
查找子字符串
示例
查找字符a 或3 的位置(哪个字母先出现就计算哪个)
shell数组
介绍
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小
数组赋值
数组下标从0开始
用括号表示,元素之间使用空格隔开
array_name=(value1 ... valuen)
使用下标来定义数组
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
读取数组
${数组名[index]}
获取数组中的所有元素,使用@ 或 * 可以获取数组中的所有元素
获取数组长度的方法与获取字符串长度的方法相同
shell运算符
算数运算符
介绍
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
示例
注意:符号之间要有空格
其他示例
乘号(*)前边必须加反斜杠(\)才能实现乘法运算
关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
运算符
-eq
检测两个数是否相等,相等返回 true。[ \$a -eq $b ] 返回 false。
-ne
检测两个数是否不相等,不相等返回 true。[ \$a -ne $b ] 返回 true
-gt
检测左边的数是否大于右边的,如果是,则返回 true。[ \$a -gt $b ] 返回 false。
-lt
检测左边的数是否小于右边的,如果是,则返回 true。[ \$a -lt $b ] 返回 true。
-ge
检测左边的数是否大于等于右边的,如果是,则返回 true。[\$a -ge $b ] 返回 false
-le
检测左边的数是否小于等于右边的,如果是,则返回 true。[ \$a -le $b ] 返回 true。
示例
布尔运算符
运算符
!
非运算,表达式为 true 则返回 false,否则返回 true。[ ! false ] 返回 true。
-o
或运算,有一个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true
-a
与运算,两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false
示例
逻辑运算符
运算符
&&
逻辑的 AND,a=10,b=20
[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||
逻辑的 OR,a=10,b=20
[[ $a -lt 100 ]]
示例
字符串运算符
运算符
= 检测两个字符串是否相等,相等返回 true。[ \$a = $b ] 返回 false。
!=检测两个字符串是否相等,不相等返回 true。[ \$a != $b ] 返回 true。
-z检测字符串长度是否为0,为0返回 true。[ -z $a ] 返回 false。
-n检测字符串长度是否为0,不为0返回 true。[ -n "$a" ] 返回 true。
$检测字符串是否为空,不为空返回 true。[ $a ] 返回 true。
示例
文件测试运算符
运算符
-b file检测文件是否是块设备文件,如果是,则返回 true。[ -b $file ] 返回 false。
-c file检测文件是否是字符设备文件,如果是,则返回 true。[ -c $file ] 返回 false。
-d file检测文件是否是目录,如果是,则返回 true。[ -d $file ] 返回 false。
-f file检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。[ -f $file ] 返回 true。
-g file检测文件是否设置了 SGID 位,如果是,则返回 true。[ -g $file ] 返回 false。
-k file检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。[ -k $file ] 返回 false。
-p file检测文件是否是有名管道,如果是,则返回 true。[ -p $file ] 返回 false。
-u file检测文件是否设置了 SUID 位,如果是,则返回 true。[ -u $file ] 返回 false。
-r file检测文件是否可读,如果是,则返回 true。[ -r $file ] 返回 true。
-w file检测文件是否可写,如果是,则返回 true。[ -w $file ] 返回 true。
-x file检测文件是否可执行,如果是,则返回 true。[ -x $file ] 返回 true。
-s file检测文件是否为空(文件大小是否大于0),不为空返回 true。[ -s $file ] 返回 true。
-e file检测文件(包括目录)是否存在,如果是,则返回 true。[ -e $file ] 返回 true。
示例
准备
例子
shell打印输出命令
echo命令
显示普通字符串
echo "it is a test"
echo It is a test
显示转义字符
echo "\"it is a test\""
显示变量
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
显示换行
echo -e "ok \n"
-e表示开启转义
显示不换行
\c
显示结果定向到文件
echo 123456 >a.txt
会覆盖之前文件的内容
原样输出字符串,不进行转义或取变量(用单引号)
echo '$name'
显示命令执行结果
echo `date`
printf 命令
介绍
printf 命令模仿 C 程序库(library)里的 printf() 程序。
printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。
printf 使用引用文本或空格分隔的参数,外面可以在 * printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。
语法
printf format-string [arguments...]
format-string: 为格式控制字符串
arguments: 为参数列表。
使用
%-10s 指一个宽度为10个字符
-表示左对齐,没有则表示右对齐,任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中.2指保留2位小数。
printf的转义序列
\a 警告字符,通常为ASCII的BEL字符
\b 后退
\c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
\f 换页(formfeed)
\n 换行
\r 回车(Carriage return)
\t 水平制表符
\v 垂直制表符
\\ 一个字面上的反斜杠字符
\ddd 表示1到3位数八进制值的字符。仅在格式字符串中有效
\0ddd 表示1到3位的八进制值字符
read读取控制台的输入
read [选项] (参数)
-p:指定读取值时的提示符
-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。
示例
提示7秒内,读取控制台输入的名称
shell test 命令
数值测试
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真
字符串测试
= 等于则为真
!= 不相等则为真
-z 字符串字符串的长度为零则为真
-n 字符串字符串的长度不为零则为真
文件测试
-e 文件名 如果文件存在则为真
-r 文件名 如果文件存在且可读则为真
-w 文件名 如果文件存在且可写则为真
-x 文件名 如果文件存在且可执行则为真
-s 文件名 如果文件存在且至少有一个字符则为真
-d 文件名 如果文件存在且为目录则为真
-f 文件名 如果文件存在且为普通文件则为真
-c 文件名 如果文件存在且为字符型特殊文件则为真
-b 文件名 如果文件存在且为块特殊文件则为真
shell流程控制
判断语句
if语句
格式
if else-if else
示例
if ...fi
示例
case语句
介绍
case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。
case工作方式如上所示。取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。
取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
格式
示例
循环语句
for循环
格式
当变量值在列表里,for循环即执行一次所有命令,使用变量名获取列表中的当前取值。命令可为任何有效的shell命令和语句。in列表可以包含替换、字符串和文件名。
in列表是可选的,如果不用它,for循环使用命令行的位置参数。
示例
while循环
介绍
while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件
格式
示例
测试条件是:如果int小于等于5,那么条件返回真。int从0开始,每次循环处理时,int加1。运行上述脚本,返回数字1到5,然后终止
Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量
until循环
介绍
until 循环执行一系列命令直至条件为 true 时停止。
until 循环与 while 循环在处理方式上刚好相反。
一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。
格式
示例
使用 until 命令来输出 0 ~ 9 的数字
跳出循环
在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue
break命令
break命令允许跳出所有循环(终止执行后面的所有循环)
示例
脚本进入死循环直至用户输入数字大于5。要跳出这个循环,返回到shell提示符下,需要使用break命令。
continue命令
continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环
示例
shell函数
自定义函数
格式
1. 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
2. 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
示例
无返回值
示例
定义一个带有return语句的函数
注意
函数返回值在调用该函数后通过 $? 来获得。
注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
函数参数
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...
示例
注意
$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数
特殊字符
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
系统函数
basename
返回完整路径最后/的部分,常用于获取文件名
格式
basename [pathname] [suffix]
basename [string] [suffix]
basename命令会删掉所有的前缀包括最后一个/
选项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉
选项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉
dirname
返回完整路径最后/的前面的部分,常用于返回路径部分
dirname 文件绝对路径:从给定的包含绝对路径的文件名中出去文件名(非目录部分),然后返回剩下的路径(目录部分
输入输出重定向
输出重定向
重定向一般通过在命令间插入特定的符号来实现。特别的,这些符号的语法如下所示
command1 > file1
执行command1然后将输出的内容存入file1
注意任何file1内的已经存在的内容将被新内容替代。如果要将新内容添加在文件末尾,请使用>>操作符。
示例
新文件
覆盖文件
追加文件
输入重定向
从文件获取输入
需要从键盘获取输入的命令会转移到文件读取内容
输出重定向是大于号(>),输入重定向是小于号(<)
语法
command1 < file1
示例
统计行数
正常
输入重定向
重定向深入讲解
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件
1. 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
2. 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
3. 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
command 2 > file
command 2 >> file
command > file 2>&1
$command >> file 2>&1
默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file
对 stdin 和 stdout 都重定向,可以这样写
command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。
command < file1 >file2
Here Document
Here Document 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序
格式
将两个 delimiter 之间的内容(document) 作为输入传递给 command
注意
结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进
开始的delimiter前后的空格会被忽略掉
示例
在命令行中通过 wc -l 命令计算 Here Document 的行数
结果
使用在脚本中
/dev/null 文件
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null
/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。
格式
command > /dev/null
屏蔽 stdout 和 stderr
command > /dev/null 2>&1
注意:0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
shell文件包含
从一个shell文件中引入另一个shell文件
格式
示例
被包含的文件 test1.sh 不需要可执行权限
linux命令
ssh ip地址
输入密码即可
参数
-o
网络管理
ping
查看网络连接
linux
ping -c 5 www.baidu.com
windows
ping www.baidu.com
目录操作
显示当前目录路径(绝对路径)
pwd
示例
创建目录
mkdir
格式
mkdir [-p] dirName
示例
创建一个空目录
mkdir test1
递归创建多个目录
mkdir -p test2/test3
创建权限为777的目录
mkdir -m 777 test4
创建新目录都显示信息
mkdir -v test6
一个命令创建项目的目录结构
mkdir -vp scf/{lib/,bin/,doc/{info,product},logs/{info,product},service/deploy/{info,product}}
命令参数
-m, --mode=模式,设定权限<模式> (类似 chmod),而不是 rwxrwxrwx 减 umask
-p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录;
-v, --verbose 每次创建新目录都显示信息
--help 显示此帮助信息并退出
--version 输出版本信息并退出
显示目录树结构
tree
语法
tree [-aACdDfFgilnNpqstux][-I <范本样式>][-P <范本样式>][目录...]
命令参数
-C 在文件和目录清单加上色彩,便于区分各种类型。
tree -C
-D 列出文件或目录的更改时间
tree -D
-f 在每个文件或目录之前,显示完整的相对路径名称
tree -f
-p 列出权限标示。
tree -p
示例
切换当前的工作目录
cd(change directory)
语法
cd [dirName]
示例
查看当前目录下的文件
ll
ls -lrth
ll -rth
文件操作
打包文件
zip
格式
zip [参数] [打包后的文件名] [打包的目录路径]
命令参数
-r
递归处理,将指定目录下的所有文件和子目录一并处理
示例
将/opt/tomcat目录下所有的文件打包到/opt/tomcat1.zip文件中
zip -r /opt/tomcat1.zip /opt/tomcat
解压文件
unzip
格式
unzip [-cflptuvz][-agCjLMnoqsVX][-P <密码>][.zip文件][文件][-d <目录>][-x <文件>] 或 unzip [-Z]
命令参数
-d<目录>
指定文件解压缩后所要存储的目录。
示例
将压缩文件text.zip在当前目录下解压缩。
unzip xxx.zip
将压缩文件text.zip解压缩到当前目录test文件夹下。
unzip -d test xxx.zip
解压缩文件
tar
格式
tar [命令] [参数] 文件或目录
命令
-c
建立压缩档案
-x
解压
-t
查看内容
-r
向压缩归档文件末尾追加文件
-u
更新原压缩包中的文件
示例
将当前目录下的test文件夹打包为test.tgz
tar -czvf test.tgz test
将test.tgz解压到当前目录,如果要解压到指定目录
tar -xzvf test.tgz
将test.tgz解压到当前目录,解压到/usr
tar -xzvf test.tgz -C /usr
其中C必须大写
复制文件
scp
从一个服务器复制到另一个服务器
格式
scp [可选参数] file_source file_target
命令参数
-r
递归复制整个目录
示例
从本地复制到远程
scp local_file remote_username@remote_ip:remote_folder
scp local_file remote_username@remote_ip:remote_file
scp local_file remote_ip:remote_folder
scp local_file remote_ip:remote_file
从远程复制到本地
scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3
scp -r www.runoob.com:/home/root/others/ /home/space/music/
创建文件
touch
用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件
文件不存在
文件存在
查找文件
find
tar.xz结尾的文件的解压方法
方法一
tar xvJf ***.tar.xz
方法二
xz -d ***.tar.xz
tar -xvf ***.tar
文件内容操作
cat
more
head
tail
less
权限管理
用户权限管理
创建用户
adduser
adduser+username
sudo adduser zengqingfa
sudo passwd zengqingfa
useradd
sudo useradd 用户名 -m -d 用户家目录 -s /bin/bash
sudo useradd zengqingfa-m -d /home/zengqingfa-s /bin/bash
sudo passwd zengqingfa
删除用户
userdel
sudo userdel -r 用户名
sudo userdel -r zengqingfa
授权
把单个文件授权给某个用户
chown 用户名 文件名
chown elsearch /opt/elasticsearch-7.6.2/
把整个文件夹授权给某个用户
chown -R 用户名 文件夹
chown -R elsearch. /opt/elasticsearch-7.6.2/
文件权限
磁盘管理(20210509)
检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
df
语法
df [-ahikHTm] [目录或文件名]
参数
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i :不用硬盘容量,而以 inode 的数量来显示
举例
将系统内所有的文件系统列出来!
df
将容量结果以易读的容量格式显示出来
df -h
将系统内的所有特殊文件格式及名称都列出来
df -aT
将 /etc 底下的可用的磁盘容量以易读的容量格式显示
df -h /etc
检查磁盘使用空间量,是对文件和目录磁盘使用的空间的查看,
du
语法
du [-ahskm] 文件或目录名称
参数
-a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;
-S :不包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;
举例
只列出当前目录下的所有文件夹容量(包括隐藏文件夹):
du
将文件的容量也列出来
du -a
检查根目录底下每个目录所占用的容量
du -sm /*
磁盘分区
fdisk
语法
fdisk [-l] 装置名称
参数
-l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。
举例
列出所有分区信息
fdisk -l
vim编辑器
在 Insert/Normal 模式下编辑文档
i —— 插入模式,这个模式让你你可以像记事本一样的输入文本,如果已经输入完了,按ESC返回Normal模式。
x —— 删除当前光标所在处的字符
:w —— 存盘
:q —— 退出,你可以使用 :wq来同时进行这两个操作
dd —— 剪切当前行
p —— 粘贴
hjkl —— 效果等同于←↓↑→,用于移动光标
:help<command> —— 显示相关命令的帮助
快速移动光标
0 —— 数字零,到行头
^ —— 到本行第一个不是空字符的位置
$ —— 到行尾
g_ —— 到行尾最后一个不是空字符的位置
/pa —— 搜索 pa 这个字符串,按n查找下一个
进阶移动光标
NG —— 移动到第N行 ,:N也可以
gg —— 到第一行
g —— 到最后一行
w —— 到下一个单词开头
e —— 到下一个单词结尾
% —— 当光标在括号上时,可以移动到与之对应的另一个括号
*和# —— 移动到下一个/上一个光标所在的单词上
在文件中显示行号
1 临时显示行号 如果只是临时显示vim的行号,只须按ESC键退出编辑内容模式,输入“:set number”后按回车键,就可以显示行号了。 行号显示只是暂时的,退出vim后再次打开vim就不显示行号了。
2 永久显示行号 如果想让vim永久显示行号,则需要修改vim配置文件vimrc。 如果没有此文件可以创建一个。
查找
在normal模式下按下 / 即可进入查找模式,输入要查找的字符串并按下回车
按下 n 查找下一个
按下 N 查找上一个
进程
进程相关情况
查看内存使用最多的10个进程
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head
CPU占用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k3|head -10
根据端口号查看进程
netstat -tlnp |grep 8601
ps aux | grep 20500
虚拟内存使用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k5|head -10
文本三剑客
grep(20220331)
介绍
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能配合多种命令使用,使用上十分灵活。
参数
-A <显示行数> --after-context=<显示行数> # 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
grep -A 2 '直进直出-入库' info-2022-03-30.0.log
-b --byte-offset # 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-B<显示行数> --before-context=<显示行数> # 除了显示符合样式的那一行之外,并显示该行之前的内容。
grep -B 2 '直进直出-入库' info-2022-03-30.0.log
-c --count # 计算符合范本样式的列数。
-C<显示行数> --context=<显示行数>或-<显示行数> # 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
grep -C 2 '直进直出-入库' info-2022-03-30.0.log
-n --line-number # 在显示符合范本样式的那一列之前,标示出该列的编号。
grep '直进直出-入库' info-2022-03-30.0.log -n
-o # 只输出文件中匹配到的部分。
grep -C 2 '直进直出-入库' info-2022-03-30.0.log -o
-m <num> --max-count=<num> # 找到num行结果后停止查找,用来限制匹配行数
grep '直进直出-入库' info-2022-03-30.0.log -m 2
示例
不使用参数
grep '直进直出-入库' info-2022-03-30.0.log
awk
sed(20220331)
介绍
sed 是一种流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
参数
n # 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
获取到行号
grep -n '直进直出' info-2022-03-30.0.log
获取行号内的内容
sed -n '408886,408900p' info-2022-03-30.0.log
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
示例
防火墙
Firewall
iptables
定时任务
crontab
介绍
用来提交和管理用户的需要周期性执行的任务
格式
minute hour day month week command 顺序:分 时 日 月 周
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
特殊格式
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
命令
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status//查看crontab服务状态
查看日志
tail -f /var/log/cron
查看定时任务列表
crontab-l
编辑定时任务
crontab -e
查看定时
查看日志
使用场景
定时任务备份数据库
定时任务探活启动服务
crontab-l
/home/bdr/ibs/checkServiceSurvival.sh
软件安装
jdk
安装
步骤
判断是否有安装jdk
java -version
搜索jdk
yum search java-11-openjdk
安装即可
yum install java-1.8.0-openjdk* -y
yum install java-11-openjdk* -y
安装成功
配置环境变量
查看jdk默认安装路径
查找java命令的位置
查找java命令的位置所对于的软链地址
ls -l /usr/bin/java
通过软链地址查找JDK的安装目录
ls -l /etc/alternatives/java
配置JAVA_HOME
修改/etc/profile
vim /etc/profile
jdk11
jdk11默认没有jre
安装jre
jlink --module-path jmods --add-modules java.desktop --output jre
配置环境变量
jdk8
profile文件生效
source /etc/profile
查看JAVA_HOME是否生效
echo $JAVA_HOME
卸载
判断jdk是否安装
java -version
能查看到版本号表示已安装
java
javac
查看JDK的安装路径
which java
卸载JDK
rm -rf JDK地址
rm -rf /usr/local/software/jdk1.8.0_212
判断jdk是否卸载完毕
java
java -version
vi命令编辑文件profile,删除java环境变量
mariadb
步骤
设置yum源
vi /etc/yum.repos.d/MariaDB.repo
安装服务端和客户端
yum install MariaDB-server MariaDB-client
命令
#启动MariaDB
systemctl start mariadb
#停止MariaDB
systemctl stop mariadb
#重启MariaDB
systemctl restart mariadb
#设置开机启动
systemctl enable mariadb
初始化mysql
确保mariadb服务器启动后, 执行命令初始化
mysql_secure_installation
直接回车
a)为root用户设置密码
123456
b)是否删除匿名账号
c)是否取消root用户远程登录
d)是否删除test库和对test库的访问权限
e)刷新授权表使修改生效
设置密码
进入服务
mysql -uroot -p
密码设置
set password = PASSWORD('dongwei123');
创建用户
create user zqf@'127.0.0.1' identified by '123456';
查看用户信息
use mysql;
select host,user,password from user where user='zqf';
删除用户
drop user 'zqf'@'%';
flush privileges;
select user from user;
授权用户权限
grant all privileges on *.* to zqf@127.0.0.1;
刷新权限
flush privileges;
移除权限
revoke all privileges on *.* from zqf@127.0.0.1;
配置mysql
编辑mysql配置文件/etc/my.cnf
授权配置
授权允许连接
grant all privileges on *.* to zqf@'%' identified by '123456';
查看用户权限
%表示可以远程连接的账号
开通阿里云防火墙 端口
https://swas.console.aliyun.com/?spm=5176.6660585.774526198.1.33d36bf8Q6E5NJ#/server/8e30f65769a84e798f2c488482e6d7b9/cn-hangzhou/security/firewall
默认端口
3306
账号
dongwei-aliyun
dw/dongwei123
zqf/dongwei123
root/dongwei123
zengqingfa-aliyun
root/123456
dw/dongwei123
zqf/123456
zhouweibiao-aliyun
maridb版本
Server version: 10.4.17-MariaDB-log MariaDB Server
查看运行日志
常见问题
配置主从报错
运行命令
报错日志
Could not initialize master info structure for '';
原因
由于mysql-relay-bin.index中仍然保存着旧relay日志文件的路径,而这些路径下又找不到合适的文件
解决
reset slave
mysql
安装
linux安装
mysql 5.7
下载地址
https://dev.mysql.com/downloads/mysql/5.7.html#downloads
选择版本
Red Hat Enterprise Linux 7 / Oracle Linux 7 (x86, 64-bit), Compressed TAR Archive
mysql-5.7.26-el7-x86_64.tar.gz
解压
tar -xvf mysql-5.7.26-el7-x86_64.tar.gz
移动
mv mysql-5.7.26-el7-x86_64 /usr/local/
重命名
mv mysql-5.7.26-el7-x86_64/ mysql
新建data目录
mkdir -p /data/mysql
授权
chown mysql:mysql -R /data/mysql
修改配置文件
vim /etc/my.cnf
初始化数据库
进入bin目录
cd /usr/local/mysql/bin/
初始化
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize
先将mysql.server放置到/etc/init.d/mysql中
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
mysql 8
wget下载地址
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz
解压安装文件
tar -zxvf mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz
移动文件到/usr/local/目录下
mv mysql-8.0.11-linux-glibc2.12-x86_64 /usr/local/mysql
创建数据存储文件夹
mkdir /usr/local/mysql/data
创建用户及用户组
初始化数据库
/usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --initialize
建立MySQL服务
cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql
#检查服务是否生效
chkconfig --list mysql
修改my.cnf文件的内容
vim /etc/my.cnf
启动mysql服务
service mysql start
查看启动状态
service mysql status
建立一个链接文件
ln -s /usr/local/mysql/bin/mysql /usr/bin
client链接mysql
mysql -u root
关闭服务
mysql service stop
安全模式登录(需要cd 到 /usr/local/mysql/bin )
./mysqld_safe --skip-grant-tables
需要打开新的终端,登录mysql
./mysql -u root
设置密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY'自己要设置的密码';
远程连接mysql配置
use mysql
select host,user from user;
发现root用户的访问权限是localhost,需要修改host为%
update user set host='%' where user='root';
flush privileges;
windows安装
下载链接
https://downloads.mysql.com/archives/community/
解压并“合理安放” MySQL Server
D:\software\software1\mysql-5.7.20-winx64\mysql-5.7.20-winx64
为 MySQL Server 配置环境变量
配置path
注册 MySQL 服务
进入MySQL Server所在文件夹的bin文件夹中
cd D:\software\software1\mysql-5.7.20-winx64\mysql-5.7.20-winx64\bin
执行mysqld -install指令,注册 MySQL 服务
以管理员身份运行cmd命令
配置 MySQL Server
进入 MySQL Server 所在的文件夹
cd D:\software\software1\mysql-5.7.20-winx64\mysql-5.7.20-winx64
创建my.ini文件
注意:windows盘符\\
修改basedir和datadir的路径
basedir = D:\\software\\software1\\mysql-5.7.20-winx64\\mysql-5.7.20-winx64
datadir = D:\\software\\software1\\mysql-5.7.20-winx64\\mysql-5.7.20-winx64\\data
执行mysqld --initialize生成data文件夹
开启 MySQL Server
net start mysql
配置 MySQL root 账户
net stop mysql关闭 MySQL Server
执行mysqld --skip-grant-tables开启无密码的 MySQL Server
另起一个查看登录
mysql -u root
flush privileges;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';
flush privileges;
quit
重新登录即可
mysql -uroot -p
启动
service mysql start
ps -ef|grep mysql
登录授权
登录mysql
./mysql -u root -p
密码为随机生成的
设置密码
SET PASSWORD = PASSWORD('123456');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES;
设置root的远程访问权限
use mysql
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;
建立软链接,在任何地方即可登录
ln -s /usr/local/mysql/bin/mysql /usr/bin
版本
Server version: 5.7.26 MySQL Community Server (GPL)
root/123456
卸载
检查MySQL服务并关闭服务进程
ps -ef | grep mysql
service mysql status
查找mysql.server
find / -name mysql.server
service mysql stop
查找MySQL的安装目录并彻底删除
whereis mysql
find / -name mysql
rm -rf /data/mysql
rm -rf /usr/local/mysql
查看
service mysql status
删除配置文件
/etc/my.cnf
/etc/init.d/mysql
删除MySQL用户以及用户组
id mysql
userdel mysql
问题
连接失败 /tmp/mysql.sock
现象
解决
TCP 连接
socket 连接
redis安装
gitlab安装(最低4g内存)
安装相关依赖
yum -y install policycoreutils openssh-server openssh-clients postfix
启动ssh服务&设置为开机启动
systemctl enable sshd && sudo systemctl start sshd
报错
解决
vi /etc/postfix/main.cf
修改参数
inet_protocols = ipv4
inet_interfaces = all
开放ssh以及http服务,然后重新加载防火墙列表(防火墙关闭不需要此操作)
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
下载gitlab包
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
安装
rpm -i gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
修改gitlab配置
vi /etc/gitlab/gitlab.rb
修改gitlab访问地址和端口,默认为80,我们改为82
external_url 'http://47.96.114.225:82'
nginx['listen_port'] = 82
gitlab相关命令
停止
gitlab-ctl stop
重启
gitlab-ctl restart
重新加载配置
gitlab-ctl reconfigure
禁止开机启动
把端口添加到防火墙(未开防火墙不需要配置)
firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --reload
yum安装
yum install deltarpm -y
yum update
yum安装
yum install deltarpm -y
yum update
jenkins安装
nginx
安装
下载包安装
安装依赖
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
下载并解压安装包
mkdir /opt/nginx
cd /opt/nginx
下载
wget http://nginx.org/download/nginx-1.13.7.tar.gz
解压
tar -xvf nginx-1.13.7.tar.gz
进入目录
cd nginx-1.13.7
执行命令
./configure
执行make和make install 命令
make && make install
默认安装目录
/usr/local/nginx
yum安装
添加 yum 源
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
安装
yum install nginx -y
开机启动
systemctl enable nginx
启动服务
systemctl start nginx
停止服务
systemctl stop nginx
重启启动服务
systemctl restart nginx
常用命令
启动
./nginx
关闭
./nginx -s stop
重启(配置文件修改后可以使用)
./nginx -s reload
访问
curl localhost
http://139.224.107.189/
防火墙配置
查看开放端口列表
firewall-cmd --list-all
设置开放的端口号
firewall-cmd --add-service=http –permanent
sudo firewall-cmd --add-port=80/tcp --permanent
重启防火墙
firewall-cmd reload
卸载
停止nginx服务
/usr/local/nginx/sbin/nginx -s stop
yum remove nginx
删除Nginx相关文件
查看Nginx相关文件
whereis nginx
rm -rf /usr/local/nginx
其他设置
如果设置了Nginx开机自启动
chkconfig nginx off
rm -rf /etc/init.d/nginx
查找
查找执行命令的位置
which nginx
查找配置文件的位置
nginx -t
日志文件的位置
/var/log/nginx
rocketmq(20210513)
官网
http://rocketmq.apache.org/
下载
http://rocketmq.apache.org/release_notes/release-notes-4.8.0/
源码安装(需要自己编译)
Source: rocketmq-all-4.8.0-source-release.zip
bin二进制
Binary: rocketmq-all-4.8.0-bin-release.zip
二进制安装
文件下载
上传到服务器
解压安装包
unzip rocketmq-all-4.8.0-bin-release.zip
重命名目录
mv rocketmq-all-4.8.0-bin-release rocketmq
修改broker 和nameserver内存配置
vim runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
vim runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
name server启动
启动
cd /opt/rocketmq/bin
nohup sh mqnamesrv &
查询日志
tail -f ~/logs/rocketmqlogs/namesrv.log
broker启动
启动
cd /opt/rocketmq/bin
nohup sh mqbroker -n localhost:9876 &
查询日志
tail -f ~/logs/rocketmqlogs/broker.log
测试
进入目录
cd /opt/rocketmq/bin
设置环境变量
export NAMESRV_ADDR=localhost:9876
发送消息
sh tools.sh org.apache.rocketmq.example.quickstart.Producer
接收消息
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
关闭
关闭broker
sh mqshutdown broker
关闭name server
sh mqshutdown namesrv
zookeeper
docker
docker下的容器
tomcat
nginx
redis
mysql
0 条评论
下一页