linux
2022-04-10 17:22:21 0 举报AI智能生成
linux相关知识
linux
shell
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<br>
树状图显示关系
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<br>
打印匹配行的前后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命令的用途是连接文件或标准输入并打印。这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,<br>它常与重定向符号配合使用。
功能
一次显示整个文件: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文件完整路径名<br>
-v 输出传递给JVM的参数
ps -ef|grep java
操作产生的问题
当前文件没有执行权限
问题
<br>
解决
查看当前用户
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<br>
$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注释
#
以 # 开头的行就是注释,会被解释器忽略。
多行注释<br>
EOF 也可以使用其他符号
使用
位置参数
介绍
在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
特殊位置参数
$#
传递到脚本的参数的个数
$*
以一个单字符串显示所有向脚本传递的参数。如"\$*"用「"」括起来的情况、以"\$1 \$2 … \$n"的形式输出所有参数。
$$
脚本运行的当前进程ID号
$!
后台运行的最后一个进程的ID号
$@<br>
与\$*相同,但是使用时加引号,并在引号中返回每个参数。如"\$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$-<br>
显示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<br>
会覆盖之前文件的内容<br>
原样输出字符串,不进行转义或取变量(用单引号)
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命令会删掉所有的前缀包括最后一个/<br>选项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉
dirname
返回完整路径最后/的前面的部分,常用于返回路径部分
dirname 文件绝对路径:从给定的包含绝对路径的文件名中出去文件名(非目录部分),然后返回剩下的路径(目录部分
输入输出重定向<br>
输出重定向
重定向一般通过在命令间插入特定的符号来实现。特别的,这些符号的语法如下所示
command1 > file1
执行command1然后将输出的内容存入file1
注意任何file1内的已经存在的内容将被新内容替代。如果要将新内容添加在文件末尾,请使用>>操作符。
示例
新文件
覆盖文件
追加文件
输入重定向
从文件获取输入
需要从键盘获取输入的命令会转移到文件读取内容
输出重定向是大于号(>),输入重定向是小于号(<)
语法
command1 < file1
示例
统计行数
正常
输入重定向
重定向深入讲解<br>
一般情况下,每个 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<br>
示例
创建一个空目录
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}}
命令参数<br>
-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<br>
文件操作
打包文件
zip
格式
zip [参数] [打包后的文件名] [打包的目录路径]
命令参数
-r
递归处理,将指定目录下的所有文件和子目录一并处理
示例
将/opt/tomcat目录下所有的文件打包到/opt/tomcat1.zip文件中
zip -r /opt/tomcat1.zip /opt/tomcat<br>
解压文件
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 [命令] [参数] 文件或目录
命令<br>
-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
递归复制整个目录
示例
从本地复制到远程<br>
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<br>
sudo passwd zengqingfa<br>
useradd
sudo useradd 用户名 -m -d 用户家目录 -s /bin/bash<br>
sudo useradd zengqingfa-m -d /home/zengqingfa-s /bin/bash<br>
sudo passwd zengqingfa<br>
删除用户
userdel
sudo userdel -r 用户名<br>
sudo userdel -r zengqingfa<br>
授权
把单个文件授权给某个用户
chown 用户名 文件名
chown elsearch /opt/elasticsearch-7.6.2/
把整个文件夹授权给某个用户
chown -R 用户名 文件夹
chown -R elsearch. /opt/elasticsearch-7.6.2/<br>
文件权限
磁盘管理(20210509)
检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。<br>
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] 文件或目录名称<br>
参数
-a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;
-S :不包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;
举例
只列出当前目录下的所有文件夹容量(包括隐藏文件夹):
du
将文件的容量也列出来<br>
du -a
检查根目录底下每个目录所占用的容量
du -sm /*
磁盘分区
fdisk
语法
fdisk [-l] 装置名称
参数
-l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。
举例
列出所有分区信息
fdisk -l
vim编辑器<br>
在 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<br>
根据端口号查看进程<br>
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行结果后停止查找,用来限制匹配行数<br>
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<br>
安装即可
yum install java-1.8.0-openjdk* -y<br>
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<br>
jdk11
jdk11默认没有jre
安装jre
jlink --module-path jmods --add-modules java.desktop --output jre
配置环境变量<br>
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环境变量
<br>
mariadb
步骤
设置yum源
vi /etc/yum.repos.d/MariaDB.repo<br>
安装服务端和客户端
yum install MariaDB-server MariaDB-client<br>
命令
#启动MariaDB
systemctl start mariadb
#停止MariaDB
systemctl stop mariadb
#重启MariaDB
systemctl restart mariadb
#设置开机启动
systemctl enable mariadb
初始化mysql
确保mariadb服务器启动后, 执行命令初始化<br>
mysql_secure_installation<br>
直接回车
a)为root用户设置密码
123456
b)是否删除匿名账号
c)是否取消root用户远程登录
d)是否删除test库和对test库的访问权限
e)刷新授权表使修改生效
设置密码
进入服务
mysql -uroot -p<br>
密码设置
set password = PASSWORD('dongwei123');
创建用户
create user zqf@'127.0.0.1' identified by '123456';<br>
查看用户信息
use mysql;<br>
select host,user,password from user where user='zqf';<br>
删除用户
drop user 'zqf'@'%';
flush privileges;<br>
select user from user;
授权用户权限
grant all privileges on *.* to zqf@127.0.0.1;<br>
刷新权限
flush privileges;<br>
移除权限
revoke all privileges on *.* from zqf@127.0.0.1;
配置mysql
编辑mysql配置文件/etc/my.cnf
授权配置
授权允许连接
grant all privileges on *.* to zqf@'%' identified by '123456';<br>
查看用户权限
%表示可以远程连接的账号
开通阿里云防火墙 端口
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<br>
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
安装<br>
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
创建用户及用户组<br>
初始化数据库
/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<br>
#检查服务是否生效
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 服务<br>
以管理员身份运行cmd命令
配置 MySQL Server
进入 MySQL Server 所在的文件夹
cd D:\software\software1\mysql-5.7.20-winx64\mysql-5.7.20-winx64
创建my.ini文件
注意:windows盘符\\
修改basedir和datadir的路径<br>
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<br>
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<br>
密码为随机生成的
设置密码
SET PASSWORD = PASSWORD('123456');<br>
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;<br>
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<br>
查找mysql.server
find / -name mysql.server
service mysql stop<br>
查找MySQL的安装目录并彻底删除
whereis mysql<br>
find / -name mysql<br>
rm -rf /data/mysql
rm -rf /usr/local/mysql
查看
service mysql status
删除配置文件
/etc/my.cnf
/etc/init.d/mysql
删除MySQL用户以及用户组<br>
id mysql
userdel mysql
问题
连接失败 /tmp/mysql.sock<br>
现象
解决
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<br>
下载并解压安装包
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<br>
执行命令
./configure<br>
执行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<br>
启动服务
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
设置开放的端口号<br>
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
Collect
Get Started
Collect
Get Started
Collect
Get Started
Collect
Get Started
评论
0 条评论
下一页