工作中整理的命令大全
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.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 显示当前路径
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 删除文件
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 后台运行
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 查看端口占用
6.4 查看主机名
修改主机名
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
|