Linux常用命令合集

1. 基础操作

查看当前目录各文件夹大小

du -h --max-depth=1

查看目录各个文件夹大小并排序

# 倒序
du -h --max-depth=1 --block-size=G . | sort -nr
# 正序
du -h --max-depth=1 --block-size=G . | sort -n

查看某个目录是否被占用

fuser -uvm /app/data/ 

查看进程中的环境变量

# 先查看进程号
ps x | grep java
# 28224 pts/0    Sl+    2:55 java -jar test.jar
# 再通过进程号到进程目录中查找环境变量文件
tr '\0' '\n' < /proc/28224/environ 

找到指定目录下的特定类型文件并修改权限

find /directory/of/interest/ -type f -iname "*.sh" -exec chmod +x {} \;
``
## 批量修改用户密码,有时候passwd命令校验太强用
echo 'root:123456' | chpasswd

将rpm包中的文件解压到当前目录

rpm2cpio rpmfile.rpm | cpio -idmv
#  -i, --extract              从包中提取文件 (运行 copy-in 模式)
#  -d, --make-directories     需要时创建目录
#  -m, --preserve-modification-time 
#                             创建文件时保留以前文件的修改时间
#  -v, --verbose              详细列出已处理的文件

163yum源快速配置命令,直接粘贴到控制台执行。或者存入脚本中,方便不同服务器节点分享使用

#!/bin/bash
curl -o CentOS7-Base-163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
mv CentOS7-Base-163.repo /etc/yum.repos.d
yum clean all
yum makecache

2. 文本或字符串操作

从properties文件中获取属性值

grep key test.properties | awk -F = {'print $2'}

# sed命令操作合集
sed -i '1,100d' file #删除文件第1到100行
sed -i '10d' file    #删除文件第10行
sed -i '$d' file     #删除文件最后一行

sed多行匹配后行首插入字符

sed -in '/server .*.centos.pool.ntp.org iburst/ s/^/#/g' /etc/chrony.conf

vi操作多行

# Ctrl+V进入视图编辑模式
# 选中后,d直接删除
# Shift+i编辑模式,输入后,两次Esc完成操作

awk截取字符串中的某几列,$加数字即对应列数,从1开始

echo "123 456 789" | awk '{print $1,$3}'
输出:123 789

awk截取字符串,忽略掉某一行,使用NR!=n,n即为行数

awk 'NR!=1 {print $1,$2,$3,$4}'
# 示例:
[root@nfs-server core]# ls -lh
total 0
drwxr-xr-x. 3 root root 0 Aug  8 06:33 alua
drwxr-xr-x. 3 root root 0 Sep 13 12:17 fileio_1
drwxr-xr-x. 3 root root 0 Sep 13 12:17 rd_mcp_0
[root@nfs-server core]# ls -lh | awk 'NR!=1 {print $1,$2,$3,$4}' 
drwxr-xr-x. 3 root root
drwxr-xr-x. 3 root root
drwxr-xr-x. 3 root root

3. 网络类操作

tcpdump命令操作

查看eth0网卡上tcp协议8088端口的情况,打印详细日志,格式化输出

tcpdump -XvvennSs 0 -i eth0 tcp port 8088

查看HTTP POST请求

tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'

查看HTTP请求响应头以及数据

tcpdump -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
tcpdump -X -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

查看目标ip地址的

tcpdump -XvvennSs 0 -i eth0 dst host 192.168.1.10

查看源地址和目标地址

tcpdump -XvvennSs 0 -i eth0 dst host 192.168.1.10 or src host 192.168.1.20

iptables命令

iptables -nvL --line-number

4. 存储类相关操作


扩展lvm

df -TH 
fdisk -l # 找到作为扩展盘的设备挂载路径
pvcreate /dev/vdb #名称和要作为扩展盘的设备挂载路径保持一致
pvs
pvdisplay
vgextend centos /dev/vdb 
lvextend -l +100%FREE /dev/mapper/centos-root
xfs_growfs /dev/mapper/centos-root

查看磁盘分区情况和空间

lsblk

5. docker相关操作


删除所有退出的容器

docker ps -a | grep Exited | awk {'print $1'} | xargs docker rm -f

删除所有tag为none的镜像

docker images -a | grep none | awk {'print $3'} | xargs docker rmi -f

docker-compose网络配置如下,可将容器网络配置为docker0

network_mode: bridge

参见:https://github.com/docker/compose/issues/3899

docker创建网络,指定网络mtu,解决openstack云上容器中可以ping通外网却无法下载内容的问题;或是服务间通信出现包被截断的问题(mtu1500和mtu1450之间通信),mtu不对

docker network create test-net --opt com.docker.network.driver.mtu=1450

配置docker yum源

yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce

6. openstack相关操作


压缩qcow2镜像大小

在虚拟机的使用过程中,虚拟机内的文件经过大量的增、删、改等操作后,会使得虚拟机磁盘的体积变大。即使删除了虚拟机内的文件,已经分配给虚拟磁盘的空间却并不会被回收。不过我们可以进行手动回收这些虚拟机没有使用的空间。
首先在虚拟机内部执行如下命令:

dd if=/dev/zero of=/dev/ext_disk/junk
rm -rf /dev/ext_disk/junk

执行这个命令的目的,是把虚拟磁盘内部所有未被占用的空间用 0 字节填充。
其中 /dev/ext_disk 是我们的虚拟磁盘,在虚拟机内部挂载在了/dev/ext_disk 上。
之后关闭虚拟机,在宿主机上执行如下命令。

qemu-img convert -c -O qcow2 vm-db.qcow2 vm-db-new.qcow2

在进行转换的时候,qemu-img 命令不拷贝虚拟磁盘中的0数据块。这样就达到了压缩磁盘的目的。

查看openstack cinder 卷管理的服务情况

openstack volume service list

7. git相关操作


git将origin所有分支检出到本地

for b in `git branch -r --list 'origin*' | grep -v -- '->'`; do git branch --track ${b##origin/} $b; done

修复git因电脑断点等导致存储文件的指针出错导致git命令无法执行成功,git pull git fetch等

# git.exe fetch -v --progress "origin"
# 
# remote: Counting objects: 26, done.
# remote: Compressing objects: 100% (16/16), done.
# remote: Total 26 (delta 9), reused 0 (delta 0)
# error: inflate: data stream error (unknown compression method)
# fatal: failed to read object f297e2a7436318c108e630ce959a5a1ed9c27f86: Invalid argument
# error: ip:xxxx/xxx/xxx/xxxx.git did not send all necessary objects

# 使用如下命令进行检查,命令行操作
git fsck --full

# error: inflate: data stream error (unknown compression method)
# error: unable to unpack 0a6c5868709d37977119966afc1cc220fdd9c43f header
# error: inflate: data stream error (unknown compression method)
# fatal: loose object 0a6c5868709d37977119966afc1cc220fdd9c43f (stored in .git/objects/0a/6c5868709d37977119966afc1cc220fdd9c43f) is corrupt

# 删除上边错误的文件.git/objects/0a/6c5868709d37977119966afc1cc220fdd9c43f
# rm -f .git/objects/0a/6c5868709d37977119966afc1cc220fdd9c43f

# 最后出现如下情况,删除refs/remotes/origin/xxxxxxxxxxxxx这个文件即可

# Checking object directories: 100% (256/256), done.
# Checking objects: 100% (45811/45811), done.
# error: refs/remotes/origin/xxxxxxxxxxxxx: invalid sha1 pointer 0000000000000000000000000000000000000000
# error: bad ref for refs/remotes/origin/xxxxxxxxxxxxx
# dangling blob 632a066cc07ec25f8e24d9f3dc39a36048a31b21
# dangling blob 1e4ad2848fa214d8282024c60470db9ba798b1ff
# dangling blob 67883eabac8ad19d51c5593e2d239dcdac02c033
# dangling blob 0fc088573f016d7e98fd5cbd71b9c7ed9b426f44
# dangling blob 051dfd7647fa462bd1a610e0e691615ca9141b24
# dangling blob 0a30052f18fd84def038f27851c0aabee5f97168
# dangling blob 6b4019027cda1d5d687deee5f6433fd9944f7792
# dangling commit 32696b7d52cb2eabb7684c08fd81e74701773160
# dangling blob fe6bcbc30b2f73975d3d613b64109c9a6d3b1817

# rm -f .git/refs/remotes/origin/xxxxxxxxxxxxx

git svn clone将svn仓库转换为git仓库

# 1.首先创建用户映射文件
touch users.txt
echo "Zhangsan = Zhangsan <zhangsan@163.com>" > users.txt

# 2.执行转换命令,-s指定目标仓库存储位置,其他命令可以用git svn help查看
git svn clone file:///root/BaseConversionKitSDB --authors-file users.txt  --no-metadata -T trunk -b branches -t tags -s baseConversion
Kit.git/

# 3.将标签变为合适的 Git 标签
cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/
rm -Rf .git/refs/remotes/origin/tags

# 4.将 refs/remotes 下剩余的引用移动为本地分支
cp -Rf .git/refs/remotes/* .git/refs/heads/
rm -Rf .git/refs/remotes

# 5.添加远程仓库
git remote add origin git@my-git-server:myrepository.git

# 6.上传所有分支与标签
git push origin --all

git设置proxy代理

git config --global http.proxy 'socks5://127.0.0.1:7890'

8. configFS相关操作

# 删除错误的配置目录及目录中的文件,这里是由于通过rtslib配置了错误的block块设备,导致启动时报错,需要强制删除
rmdir --ignore-fail-on-non-empty iblock_2/

9. gradle相关操作

# 配置gradle命令行
# 1.在window的环境变量中加入GRADLE_HOME和bin
# 2.在根目录下,即用户文件夹,创建.bash_profile,写入
my gradle config
export GRADLE_USER_HOME=D:/config/.gradle
#(也可以通过gradle命令行参数-g指定,不太方便)
# 3.重启bash即可生效,使用本地的gradle和对应的配置文件

运行测试用例

gradle test

运行一个测试用例

gradle -DsampleTest.single=S* test(可以通过*进行模糊匹配)

列举所有任务

gradle tasks --all

测试任务加入日志

test {
    testLogging {
        // Show that tests are run in the command-line output
        events 'started', 'passed'
    }
    include "**/*Test.class"
    exclude "**/IT*.class"
}

刷新依赖

gradle build --refresh-dependencies

10. mysql

解决 ERROR 1698 (28000): Access denied for user ‘root’@’localhost’. 问题

# 命令行登录mysql
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'insert_password';

CentOS7安装mysql后,启动时候,mysql会为root用户通过localhost访问生成一个默认的密码,通过以下命令查看

[root@localhost mysql]# grep 'temporary password' /var/log/mysqld.log
2021-10-11T10:59:34.243366Z 1 [Note] A temporary password is generated for root@localhost: Yq6!44NWldtF

mysql忘记密码,在配置文件中以下位置添加skip-grant-tables字段,会跳过mysql的鉴权机制,重启mysqld服务后,可以不使用密码进行登录。该方法仅适用于忘记密码使用,存在安全风险。生产环境不可这样配置。

[mysqld] 

skip-grant-tables

# 创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';

11. 其他

slow http attack使用

项目源码url:https://github.com/shekyan/slowhttptest
测试发现springboot内置的tomcat默认配置可以支持2000多个连接,然后就开始拒绝服务

# 攻击命令:
slowhttptest -H -c 10000 -u http://192.168.1.10:8080/api/v1/doCommand.do
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值