Linux基础命令

查看系统情况

cpu使用情况

top
分别看每个核的占用 按1

查看内存使用情况

free -h

查看端口占用情况

任选其一
ss -ltnp | grep 端口号 # 监听中的 TCP
ss -atunp | grep 端口号 # 所有 TCP/UDP
lsof -i :端口号
netstat -tunlp | grep 端口号

tulpnnetstatss 命令的选项组合,每个字母代表一个不同的选项:

  • t: 显示 TCP 连接
  • u: 显示 UDP 连接
  • l: 仅显示监听中的连接(listening)
  • p: 显示使用该连接的进程名称和 PID(进程 ID)
  • n: 以数字形式显示地址和端口号,而不是尝试解析为主机名和服务名

查看磁盘使用情况

df -h

查找大文件

find . -type f -exec du -h {} + | sort -rh | head -n 20

杀进程

通过pid杀掉进程
kill -15 19475

1
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

sigspec:信号声明
signum:信号编号
信号声明和信号编号相应关系以及解释如下表格:

Signal Name Number Description
SIGHUP 1 Hangup (POSIX)
SIGINT 2 Terminal interrupt (ANSI)
SIGQUIT 3 Terminal quit (POSIX)
SIGILL 4 Illegal instruction (ANSI)
SIGTRAP 5 Trace trap (POSIX)
SIGIOT 6 IOT Trap (4.2 BSD)
SIGBUS 7 BUS error (4.2 BSD)
SIGFPE 8 Floating point exception (ANSI)
SIGKILL 9 Kill(can’t be caught or ignored) (POSIX)
SIGUSR1 10 User defined signal 1 (POSIX)
SIGSEGV 11 Invalid memory segment access (ANSI)
SIGUSR2 12 User defined signal 2 (POSIX)
SIGPIPE 13 Write on a pipe with no reader, Broken pipe (POSIX)
SIGALRM 14 Alarm clock (POSIX)
SIGTERM 15 Termination (ANSI)
SIGSTKFLT 16 Stack fault
SIGCHLD 17 Child process has stopped or exited, changed (POSIX)
SIGCONT 18 Continue executing, if stopped (POSIX)
SIGSTOP 19 Stop executing(can’t be caught or ignored) (POSIX)
SIGTSTP 20 Terminal stop signal (POSIX)
SIGTTIN 21 Background process trying to read, from TTY (POSIX)
SIGTTOU 22 Background process trying to write, to TTY (POSIX)
SIGURG 23 Urgent condition on socket (4.2 BSD)
SIGXCPU 24 CPU limit exceeded (4.2 BSD)
SIGXFSZ 25 File size limit exceeded (4.2 BSD)
SIGVTALRM 26 Virtual alarm clock (4.2 BSD)
SIGPROF 27 Profiling alarm clock (4.2 BSD)
SIGWINCH 28 Window size change (4.3 BSD, Sun)
SIGIO 29 I/O now possible (4.2 BSD)
SIGPWR 30 Power failure restart (System V)

每一个信号量都有对应的信号声明和信号编号,比如 9) SIGKILL ,那么我们可以使用下面任何一种命令来强制终止进程(假设进程 ID 为1760)。因为信号声明前缀都是 SIG ,所以也可以省略前缀。

1
2
3
4
5
kill -9 1760
kill -n 9 1760
kill -s SIGKILL 1760
kill -SIGKILL 1760
kill -KILL 1760

如果没有显示指定具体的信号,默认是 15) SIGTERM。当程序接收到此信号后,程序会做停止前的处理工作,例如释放相应的资源,然后再停止,但是程序有可能会继续运行着。即 SIGTERM 信号是可以被阻塞的,可能被忽略的。

1
2
3
# 两种等效
kill 1755
kill -15 1755

使用 kill 命令终止一个进程,后面需要跟参数 pid | jobspec …,可以是程序的 PID,PGID,或者工作编号等。

1
2
# 1755 是进程ID
kill 1755

所以比较合理的处理方式是应该先用默认信号(15) SIGTERM 尝试停止服务,如果多次尝试未停止成功,再考虑使用强制信号(9) SIGKILL 终止服务。

Kill -9 和Kill -15 有什么区别

kill -9 PID 是操作系统从内核级别强制杀死一个进程.

kill -15 PID 可以理解为操作系统发送一个通知告诉应用主动关闭.

所以当我们执行 kill pid 命令时,JVM 接收到关闭指令,会发布一些关闭事件,监听事件的监听器就可以在关闭服务前做相应的处理;也会触发注册的所有 Shutdown Hook,从而实现优雅停止服务。

查看历史命令

1
history(选项)(参数)

选项
-c:清空当前历史命令;
-a:将历史命令缓冲区中命令写入历史命令文件中;
-r:将历史命令文件中的命令读入当前历史命令缓冲区;
-w:将当前历史命令缓冲区命令写入历史命令文件中。
|grep (关键词) :过滤 仅显示包含关键词的命令==history|grep mysql==
参数
n:打印最近的n条历史命令。

监听服务端口自动重启服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
#查看是否存在以tcp6方式占用的8080端口 占用状态为LISTEN 有返回1没有返回0
ListeningPort=`netstat -an | grep ":8080" | awk '$1 == "tcp6" && $NF == "LISTEN" {print $0}' | wc -l`
if [ "$ListeningPort" -eq 0 ]
then
{
#将输出写入 日志文件内
echo "`date` : listener port is down">>/root/logs/autoRestart.log
sleep 3
./start.sh
}
else
{
echo "`date` : 8080端口正常">>/root/logs/autoRestart.log
}
fi

参考:
https://blog.csdn.net/YANGMING1234ym/article/details/86533734

Crontab 定时执行脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#查看定时任务状态
service crond status
#启动命令
service crond start
#查看 crontab 任务有哪些定时任务
crontab -l
#编写定时执行任务
crontab -e

使用实例
实例1:每1分钟执行一次command
命令:* * * * * command
实例2:每小时的第3和第15分钟执行
命令:3,15 * * * * command
实例3:在上午8点到11点的第3和第15分钟执行
命令:3,15 8-11 * * * command
实例4:每隔两天的上午8点到11点的第3和第15分钟执行
命令:3,15 8-11 */2 * * command
实例5:每个星期一的上午8点到11点的第3和第15分钟执行
命令:3,15 8-11 * * 1 command

https://www.cnblogs.com/hally/p/13549920.html

压缩/解压缩

介绍几个常用的参数
-c 指定为压缩模式
-x 指定为解压模式
-v 显示执行过程
-z 使用gzip压缩
-f 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

压缩

==tar -zcvf 压缩包文件名.tar.gz 要压缩的文件名 空格隔开==
tar -zcvf 压缩包文件名.tar.gz 要压缩的目录

解压

==tar -xvf 压缩包名称==
https://blog.csdn.net/weixin_44901564/article/details/99682926

Linux常见错误

Linux环境下执行脚本时报错:/bin/bash^M: 坏的解释器: 没有那个文件或目录

一、问题描述
我在Windows 10 系统下编辑了一个发送消息到企业微信的shell脚本文件,然后copy到了远程的Linux服务器,当运行的时候报错了。
如下所示:
root@ubuntu116:/data/gitlabData/auto_back_shell# ./qiyewechat-notifier.sh
-bash: ./qiyewechat-notifier.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录
root@ubuntu116:/data/gitlabData/auto_back_shell#

二、错误原因

这个文件在Windows 下编辑过,在Windows下每一行结尾是\n\r,而Linux下则是\n,所以才会有 多出来的\r。
三、修改错误

使用指令sed -i ‘s/\r$//‘ xxxxxxx.sh,上面的指令会把 xxxxxxx.sh 中的\r 替换成空白!
然后再次执行./xxxxx.sh 完成
原文连接: https://blog.csdn.net/ouyang_peng/article/details/86488451

Linux使用教程

修改默认登录端口22

1
2
3
4
5
6
7
vim /etc/ssh/sshd_config

# Port 22
修改为任何1024 – 65535之间的数字
Port 10837
重启ssh服务 记得在防火墙放开你设置的端口
service sshd restart

通过ssh秘钥登录服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
eai@eai:~/.ssh$ ssh-keygen    <====== 建立密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/home/eai/.ssh/id_rsa): <====== enter 确认
Enter passphrase (empty for no passphrase): <====== 输入密钥密码锁,或者直接enter默认无密码
Enter same passphrase again: <====== 再次输入密钥密码锁
Your identification has been saved in /home/eai/.ssh/id_rsa. <====== 私钥
Your public key has been saved in /home/eai/.ssh/id_rsa.pub. <====== 公钥
The key fingerprint is:
77:d0:af:76:97:fd:97:dd:e5:cc:47:01:1f:40:ae:b6 eai@eai
The key's randomart image is:
+--[ RSA 2048]----+
| .o. |
| ... . |
| . ..o .|
| ... o |
| S .o. . .|
| ..... =|
| Eo .*B|
| . . oX|
| +|
+-----------------+

现在,在 ~/.ssh 的目录中生成了两个密钥文件。id_rsa 为私钥,id_rsa.pub 为公钥。
2.在服务器上安装公钥
eai@eai:~/.ssh$ cd ~/.ssh
eai@eai:~/.ssh$ cat id_rsa.pub >> authorized_keys

然后设置一下文件的权限:

eai@eai:~/.ssh$ chmod 600 authorized_keys
eai@eai:~/.ssh$ chmod 700 ~/.ssh


3.设置SSH,打开密钥登录功能
vi /etc/ssh/sshd_config
修改 /etc/ssh/sshd_config 文件中相关设置(一般不用修改):
#默认公钥存放的位置
AuthorizedKeysFile .ssh/authorized_keys
#允许密钥认证 如果没有 RSAAuthentication 这一行不用改
RSAAuthentication yes
PubkeyAuthentication yes

留意 root 用户能否通过 SSH 登录:
#允许root认证登录
PermitRootLogin yes

当完成全部设置,以密钥方式登录成功后,可以禁用密码登录:

PasswordAuthentication no

最后,重启 SSH 服务:

eai@eai:~/.ssh$ service sshd restart

如果重启失败:sshd: unrecognized service , 就查看SSH是否活动: eai@eai:~/.ssh$ service ssh status ,如果是类似 ssh start/running, process 1579,

就直接这样重启: eai@eai:~/.ssh$ sudo /etc/init.d/ssh restart
————————————————
版权声明:本文为CSDN博主「moses1994」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/moses1994/article/details/78538977

引用连接:
Windows下 SSH 通过密钥登录 Linux 服务器_The Dawn-CSDN博客
CentOS7.4配置SSH登录密码与密钥身份验证踩坑 - Leroscox - 博客园

shell脚本

常见错误

shell报错:-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected)

http://www.blogdaren.com/post-2189.html

Bash脚本的空格和“期待一元表达式”错误

https://blog.csdn.net/qinxiandiqi/article/details/41626215

文本处理

vim文本编辑器

vim代码有高亮

文本编辑器的三种操作模式

vim有三种操作模式,分别是命令模式(Command mode)、输入模式(Insert mode)和底线命令模式(Last line mode)。
三种模式切换快捷键:

模式 快捷键
命令模式 ESC
输入模式 i或a
底线命令模式 :
==命令模式:==

在命令模式中控制光标移动和输入命令,可对文本进行复制、粘贴、删除和查找等工作。
使用命令vim filename后进入编辑器视图后,默认模式就是命令模式,此时敲击键盘字母会被识别为一个命令,例如在键盘上连续敲击两次d,就会删除光标所在行。

以下是在命令模式中常用的快捷操作:

操作 快捷键
光标左移 h
光标右移 l(小写L)
光标上移 k
光标下移 j
光标移动到下一个单词 w
光标移动到上一个单词 b
移动游标到第n行 nG
移动游标到第一行 gg
移动游标到最后一行 G
快速回到上一次光标所在位置 Ctrl+o
删除当前字符 x
删除前一个字符 X
删除整行 dd
删除一个单词 dw或daw
删除至行尾 d$或D
删除至行首 d^
删除到文档末尾 dG
删除至文档首部 d1G
删除n行 ndd
删除n个连续字符 nx
将光标所在位置字母变成大写或小写 ~
复制游标所在的整行 yy(3yy表示复制3行)
粘贴至光标后(下) p
粘贴至光标前(上) P
剪切 dd
交换上下行 ddp
替换整行,即删除游标所在行并进入插入模式 cc
撤销一次或n次操作 u{n}
撤销当前行的所有修改 U
恢复撤销操作 Ctrl+r
整行将向右缩进 >>
整行将向左退回 <<
若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开 ZZ

输入模式:

在命令模式下按i或a键就进入了输入模式,在输入模式下,您可以正常的使用键盘按键对文本进行插入和删除等操作。

底线命令模式:

在命令模式下按:键就进入了底线命令模式,在底线命令模式中可以输入单个或多个字符的命令。

以下是底线命令模式中常用的快捷操作:

操作 命令
保存 :w
退出 :q
保存并退出 :wq( :wq!表示强制保存退出)
将文件另存为其他文件名 :w new_filename
显示行号 :set nu
取消行号 :set nonu
使本行内容居中 :ce
使本行文本靠右 :ri
使本行内容靠左 :le
向光标之下寻找一个名称为word的字符串 :/word
向光标之上寻找一个字符串名称为word的字符串 :?word
重复前一个搜寻的动作 :n
从第一行到最后一行寻找word1字符串,并将该字符串取代为word2 :1,$s/word1/word2/g :%s/word1/word2/g

VI文本编辑器

字符串查找

自上而下查找一个字符串使用:“/你要查询的内容”
自下而上查找一个字符串使用:”?要查询的内容”

查找下一个 :“/你要查询的内容” 再输入”n“跳到下一个 输入”N”跳到上一个
==ctrl+f== 翻页 ==ctrl+b==向上翻页
==shift+g== 翻页到末尾

字符串替换

文件内全部替换:
==:%s#abc#def#g==(用def替换文件中所有的abc)
例如把一个文本文件里面的“linuxidc.com”全部替换成“linuxidc.net”:
==:%s#linuxidc.com#xwen.net#g== (如文件内有#,可用/替换,比如:%s/linuxidc.com/xwen.net/g)
b. 文件内局部替换:
把10行到50行内的“abc”全部替换成“def”
==:10,50s#abc#def#g==(如文件内有#,可用/替换,:%s/abc/def/g)
以上命令如果在g后面再加上c,则会在替换之前显示提示符给用户确认(conform)是否需要替换。 比如
==:%s#linuxidc.com#linuxidc.net#gc==

文本文件查看命令

cat 适合小文件

命令描述:cat命令用于查看内容较少的纯文本文件。
命令格式:cat [选项] [文件]。
命令参数说明:

参数 说明
-n或–number 显示行号
-b或–number-nonblank 显示行号,但是不对空白行进行编号
-s或–squeeze-blank 当遇到有连续两行以上的空白行,只显示一行的空白行
more 适合大文件

命令描述:more命令从前向后分页显示文件内容。
常用操作命令:

操作 作用
Enter 向下n行,n需要定义,默认为1行
Ctrl+F或空格键(Space) 向下滚动一页
Ctrl+B 向上滚动一页
= 输出当前行的行号
!命令 调用Shell执行命令
q 退出more
命令使用示例:
从第20行开始分页查看系统日志文件/var/log/messages。
1
more +20 /var/log/messages
less 适合大文件

命令描述:less命令可以对文件或其它输出进行分页显示,与moe命令相似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动。
命令格式:less [参数] 文件 。
命令参数说明:

参数 说明
-e 当文件显示结束后,自动离开
-m 显示类似more命令的百分比
-N 显示每行的行号
-n 不显示行号,打开大文件能有效加快速度
-s 显示连续空行为一行
+G 打开文件直接定位到文件尾部,默认在头部
命令常用操作:
快捷键 说明
/字符串 向下搜索字符串
?字符串 向上搜索字符串
n 重复前一个搜索
N 反向重复前一个搜索
b或pageup 向上翻一页
空格键或pagedown 向下翻一页
u 向前翻半页
d 向后翻半页
y 向前滚动一行
回车键 向后滚动一行
q 退出less命令
命令使用示例:
查看命令历史使用记录并通过less分页显示。
history less
head 前几行

命令描述:head命令用于查看文件开头指定行数的内容。
命令格式:head [参数] [文件]。
命令参数说明:

参数 说明
-n [行数] 显示开头指定行的文件内容,默认为10
-c [字符数] 显示开头指定个数的字符数
-q 不显示文件名字信息,适用于多个文件,多文件时默认会显示文件名

命令使用示例:
查看/etc/passwd文件的前5行内容。
head -5 /etc/passwd

tail 实时查看

命令描述:tail命令用于查看文档的后N行或持续刷新内容。
命令格式:tail [参数] [文件]。
命令参数说明:

参数 说明
-f 显示文件最新追加的内容
-q 当有多个文件参数时,不输出各个文件名
-v 当有多个文件参数时,总是输出各个文件名
-c [字节数] 显示文件的尾部n个字节内容
-n [行数] 显示文件的尾部n行内容

命令使用示例:
查看/var/log/messages系统日志文件的最新10行,并保持实时刷新。
tail -f -n 10 /var/log/messages
按ctrl+c键退出文本实时查看界面。
原理:
tail -f 命令通过以下事件来实现对文件的实时监控:
IN_MODIFY:文件内容被修改
IN_ATTRIB:文件元数据被修改
IN_DELETE_SELF:文件自身被删除
IN_MOVE_SELF:文件自身被移动
命令会在检测到上述事件时阻塞并等待这些事件的发生,从而实现对文件内容的实时刷新。
通过这种方式,用户可以实时监控文件的变化,尤其适用于日志文件的监控。

stat 详细信息

命令描述:用来显示文件的详细信息,包括inode、atime、mtime、ctime等。
命令使用示例:
查看/etc/passwd文件的详细信息。
stat /etc/passwd

wc 统计

命令描述:wc命令用于统计指定文本的行数、字数、字节数。
命令格式:wc [参数] [文件]。
命令参数说明:

参数 说明
-l 只显示行数
-w 只显示单词数
-c 只显示字节数

file

命令描述: file命令用于辨识文件类型。
命令格式:file [参数] [文件]。
命令参数说明:

参数 说明
-b 列出辨识结果时,不显示文件名称
-c 详细显示指令执行过程,便于排错或分析程序执行的情形
-f [文件] 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称
-L 直接显示符号连接所指向的文件类别
diff

命令描述:diff命令用于比较文件的差异。

文本文件处理命令

grep

命令描述:grep命令用于查找文件里符合条件的字符串。
grep全称是Global Regular Expression Print,表示全局正则表达式版本,它能使用正则表达式搜索文本,并把匹配的行打印出来。
在Shell脚本中,grep通过返回一个状态值来表示搜索的状态:
0:匹配成功。
1:匹配失败。
2:搜索的文件不存在。
命令格式:grep [参数] [正则表达式] [文件]。
命令常用参数说明:

参数 说明
-c或–count 计算符合样式的列数
-d recurse或-r 指定要查找的是目录而非文件
-e [范本样式] 指定字符串做为查找文件内容的样式
-E 或 –extended-regexp 将样式为延伸的正则表达式来使用
-F 或 –fixed-regexp 将样式视为固定字符串的列表
-G 或 –basic-regexp 将样式视为普通的表示法来使用
-i 或 –ignore-case 忽略字符大小写的差别
-n 或 –line-number 在显示符合样式的那一行之前,标示出该行的列数编号
-v 或 –revert-match 显示不包含匹配文本的所有行

命令使用示例:
查看sshd服务配置文件中监听端口配置所在行编号。
grep -n Port /etc/ssh/ssh_config
查询字符串在文本中出现的列数。
grep -c localhost /etc/hosts
反向查找,不显示符合条件的行。
ps -ef | grep -v grep | grep sshd
以递归的方式查找目录下含有关键字的文件。
grep -r *.sh /etc

sed

命令描述:sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用。

  1. 处理时,把当前处理的行存储在临时缓冲区中,称为模式空间(pattern space)。
  2. 接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
  3. 接着处理下一行,这样不断重复,直到文件末尾。
    注意:
    sed命令不会修改原文件,例如删除命令只表示某些行不打印输出,而不是从原文件中删去。
    如果要改变源文件,需要使用-i选项。
    命令格式:sed [参数] [动作] [文件]。
    参数说明:
    参数 说明
    -e [script] 执行多个script
    -f [script文件] 执行指定script文件
    -n 仅显示script处理后的结果
    -i 输出到原文件,静默执行(修改原文件)
    动作说明:
动作 说明
a 在行后面增加内容
c 替换行
d 删除行
i 在行前面插入
p 打印相关的行
s 替换内容

tr

命令描述:tr命令用于对来自标准输入的字符进行替换、压缩和删除。
命令格式:tr [参数] [文本]。
参数说明:

参数 说明
-c 反选指定字符
-d 删除指定字符
-s 将重复的字符缩减成一个字符
-t [第一字符集] [第二字符集] 删除第一字符集较第二字符集多出的字符,使两个字符集长度相等

查询软件安装位置

1
2
3
4
5
6
7
8
9
$ which java #查看java位置
/usr/bin/java

$ ls -lrt /usr/bin/java
lrwxrwxrwx 1 root root 22 5月 13 20:50 /usr/bin/java -> /etc/alternatives/java

ls -lrt /etc/alternatives/java
lrwxrwxrwx 1 root root 73 5月 13 20:50 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/jre/bin/java

升级内置python版本

linux系统升级python版本看起来复杂,如果知道其中步骤也不会觉得很困难。下面记录在deepin系统 15.11和ubuntu16.04系统下将python从2.7升级到3.7过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
## 使用普通用户完成以下操作:

## 更新源
sudo apt update
## 下载必要软件
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev curl libbz2-dev
## 下载python源码包
curl -O https://mirrors.huaweicloud.com/python/3.7.3/Python-3.7.3.tar.xz
## 解压
tar -xf Python-3.7.3.tar.xz
cd Python-3.7.3
## 编译生成make文件。

## 这里一定要带上编译参数 `--with-ssl`,该参数是编译python是加入SSL,如果没有在使用pip3时会报错SSL有问题
./configure --with-ssl
## make
make
## 安装
## `altinstall` 的意思是不覆盖原来系统中的python版本。如果覆盖会出现终端打不开等一些问题。
sudo make altinstall
## 将默认python替换成更新的
##查看你的python安装路径
which python
## 删除他
rm -rf /usr/bin/python
## 默认python替换成更新的
sudo ln -s /usr/local/bin/python3.7 /usr/bin/python
## 将pip3更换成最新
## 这一步不同的系统会有不同。有些系统没有pip3,直接使用即可。
which pip3.7
rm -rf /usr/bin/pip3
sudo ln -s /usr/local/bin/pip3.7 /usr/bin/pip3

## 报错 lsb_release 找不到

## 如果在使用python虚拟环境时报错 `lsb_release` 找不到
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '('lsb_release', '-a')' returned non-zero exit status 1.

## 全局搜索 lsb_release ,找到之后然后删除

python版本升级到3.7 - 金色旭光 - 博客园

screen简单用法

yum install screen
常用的screen命令:

1、screen -S name 创建 名为name的 screen

2、ctal+a 然后 按d 暂时离开此screen 后台继续运行

3、screen -ls 列出所有screen 进程 pid 与名称

4、screen -r + pid(或者名称)回到screen(attached状态),如果就一个screen进程,可以省略 pid

结束一个session有两种方法
一种是,通过screen -r pid 或者 screen -r name先进入该session中,然后exit即可
一种是,通过screen -S edm_10000 -X quit命令,不进入该session中,直接退出

centos解决screen状态为Attached连上不的问题
screen -D -r 25372
#解释:-D -r 先踢掉前一用户,再登陆。
使用:

创建screen后 进入该screen任务,然后运行程序,可以退出到shell 干其他事了,

最主要的功能是screen不会因为断网或者关闭ssh而结束了之前运行的程序

curl

http://www.ruanyifeng.com/blog/2019/09/curl-reference.html

SFTP

链接sftp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#登录
sftp -oPort=端口号 用户名@主机ip
#下载文件
get 远端主机路径 本地主机路径(不填默认为使用sftp命令的文件夹)
#批量下载
get xx*
#上传文件
put 本地主机目录 远端主机目录
#查看文件
cat xxx
# 查看文件列表
ll
#跳转目录
cd xxxx

Crontab 定时任务

简单使用

crontab [-u username]    //省略用户表表示操作当前用户的crontab
-e (编辑工作表)
-l (列出工作表里的命令)
-r (删除工作作)

我们用crontab -e进入当前用户的工作表编辑,是常见的vim界面。每行是一条命令。
例如

1
*/5 * * * * sh /usr/local/qcloud/stargate/admin/start.sh

左边*/5 * * * *是cron表达式

CRON表达式是一个字符串,包含五个到七个由空格分隔的字段(每种软件不一样),表示一组时间,通常作为执行某个程序的时间表。
注释以注释标记#开始,并且必须单独在一行上。
Linux: 0 */12 * * *
Java(Spring): 0 0 */12 * * *
Java(Quartz): 0 0 18 L * ?
0 8 * * * sh /root/back.sh 每日八点执行

右边sh /usr/local/qcloud/stargate/admin/start.sh要执行的命令

查看定时任务执行日志:

1
tail -f /var/log/cron

设置时区

timedatectl list-timezones 列出系统所有可用时区
sudo timedatectl set-timezone Asia/Shanghai 设置时区
timedatectl 查看当前时区

/dev/null

/dev/null 是一个特殊的设备文件,所有接收到的数据都会被丢弃。
/dev/null 读数据会立即返回 EOF(0,文件结束标志).

编写需要交互输入的sh脚本

简单的方法,使用echo:

1
2
3
4
echo yes | needInputYes.sh
or
echo -e "yes\nno\n" | needInputYesAndNo.sh
# \n为换行符号

如果上面的不行,试试使用expect 专门用来交互自动化的工具

1
2
3
4
5
6
7
8
#yum install expect
#!/usr/bin/expect -f

set timeout -1
spawn needInputYes.sh
expect "plaese input yes':"
send "yes\r"
expect eof

进程与文件描述符 fd

一个进程启动以后,除了会分配堆、栈空间以外,还会默认分配三个文件描述符句柄:0 号标准输入(stdin)、1 号标准输出(stdout)、2 号错误输出(stderr)
使用ls查询进程打开的文件描述符 ls -l /proc/[PID]/fd

文件描述符与重定向

标准输入、标准输出、错误输出在描述符中的位置不会变化,但是它们的指向是可以改变的,我们用到的重定向操作符 >< 就是用来重定向数据流的。
在 shell 脚本中,经常看到 2>&1 这样的重定向操作。

  • 2> 表示重定向标准错误输出 (stderr)。
  • &1 表示标准输出 (stdout)。
    连起来的含义是将标准错误输出 (stderr) 重定向到与标准输出 (stdout) 相同的地方。例如,将标准输出和标准错误输出都重定向到一个文件,可以这样写:
    command > output.log 2>&1
    这表示将 command 的标准输出和标准错误输出都写入 output.log 文件。
    这种重定向方式在脚本和命令行中非常常见,用于将程序的所有输出记录到日志文件中,便于调试和分析。

ref:https://cloud.tencent.com/developer/article/2002926?areaId=106001

安装java+切换java版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 更新软件包列表
sudo apt update

# 安装Java 8
sudo apt install openjdk-8-jdk

# 安装Java 21
sudo apt install openjdk-21-jdk
# 配置默认java环境 查看目前有的java环境和目录
sudo update-alternatives --config java
# 配置java版本命令别名 java8 对应8版本
sudo ln -s /usr/lib/jvm/java-8-openjdk-amd64/bin/java /usr/local/bin/java8
# 配置21版本的别名 java21
sudo ln -s /usr/lib/jvm/java-21-openjdk-amd64/bin/java /usr/local/bin/java21

防火墙设置

UFW(Ubuntu默认)

1.检查状态
sudo ufw status
如果提示 command not found,可以用以下命令安装:

1
sudo apt install ufw

2.启用防火墙
先放开22端口
sudo ufw allow 22
然后启用防火墙
sudo ufw enable

启用后,默认会阻止所有传入的连接,允许所有传出的连接。注意一定要先放开22端口再开启!否则SSH链接可能会断开,之后就无法远程操作了(本地物理机无所谓)。

3.基础使用
查看防火墙状态和规则 sudo ufw status
禁用防火墙 sudo ufw disable
禁止某个端口链接 sudo ufw deny 23
开放某个端口 sudo ufw allow 22
允许特定 IP 访问某端口 sudo ufw allow from 192.168.1.100 to any port 22
删除防火墙规则 sudo ufw delete allow 22
重启防火墙 sudo ufw reload

安装nodejs

前往官网Node.js — Download Node.js®选择系统版本等即可.
如果服务器没外网则可get a prebuilt Node.js点击独立文件按钮下载,一般linux是.xz文件.
然后rz上传到服务器,如果rz未下载apt install lrzsz.
然后解压tar -xvf node-v14.15.1-linux-x64.tar
然后配置软链接

1
2
3
4
# 创建 node 和 npm 的符号链接 
sudo ln -sf /opt/node-v22.14.0-linux-x64/bin/node /usr/local/bin/node
sudo ln -sf /opt/node-v22.14.0-linux-x64/bin/npm /usr/bin/npm
sudo ln -sf /opt/node-v22.14.0-linux-x64/bin/npx /usr/bin/npx

然后就安装完成!