Linux 命令整理(全)

字数: 6351

工作中整理的命令大全

LINUX目录结构

 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
/
- /bin	# 存放命令,如 /bin/bash   ping    telnet    mount 等,只要是命令,都会在这里
- /boot	# 内核、系统启动文件
    - grub
- /dev	# 硬件设备文件,比如磁盘分区、swap交换空间文件
- /etc	# 系统配置文件
    - /init.d
    - /sysconfig
/home	# 多为存放用户的数据
/lib | lib64	# 必要的运行库,比如 xxx.so 文件,比如SElinux的文件
    - /modules
/mnt	# 挂载盘
/opt
/proc	# 存储进程、系统信息,比如 cpuinfo、version、swaps
/root
/sbin
/srv
/sys
/tmp	# 临时文件
/usr	# yum   rpm 等   安装的应用程序的位置
    - /bin
    - /share
    - /local
/var
    - /log	# 系统日志,内核日志 messages
    - /lib
    - /spool
    - /run

LINUX命令大全

1 系统信息类

1
2
3
4
5
6
7
8
9
# 查看系统信息
uname -a
# 系统架构信息
uname -r
# CPU信息
cat /proc/cpuinfo
# Swap 交换空间
cat /proc/swaps
swapon -s
1
2
# 重启机器
reboot

1.1 空间情况

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 实时查看系统使用情况
top
# 查看磁盘使用
df -h
# 查看内存使用
free -h
# 查看当前目录空间大小
du -sh
du -sh * | sort -n

# 查看分区
fdisk -l

1.2 系统服务命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 系统形式启动
systemctl start service.service
# 停止
systemctl stop service.service
# 查看状态
systemctl status service.service
# 重启
systemctl restart service.service

# 开启自启
systemctl enable service.service
# 取消开启自启
systemctl disable service.service

1.3 查看环境变量

1
2
3
4
# 列出环境变量
env
# 查看某个环境变量
env | grep PATH

1.4 内核日志

1
2
3
4
5
6
7
# 查看内核日志
dmesg
# 查看特定的内核日志,比如挂载失败的日志
dmesg | grep mount

# 或者查看 messages
tail -fn 200 /var/log/messages

1.5 文件最大打开数

为了防止失控的进程破坏系统的性能,linux 会跟踪进程使用的大部分资源,并允许用户和系统管理员使用对进程的资源限制。例如对某个用户打开系统进程数进行限制,一般限制包括软限制、硬限制。

通常在安装数据库的时候,对这个会有要求,可优化数据库的运行性能。

1
2
3
4
5
6
7
8
# 编辑相关文件
vi /etc/security/limits.conf
# 在最后添加
# user_name
user_name soft noproc 65535
user_name hard noproc 65535
user_name soft nofile 65535
user_name hard nofile 65535

1.6 时间管理

1
2
3
4
5
# 查看时间设置
timedatectl

# 手工设置时间
timedatectl set-time "YYYY-MM-DD HH:MM:SS"

ntp 同步时间

1
2
3
4
5
6
7
8
# 需要服务器里安装了 ntp 
# 一般的发行版自带

# 查看是否安装了 ntp
rpm -qa | grep ntp

# 使用 timedatectl 同步 Ntp 时间
timedatectl set-ntp true

2 分区、挂载

1
2
3
4
5
6
7
8
9
fdisk /dev/vda
m # 获取 help
d # 删除分区
l # 列出现有分区
n # 添加新分区
p # 打印分区表信息
t # 更改分区的系统类型
w # 保存退出
q # 退出而不保存

2.1 更改分区

 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
# 列出分区
fdisk -l

#################################
# 删除分区
# 使用 fdisk 命令,后边接 分区名
fdisk /dev/vda
# 列出当前分区信息
Command (m for help): p
# 删除命令,选择第四个分区,按顺序来的
Command (m for help): d
Partition number (1-4, default 4): 4
# w 是保存退出
Command (m for help): w
#################################

#################################
# 新增分区
fdisk /dev/vda
# m 帮助
Command (m for help): m
# 新增 n ,内存取默认就行
Command (m for help): n
Partition number (4-128, default 4): 4
First sector (70436864-104857566, default 70436864): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (70436864-104857566, default 104857566): # 也可以填 +20G 这种
# 默认 y
Do you want to remove the signature? [Y]es/[N]o: y
# 保存
Command (m for help): w

# 让内核重新读取分区信息
partprobe -s

# 格式化分区,注意这是 filesystem 类型的分区格式化
mkfs.xfs -f /dev/vda4 
#################################

2.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
fdisk /dev/vda
# 更改分区类型为 swap 
Command (m for help): t
Partition number (1-4, default 4): 4
Partition type (type L to list all types): 19 # 19 是 swap 类型,具体可使用 L 查看更多类型
# 保存
Command (m for help): w
# 让内核重新读取分区信息
partprobe -s
# 格式化分区
mkswap /dev/vda4
# 挂载分区
swapon /dev/vda4
# 验证
swapon --show

# 设置开机自启
vi /etc/fstab
# 加入
UUID=9b6af8bf-5a7a-4e6b-8e2e-4afa78cf5bbc none  swap    defaults        0 0
# 如果不清楚 UUID 可设置为它文件的路径
/dev/vda4 none swap defaults 0 0

### 如下查看 UUID
blkid /dev/vda4

2.3 调整 Swap 空间

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查看 swap 分区路径
cat /proc/swaps
# 禁用
swapoff /dev/dm-1
# 编辑 /etc/fstab 删掉 swap 分区的信息
vi /etc/fstab
# 删掉 此swap 分区的信息

# 创建分区文件
dd if=/dev/zero of=/swapfile bs=500M count=1
# /dev/zero 是 LINUX 里一个特殊块设备,在每次读取时输出零字节
# /swapfile 可以是任意路径下的文件,注意这个不用事先创建

# 授权
chmod 600 swapfile
# 格式化 swap 分区
mkswap /swapfile
# 激活该文件,添加到交换池中
swapon /swapfile

# 验证
swapon --show

2.4 挂载

1
2
3
4
5
6
7
# 挂载 Windows 共享目录
mount -t cifs -o username=@user, password=@password //IP/share_dir /home/aml
# 挂载一个 iso 镜像文件
mount -o loop /path/to/file.iso /mnt

# 卸载 
umount /home/aml

3 用户相关

说明

3.1 用户组

1
2
3
4
5
6
7
8
9
# 增加用户组
groupadd group_name
# 新增指定用户组ID的组
groupadd -g GID group_name

# 删除用户组
groupdel group_name
# 重命名用户组
groupmod -n new_group_name old_group_name

3.2 用户

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 创建用户
useradd -u UID -g group_name -s /bin/bash -d /home/dir_name -m user_name
# -u:指定用户的 ID
# -g:指定用户所属组
# -s:指定用户用的 shell
# -d:指定用户的根目录路径
# -m:创建用户的根目录
# 例子,创建 test 用户,并设置用户 ID\所属组\指定 SHELL\指定根目录并创建根目录:
useradd -u 1001 -g dmdba -s /bin/bash -d /home/dm -m test


# 删除用户
userdel -r user_name

3.3 修改用户密码

1
2
3
4
# 修改密码
passwd user_name
# 设置用户口令的失效期限
chage -E 2024-12-12 user_name

3.4 修改用户所属主、组

1
2
3
4
# 修改用户所属主
usermod -g group_name user_name
# 修改用户所属组
usermod -G group_name user_name

4 文件目录相关

4.1 目录

4.1 .1 进入

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 进入目录
cd /home
# 返回上一级目录
cd .. 
# 返回上两级目录
cd ../.. 
# 进入个人的主目录
cd 
# 进入个人的主目录
cd ~user1 
# 返回上次所在的目录
cd - 

4.1.2 显示当前路径

1
pwd

4.1.3 查看目录

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#  查看目录中的文件
ls
# 查看目录中的文件
ls -F
# 显示文件和目录的详细资料
ls -l
#  显示隐藏文件
ls -a
#  显示包含数字的文件名和目录名
ls *[0-9]*

# 按时间排序显示文件 *** 
ls -lrt 

4.1.4 创建目录

1
2
3
4
5
6
# 创建一个叫做 'dir1' 的目录
mkdir dir1
# 同时创建两个目录
mkdir dir1 dir2
# 递归创建
mkdir -p /tmp/dir1/dir2

4.1.5 删除目录

1
2
3
# 删除目录
rm -rf dir_name
rmdir dir_name

4.2 文件

1
2
3
4
5
6
# 创建文件
touch file_name
# 一般可以直接 vi 保存一个空文件来创建
vi file_name
# 删除文件
rm -rf file_name

4.2.1 查看文件内容

1)cat
1
2
3
4
5
6
# 查看内容
cat file_name
# 查看内容,显示行号,包括空行
cat -n file_name
# 查看内容,显示行号,不包括空行
cat -b file_name
cat 重定向
1
2
3
4
# 将文件内容追加到 新文件中
cat /etc/profile >> /home/test.txt
# >> 追加
# > 覆盖
2)分页查看 less 及操作
1
2
3
4
5
6
7
8
9
# 分屏显示内容
less -N file_name
# 操作键		功能
# 空格键		显示手册页的下一屏幕
# Enter 键	  一次滚动手册页的一行
# b	回滚一屏 向上翻屏
# f	向前一屏 向下翻屏
# q	退出
# /word	搜索 word 字符串	n 向下找 N 向上找
3)查看前N行内容 head
1
2
# 看前 n 行内容
head -n file_name
4)查看最后N行内容 tail
1
2
# 查看后 10 行内容,并自动追加更新日志信息
tail -fn 10 file_name

4.2.2 查找文件内容

1
2
3
# 使用 grep 
grep "09:30*" /var/log/messages
grep -10 "checkpoint" dm_DMSERVER_202407.log
1)清空文件内容
1
2
3
4
# 方式一 重定向覆盖
>/path/to/file_name
# 方式二
truncate -s 0 /path/to/file_name

4.2.3 查找文件

1)whereis \ which
1
2
3
4
5
6
7
8
[root@FXQ-YWYY-57-81 ~]# whereis java
# 使用 which java 也行

java: /usr/bin/java /usr/lib/java /etc/java /usr/share/java /usr/java/jdk1.8.0_231/bin/java /usr/share/man/man1/java.1.gz
[root@FXQ-YWYY-57-81 ~]# ls -lrt /usr/bin/java
lrwxrwxrwx 1 root root 22 Jun  6  2023 /usr/bin/java -> /etc/alternatives/java
[root@FXQ-YWYY-57-81 ~]# ls -lrt /etc/alternatives/java
lrwxrwxrwx 1 root root 73 Jun  6  2023 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-7.ky10.aarch64/jre/bin/java
2)find
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[root@learning /]# find / -name "dm.ini"
/home/dmdba/data/DAMENG/dm.ini
find /path -option file_name
# -option: 
# -name 找名字
# -type 找类型
# -size 找大小

# 在当前路径查找
find . -name *file_name*

4.2.4 创建文件

1
2
3
4
5
6
# 递归创建
touch -p /path/to/dir/file_name
# 创建多个文件
touch file_name_1 file_name_2 file_name_3
# 使用 vi 创建空文件
vi file_name

4.2.5 删除文件

1
rm -rf file_name

4.3 复制

1
2
3
4
5
6
7
# 复制目录
cp /path/dir_name /path/to/new/dir_name
# 复制到当前目录
cp /path/dir_name .

# 复制文件
cp file_name file_new_name

4.4 移动与重命名

1
2
3
4
# 重命名
mv dir_name dir_new_name
# 移动到别处
mv /path/to/dir_name /path/to/new/dir_name

4.5 软硬链接

1
2
3
4
# 创建一个指向文件或目录的软链接
ln -s file_name lnk_name
# 创建一个指向文件或目录的物理链接
ln file_name lnk_name

4.6 权限相关

4.6.1 更改所属组

1
2
# 更改所属主、组; -R 递归
chown -R user_name:group_name dir_name

4.6.2 更改目录、文件权限

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# r 4
# w 2
# x 1

## drwxrwxrwx 表示:所属主、所属组、其他用户的权限

# 给所属主读、写、执行权限,所属组给读、执行权限,其他用户给读、执行权限
chmod 755 -R /path/to/dir_name
# 给执行权限
chmod +x file_name

4.7 打包、解包

4.7.1 tar(不常用)

1
2
3
4
5
6
7
8
9
# 创建 tar
tar -cvf file_name.tar /path/to/dir_name
# 指定压缩文件
tar -cvf file_name.tar file1 file2 file3
# 指定压缩 DM8_ 开头的所有文件
tar -cvf file_name.tar DM8_*

# 解压 tar 到指定目录
tar -xvf file_name.tar /path/to/dir

4.7.2 tar.gz(常用)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# -z 表示使用 gzip 压缩

# 将 dir_name 压缩成 tar.gz
tar -czvf file_name.tar.gz /path/to/dir_name
# 指定压缩文件
tar -czvf file_name.tar.gz file1 file2 file2
# 指定压缩 DM8_ 开头的所有文件
tar -czvf file_name.tar.gz DM8_*

# 解压 tar.gz 到指定目录
tar -xzvf file_name.tar.gz /path/to/dir

4.7.3 tar.bz2(不常用)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# -j 表示使用 bzip2 压缩

# 将 dir_name 压缩成 tar.bz2
tar -cjvf file_name.tar.bz2 /path/to/dir_name
# 指定压缩文件
tar -cjvf file_name.tar.bz2 file1 file2 file2
# 指定压缩 DM8_ 开头的所有文件
tar -cjvf file_name.tar.bz2 DM8_*

# 解压 tar 到指定目录
tar -xjvf file_name.tar.bz2 /path/to/dir

4.7.4 zip

1
2
3
4
5
6
7
# 压缩成 zip 格式
zip file.zip /path/to/dir_name
# 将目录一起压
zip -r file.zip /path/to/dir_name

# 解压 zip
unzip file.zip /path/to/dir_name

5 进程服务相关

5.1 查看进程

1
2
3
4
5
6
# 查看当前所有进程
ps -ef 
# 查看特定进程
ps -ef | grep server_name
# 查看指定用户的所有进程
ps -u user_name

5.2 结束进程

1
2
3
4
5
6
# 一般使用 kill 
# -9 强制结束
kill -9 server_pid

# systemctl
systemctl stop service.service

5.3 设置自启

1
2
# systemctl
systemctl enable server_name.service

设置之前,需要将服务在系统里进行注册,需要自己生成一个名称

1
vi /etc/systemd/system/server_name.service

具体百度一下,还有其他不同的自启方式的

5.4 启动 jar 包服务

1
2
3
4
# 直接启用
java -jar jar_name.jar
# 加上 JVM 参数
java -jar jar_name.jar -Xmx1024m -Xms512m

5.5 后台运行

1
nohup server_name &

6 网络相关

linux网卡配置文件默认地址:/etc/sysconfig/network-scripts/ifcfg-eth0 ,一般ifcfg-eth0表示第一块网卡,eth1 为第二块,以此类推。

6.1 验证网络是否通

1
2
3
4
# ping 
ping ip
# telnet 用于验证端口是否打通
telnet ip port

6.2 查看网络

1
systemctl status network

查看 IP

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
ip addr
# 有的是 ipconfig

# 最快的方式
[root@status shell]# hostname -I
172.16.101.182

# 可以这么查
[root@kylinV10arm162 aml_updatePatch]# hostname -i | awk {'print $2'}
10.6.7.162

# 也可以这么查
ip -f inet addr | grep -v 127.0.0.1 | grep inet | grep -o 'inet[^/]*' | awk {'print $2'}

6.3 查看端口占用

1
netstat -nltp

6.4 查看主机名

1
hostname

修改主机名

1
2
3
4
5
6
vi /etc/hostname
# 找到主机名的那一行,修改它
# 需要重启机器生效

# 临时设置主机名
host new_hostname

6.5 设置 hosts

1
2
3
4
5
6
7
8
vi /etc/hosts
# 添加以下内容
ip 域名
# 或者 
ip hostname

# 可重启网络,不过一般它是立即生效的,不需要重启
systemctl restart network

6.6 设置 DNS

1
2
3
4
5
vi /etc/resolv.conf
# 添加,其中 nameserver 为固定写法
nameserver ip
# 例子
nameserver 8.8.8.8

6.7 防火墙

1
2
3
4
5
6
systemctl status firewalld	# 状态
systemctl start firewalld	# 启动
systemctl stop firewalld	# 停止
systemctl restart firewalld	# 重启
systemctl disable firewalld	# 禁止自启
systemctl enable firewalld	# 开机自启

可以这么检查

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[root@learning ~]# systemctl status firewalld.service # 状态
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
[root@learning ~]# firewall-cmd --list-all
FirewallD is not running

# 或者
[root@learning ~]# systemctl status firewalld.service # 状态
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

7 包管理

7.1 rpm

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 查看已安装 rpm 包
rpm -qa
# 查看特定的包
rpm -qa | grep rpm_name

# 安装 rpm 包; -i 是 install 的意思,vh是显示进度详情
rpm -ivh rpm_name
# 忽略依赖,强制安装; --nodeps 忽略以来  --force 强制覆盖
rpm -ivh --nodeps --force rpm_name
# 更新 rpm 包
rpm -Uvh rpm_name
# 卸载
rpm -e rpm_name
# 删除系统自带 JDK 为例
rpm -qa | grep -i java | xargs -nl rpm -e --nodeps

7.2 yum

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 下载
yum install -y package_name
# 更新
yum update package_name
# 卸载
yum remove package_name

# 搜索
yum search package_name
# 已安装的清单
yum list installed [package_name]
# 可安装的清单
yum list available [package_name]
# 可更新的清单
yum list updates


# 清除缓存
yum clean all
# 刷新缓存
yum makecache
# 验证
yum repolist

7.2.1 更换 yum 源

阿里云 Centos 7.9 的包

https://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/?spm=a2c6h.25603864.0.0.23ca4ecbejPOxR

需要使用 wget命令下载,当服务器没有这个命令的时候,到开源站下载 wget

1
2
3
4
5
6
# 下载 yum 源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清缓存
yum clean all
# 重新加载 yum 缓存
yum makecache

7.3 wget

8 三剑客 grep\sed\awk

8.1 grep

grep是Linux里一个文本搜索工具,能够使用通配符正则表达式搜索文本,并将匹配的行打印出来

1
2
3
4
5
6
7
8
9
# 统计总行数
[root@status log]# cat dm_DMSERVER_202407.log | grep -c INFO
28047

# 不区分大小写查找 INFO 
cat dm_DMSERVER_202407.log | grep -i info

# 匹配所有含有大写字母和数字的行
cat dm_DMSERVER_202407.log | grep [A-Z][0-9]

8.1.1 常用参数

1
2
3
4
5
6
7
8
-a	# 以文本文件方式搜搜
-c	# 计算匹配行的数量
-i	# 忽略大小写
-n	# 输出行号
-v	# 反向选择,即排除匹配的行
-h	# 查询多文件时不显示文件名
-l	# 查询多文件时只输出包含匹配符的文件名
-s	# 不显示不存在或无匹配文本的错误信息

例子:

1
2
3
4
[root@status ~]# ps -ef | grep -in dm
73:dmdba     5510     1  0 Jun24 ?        00:01:19 /home/dmdba/dmdbms/bin/dmap
79:dmdba    16636     1  0 Jun24 ?        00:23:07 /home/dmdba/dmdbms/bin/dmserver path=/home/dmdba/data/DAMENG/dm.ini -noconsole
89:root     22552 22507  0 22:28 pts/0    00:00:00 grep --color=auto -in dm

通配符和正则表达式是两个不同的概念

8.1.2 通配符

1
2
3
4
5
6
7
8
*		# 表示 N 个字符(数字)
?		# 匹配任意一个字符
# 	# 注释
|		# 管道符
;		# 多个命令连续执行
&		# 后台运行命令
[]	# 内容范围,匹配括号中的内容
{}	# 命令块,多个命令匹配

8.1.3 正则表达式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
*		# 匹配 n 次
.		# 匹配除了换行符以外的任意一个字符
.*	# 任意字符
^		# 匹配行的开头,即以某个字符开头
$		# 匹配行的结尾,即以某个字符结尾
[]	# 匹配括号里的任意指定字符(只匹配一个字符)
[^]	# 匹配出了中括号以外的任意一个字符
\		# 转义
\s	# 匹配任何空白字符
\d	# 匹配一个数字字符

8.2 sed

原始test.sh脚本

1
2
3
4
5
6
7
8
9
#!/bin/bash

##############
# author: wq
# create_date: 20240712
# mark: test
##############

echo "localhost: 127.0.0.1"

8.2.1 替换文本

1
2
3
4
5
6
# 模板
sed -i 's/old/new/g' file

# 例子
# 将文件里的 127.0.0.1替换为 192.168.0.1
sed -i 's/127.0.0.1/192.168.0.1/g' test.sh

8.2.2 添加文本

a参数表示在其下一行添加字符串

 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
sed -i '/text/a new_text' file

# 例子
# 在文件里找到 localhost 所在的行,并在其下一行添加# hello, world
sed -i '/localhost/a # hello, world' test.sh

# 例子
# 找到的每个字符,都会在下边加新的
[root@status log]# sed -i '/localhost/a # hello, world' test.sh
[root@status log]# sed -i '/localhost/a # hello, world' test.sh
[root@status log]# sed -i '/localhost/a # hello, Gopher ' test.sh
[root@status log]# sed -i '/hello/a # ??? ' test.sh
[root@status log]# vi test.sh
#!/bin/bash

##############
# author: wq
# create_date: 20240712
# mark: test
##############

echo "localhost: 192.168.0.1"
# hello, Gopher
# ???
# hello, world
# ???
# hello, world
# ???

i参数表示在其上一行添加字符串

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
[root@status log]# sed -i '/Go/i 111' test.sh
[root@status log]# vi test.sh
#!/bin/bash

##############
# author: wq
# create_date: 20240712
# mark: test
##############

echo "localhost: 192.168.0.1"
111
# hello, Gopher
# ???
# hello, world
# ???
# hello, world
# ???
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$`表示行尾,`&`表示添加。在 `111` 的行尾添加 `word
[root@status log]# sed 's/111$/& word/g' test.sh
#!/bin/bash

##############
# author: wq
# create_date: 20240712
# mark: test
##############

echo "localhost: 192.168.0.1"
111 word
# hello, Gopher
# ???
# hello, world
# ???
# hello, world
# ???

^表示行首,&表示添加,在 111的行首添加 #

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
[root@status log]# sed '/111/s/^/&# /' test.sh
#!/bin/bash

##############
# author: wq
# create_date: 20240712
# mark: test
##############

echo "localhost: 192.168.0.1"
# 111
# hello, Gopher
# ???
# hello, world
# ???
# hello, world
# ???

8.2.3 删除文本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 删除第1行
sed '1d' test.sh

# 删除第3 - 8行
sed '3,8d' test.sh

# 删除最后一行
sed '$d' test.sh

# 删除匹配111的那一行
sed '/111/ d' test.sh

# 删除匹配行到最后一行
sed '/111/ $d' test.sh

8.3 awk

打印输出信息,并输出第一列参数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[root@status log]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        868M     0  868M   0% /dev
tmpfs           879M     0  879M   0% /dev/shm
tmpfs           879M  556K  878M   1% /run
tmpfs           879M     0  879M   0% /sys/fs/cgroup
/dev/vda1        40G  8.7G   29G  24% /
tmpfs           176M     0  176M   0% /run/user/0
[root@status log]# df -h | awk '{print $1}'
Filesystem
devtmpfs
tmpfs
tmpfs
tmpfs
/dev/vda1
tmpfs

如果是打印第一列和第二列,则是 awk '{print $1,$2}' 用逗号分隔

9 VI 编辑器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# vi 或者 vim
# 分为3个模式:命令模式、输入模式、底行模式

# 进入 vi 的默认界面就是 命令模式


i	# 进入输入模式,光标前一个字符开始
a # 同上,光标后一个字符开始
o # 同上,在光标的下一行开始

esc # 返回命令模式
:		# 进入底行模式
 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
# 命令模式
/find_text		# 查找文本
n		# 向下查找
N		# 向上查找
# 常用操作
w		# 跳到下一个单词的开始
b		# 跳到上一个单词的开始

# 复制贴贴
v		# 按 v 开始选择,选择后 y 复制, p 贴贴

# 删除
dd	# 删除光标所在行
:n1,n2d		# 删除 n1 - n2 行
# 例子
:3,7d


# 撤销
u		# 撤销操作,跟 windows 的 ctrl+z 一样效果
ctrl + r # 重做撤销


# 替换
:n1,n2 s/old_text/new_text/g
# 例子:替换11行的localhost为hostname	如果不加行号则为全局替换
:11 s/localhost/hostname/g
1
2
3
4
5
6
# 底行模式
:set nu		# 显示行号
:set nonu	# 不显示行号
:w				# 保存
:wq				# 保存并退出
:q!				# 不保存并退出

10 文件传输

1
2
3
4
scp /home/dm/dmdata/dm.ini ip:/home/dm/dmdata/

# 复制所有该目录下所有内容,递归
scp -r /home/dm/dmdata/dm.ini ip:/home/dm/dmdata/

其他

1 管道符 |

|可以将一个命令的输出作为另一个命令的输入

举例:

1
2
3
4
5
6
7
# 查看当前目录下的文件和文件夹梳理
# 通过 ls -l 列出当前路径下所有文件、目录,让后计算它们的数量
ls -l | wc -l

# 查看当前运行的dm进程
# -i 不区分大小写
ps -ef | grep -i dm

2 重定向

2.1 重定向清空文件内容

1
2
# 把空内容覆盖写入文件,达到清空文件内容的效果
>file_name

2.2 重定向介绍

1
2
3
<file_name	# 将文件内容作为标准输入传递给命令
>file_name	# 将命令的输出覆盖写入文件里
>>file_name	# 将命令的输出追加写入文件里

3 echo

输出内容

1
2
3
# 输入变量
echo $JAVA_HOME
echo $PATH

4 配置环境变量

环境变量通常配置在 /etc/profile``~/.bash_profile文件里

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
vi /etc/profile
# 添加
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-7.ky10.aarch64
export JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-7.ky10.aarch64/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH

# 保存后刷新环境变量生效
source /etc/profile
# 验证
echo $JAVA_HOME

5 命令别名 allas

配置 别名 是为了方便自己,比如对命令别名、封装函数等进行配置。

它有两个文件 /etc/bashrc ~/.bashrc,一个是全局生效,一个对当前用户生效

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 进入编辑
vi /etc/bashrc
# 添加
alias llt='ls -lrt'
alias nst='netstat -ntlp'
# 保存后刷新
source /etc/bashrc
# 输入 llt,就会执行 ls -lrt 命令(该命令为将当前目录的内容安装时间顺序显示出来)
# 输入 nst,就会执行 netstat -ntlp
# 别名不能与现有命令重复,别名应当唯一

# 查看所有的别名
alias

封装函数的用法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 进入编辑 vi /etc/bashrc
vi /etc/bashrc
# 添加
function func_name() {
  ps -ef | grep -i $1
}
# 保存后刷新
source /etc/bashrc
# 调用
func_name java
  
# 调用函数会直接显示 ps -ef | grep -i java 命令的信息,比如下边
UID    PID  PPID  C   STIME                TTY      TIME       CMD
user1 1234  1233  0  2023-09-14 10:00:00  pts/0    00:01:23 java -jar myapp.jar
Licensed under CC BY-NC-SA 4.0
最后更新于 2024年10月14号 22:36