Linux常用指令(持续更新)

Linux常用指令笔记

一. 常用指令

1.1 文件

(1)目录/文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看当前所在目录
$ pwd
# 列出所有目录
$ ls /
# 查看目录下文件
$ ls a
# 列出目录下所有s开头文件
$ ls -ltr s*
# 将/bin目录以下所有目录及文件详细信息列出
$ ls -lR /bin
# 列出目录下所有文件及目录;目录于名称后加 "/", 可执行档于名称后加"*"
$ ls -AF
# 以列表形式显示目录下文件
$ ll

目录相关:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#使用 mkdir 命令创建 runoob 目录
$ mkdir runoob

#使用绝对路径切换到 runoob 目录
$ cd /root/runoob/

#使用相对路径切换到 runoob 目录
$ cd ./runoob/

# 表示回到自己的家目录
$ cd ~
$ cd -

# 表示去到目前的上一级目录
$ cd ..

# 回到根目录
$ cd /

(2)文件修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 复制文件
$ cp -rf /test/test1 /test/test2
# 修改文件名
$ mv /test/test1 /test/test123
# 移动文件
$ mv /local/test /local/test1

# 查看文件
# 从文件开始显示文件的前n行内容
$ head -n XXX
# 从文件开始显示文件全部内容
$ cat XXX
# 从文件结尾显示文件的后n行内容
$ tail -n XXX

# 编辑文件
$ vi XXX

文件编辑:

  • CTRL + D / CTRL + C 退出当前shell命令。
  • i / insert 进入文本编辑模式。
  • ESC 修改文本后恢复命令模式。
  • :wq 保存修改并退出。
  • free -m 查看内存占用情况。
  • top -d 3 查看系统情况,Shift + m 按内存排序。
  • df -h 查看磁盘使用情况。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vi + 文件名命令,打开文件,然后输入命令:/ + 要修改的关键词,查找到要修改的内容,然后使用命令进入【文本输入模式】,常用的命令如下:

a 在光标之后开始输入文本
A 在行尾开始输入文本
i 在光标之前开始输入文本
I 在行首第一个非空白字符前输入文本
o 在光标所在行后插入一空行
O 在光标所在行前插入一空行
【二】保存退出

修改好文件后,如果在【文本输入模式】下,首先按“ESC” 键进入【命令模式】,然后输入“:”,进入【末行模式】,在末行模式下,可使用如下退出命令:

q 是直接退出;

wq 保存后退出;

q! 强制退出;

wq! 强制保存退出;

删除文件:

1
2
3
4
5
6
7
8
9
10
# 删除目录下所有文件
# -r 就是向下递归,不管有多少级目录,一并删除
# -f 就是直接强行删除,不作任何提示的意思
$ rm -f XXX.XX

# 将会删除/var/log/httpd/access目录以及其下所有文件、文件夹
$ rm -rf /var/log/httpd/access

# 删除文件目录前询问用户
$ rm -ri

(3)查看文件内容

文件内容:

1
2
# 查看文件的内容
$ tail [参数] [文件]
  • -f 循环读取
  • -q 不显示处理信息
  • -v 显示详细的处理信息
  • -c<数目> 显示的字节数
  • -n<行数> 显示文件的尾部 n 行内容
  • –pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
  • -q, –quiet, –silent 从不输出给出文件名的首部
  • -s, –sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

(4)压缩文件解压

.gz 文件解压:

1
2
3
4
5
6
7
8
# 文件解压
$ gunzip xxx.gz
# 解压
$ gzip -d xxx.gz
# .tar.gz格式的文件解压
$ tar zxvf xxx.tar.gz
# 压缩.gz文件
$ gzip xxx

.zip 文件解压:

1
2
3
$ unzip XXX.zip
# -d 指定解压目录
$ unzip -d /tmp/ XXX.zip

1.2 端口

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
# 查看监听的端口
$ netstat -lnpt

# 检查端口被哪个进程占用
$ netstat -lnpt |grep 5672
$ lsof -i:5672

# 查看当前所有tcp端口
$ netstat -ntlp
# 查看所有80端口使用情况
$ netstat -ntulp | grep 80
# 查看所有3306端口使用情况
$ netstat -ntulp | grep 3306

# 显示开启文件abc.txt的进程
$ lsof abc.txt
# 显示abc进程现在打开的文件
$ lsof -c abc
# 列出进程号为1234的进程所打开的文件
$ lsof -c -p 1234
# 显示归属gid的进程情况
$ lsof -g gid
# 显示目录下被进程开启的文件
$ lsof +d /usr/local/
# 同上,但是会搜索目录下的目录,时间较长
$ lsof +D /usr/local/
# 显示使用fd为4的进程
$ lsof -d 4
# 显示所有打开的端口和UNIX domain文件
$ lsof -i -U

防火墙:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 开放端口
# 开放5672端口
$ firewall-cmd --zone=public --add-port=5672/tcp --permanent**

# 关闭5672端口
$ firewall-cmd --zone=public --remove-port=5672/tcp --permanent

# 配置立即生效
$ firewall-cmd --reload

# 查看防火墙所有开放的端口
$ firewall-cmd --zone=public --list-ports

# 关闭防火墙
# 如果要开放的端口太多,嫌麻烦,可以关闭防火墙,安全性自行评估
$ systemctl stop firewalld.service

# 查看防火墙状态
$ firewall-cmd --state

1.3 程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看程序所在目录
$ whereis rabbitmq

# 查看进程的详细信息
$ ps 6832

# 中止进程 PID
$ kill -9 6832

# 查看进程
$ ps -ef|grep xxserver
$ ps ax |grep java

# 查看Java进程西悉尼
$ jps -l

创建用户

1
2
useradd xx
passwd xx
1
2
3
4
5
6
--文件内容100
tail -100f XXXX
--查看所有进程信息,找到java的PID
top
top -H -p 450957
ps huH p 450957 | wc -l

1.4 磁盘

df -h 查看磁盘使用情况。

du --max-depth=1 -h 查看当前目录各个文件夹大小

1.5 查找

1
$ find / -name xxx.xxx

二. 安装工具

2.1 JDK

通过openjdk安装JDK8

1
2
3
yum -y install java-1.8.0-openjdk

java -version

重命名

1
mv jdk1.8.0_171 jdk1.8

解压

1
>tar -xzvf jdk-8u171-linux-x64.tar.gz

OpenJDK: Download and install

1
2
3
4
5
6
7
# Debian, Ubuntu, etc.
$ sudo apt-get install openjdk-8-jre
# The openjdk-8-jre package contains just the Java Runtime Environment. If you want to develop Java programs then please install the openjdk-8-jdk package.

# Fedora, Oracle Linux, Red Hat Enterprise Linux, etc.
$ su -c "yum install java-1.8.0-openjdk-devel"
# The java-1.8.0-openjdk package contains just the Java Runtime Environment. If you want to develop Java programs then install the java-1.8.0-openjdk-devel package

默认安装路径在 /usr/lib/jvm/

2.2 安装NodeJs

下载压缩包:

1
wget https://npm.taobao.org/mirrors/node/v11.0.0/node-v11.0.0.tar.gz

解压安装包:

1
tar -xvf node-v11.0.0.tar.gz

进入目录并安装相关插件:

1
2
cd node-v11.0.0
sudo yum install gcc gcc-c++

进行默认配置并编译:

1
2
./configure
make

编译大概需要半小时左右~

之后就可以开始安装:

1
sudo make install

之后验证安装:

1
node -v

发现已经安装完成

2.3 安装RabbitMQ

参考:《RabbitMQ(一)简介和入门

三. 场景问题解决

3.1 用户使用了错误的JDK

因为使用javafx包中的类,部署环境时出现异常 java.lang.NoClassDefFoundError: javafx/util/Pair ,定位到问题是因为当前使用JDK为OpenJDK,置换为OracleJDK即可。

所以到环境中修改 /etc/profile ,全局配置中修改JAVA_HOME使其对所有用户生效:

1
2
3
4
5
6
7
8
9
vim /etc/profile
...
# 确认配置信息是否有问题
...
# 修改后使其生效
source /etc/profile
# 看JDK版本,此时仍为root用户
java -version
# 结果已经为OracleJDK

但重启后问题依旧未解决,用子用户执行 java -version 确认JDK仍为OpenJDK,考虑可能是子用户有自己进行配置(其实没有):

1
2
3
4
5
6
7
8
9
10
11
# 用子用户到根目录
cd ~
# ls -a 看到.bash_profile
vim .bash_profile
# 修改配置信息,后使其生效
source .bash_profile
# 看JDK版本,此时为子用户
java -version
# 仍为OpenJDK
# 很奇怪,确认配置的JDK/JRE路径是否正确
echo $JAVA_HOME

尝试将JDK的java文件创建快捷方式到bin目录中来解决问题:

1
2
3
4
5
6
7
ln -s /xxx/xxx/jdk/bin/java /bin
# 看JDK版本,此时为子用户
java -version
# 结果为OracleJDK

# 如果提示ln: ´´½¨·󆁴½Ѡ"/bin/java": τ¼þӑ´畚,则先修改已有的java快捷方式
mv /bin/java /bin/java2

重启项目,确认问题解决。

3.2 模拟CPU高占用率

下载lookbusy工具:lookbusy – a synthetic load generator (devin.com)

上传到服务器,并解压文件。

安装(建议使用ROOT用户):

1
2
# 跳转到解压后的目录
$ ./configure && make && make install

使用:

1
2
3
4
5
6
7
8
9
10
# 占用所有 CPU 核心各 70%
$ lookbusy -c 70
# 占用两个 CPU 核心各 70%
$ lookbusy -c 70 -n 2
# 占用所有 CPU 核心在 60%-70% 上下浮动
$ lookbusy -c 60-70 -r curve
# cpu以60分钟为周期,30分钟是峰值,使用率在60%-70%上下浮动
$ lookbusy -c 60-70 --cpu-mode curve --cpu-curve-period 60m --cpu-curve-peak 30m
# 让cpu在20%-%80之间,周期为24H,在14点,即下午2点达到峰值lin
$ lookbusy --cpu-mode curve --cpu-curve-peak 14h -c 20-80

参考:

🔗 Linux教程