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