一些学习中的随笔小记(三)
每篇记录20个零碎的知识点。
查看windows激活信息
slmgr.vbs -xpr
不带参数显示如下:
grep过滤空白行和注释行
1、过滤空白行
cat filename | grep -v '^$'
2、过滤注释行
cat filename | grep -v '^#'
3、同时过滤空白行与注释行
cat filename | grep -v '^$' | grep -v '^#'
或者使用
cat filename | grep -Ev '^#|^$'
linux下kill tty
Linux下可以通过w命令或who命令查看当前登录的所有主机的pts信息,而非正常退出时,有时候pts并不会释放,这就会占用/dev/tty资源。如何将这种非正常退出的进程kill掉呢?当然,我们可以通过ps auxf指令进行查看,再获取相应的进程信息后,再kill掉进程。同样也可以也可以使用pkill直接进行查杀。
$ w
14:57:48 up 10 days, 4:03, 3 users, load average: 0.11, 0.11, 0.21
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user1 pts/0 1xx.1xx.xx.xx 14:57 1.00s 0.4s 0.02s w
user2 pts/1 1xx.1xx.xx.xx 09:22 1.00s 0.6s 0.02s -zsh
user3 pts/2 1xx.1xx.xx.xx 06:19 1.00s 0.13s 0.02s -zsh
直接pkill 指定的tty。
pkill -9 -t pts/0
使用yum提示Error: rpmdb open failed
在centos系统上,在使用yum命令安装软件包时候报错:
rpmdb: Thread/process 6539/140448388269824 failed: Thread died in Berkeley DB library
error: db3 error(-30974) from dbenv->failchk: DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db3 – (-30974)
error: cannot open Packages database in /var/lib/rpm
原因是RPM数据库被破坏
重建数据库后恢复正常:
cd /var/lib/rpm/
for i in ls | grep 'db.'
;do mv $i $i.bak;done
rpm –rebuilddb
yum clean all
linux grep查看指定内容上下几行
linux系统中,可以利用grep查看指定的内容,
比如:grep “123” test.log //查看test.log中包含123字符的日志
如果想查看指定内容上下几行,可以用参考下面的用法:
$grep -10 ‘123’ test.log//打印匹配行的前后10行
或
$grep -C 10 ‘123’ test.log//打印匹配行的前后10行
或
$ grep -A 10 -B 10 ‘123’ test.log //打印匹配行的前后10行
$grep -A 10 ‘123’ test.log //打印匹配行的后10行
$grep -B 10 ‘123’ test.log//打印匹配行的前10行
其他例子:
//显示既匹配 ‘123’又匹配 ‘456’的行
grep ‘123’ test.log| grep ‘456’
//搜索test.log中满足123的内容的行号
grep -n ‘123’ test.log
//查看test.log指定行号后的内容,比如50行
tail -n +50 test.log
//查看test.log的第50行到100行
sed -n ‘50,100p’ test.log#记得p字母
linux下显示dd命令的进度
sudo dd if=/dev/zero of=/tmp/zero.img status=progress
linux下显示dd命令的进度:
dd if=/dev/zero of=/tmp/zero.img bs=10M count=100000
想要查看上面的dd命令的执行进度,可以使用下面几种方法:
比如:每5秒输出dd的进度
方法一:
watch -n 5 pkill -USR1 ^dd$
方法二:
watch -n 5 killall -USR1 dd
方法三:
while killall -USR1 dd; do sleep 5; done
方法四:
while (ps auxww |grep ” dd ” |grep -v grep |awk ‘{print $2}’ |while read pid; do kill -USR1 $pid; done) ; do sleep 5; done
上述四种方法中使用三个命令:pkill、killall、kill向dd命令发送SIGUSR1信息,dd命令进程接收到信号之后就打印出自己当前的进度。
USR1信号 解释
USR1亦通常被用来告知应用程序重载配置文件;例如,向Apache HTTP服务器发送一个USR1信号将导致以下步骤的发生:停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。
kill -HUP pid 或者 killall -HUP pName:
其中pid是进程标识,pName是进程的名称
如果想要更改配置而不需停止并重新启动服务,可以使用上面两个命令。在对配置文件作必要的更改后,发出该命令以动态更新服务配置。
根据约定,当你发送一个挂起信号(信号1或HUP)时,大多数服务器进程(所有常用的进程)都会进行复位操作并重新加载它们的配置文件。
在一些更现代的 dd
版本(如 GNU coreutils 的 dd
8.24 及以后版本)中,有一个 status=progress
选项可以显示 dd
的进度。例如:
dd if=/path/to/input of=/path/to/output status=progress
linux非交互式修改密码
# chpasswd命令使用起来很简洁 [root@host_221-81 ~]# echo "qa:1234" | chpasswd # 使用passwd命令,也可以实现非交互式修改密码 [root@host_221-81 ~]# echo "1234" | passwd --stdin "qa" Changing password for user qa. passwd: all authentication tokens updated successfully.
yum安装报错Error:Nothing to do
报错信息
No package nginx available
Error:Nothing to do
解决办法 :方法一、更换源,备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
获取对应版本的CentOS-Base.repo 到/etc/yum.repos.d/目录
各版本源配置列表
CentOS5
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos5_base.repo
CentOS6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos6_base.repo
CentOS7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
CentOS8
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos8_base.repo
更新缓存
yum clean all yum makecache
方法二、用EPEL方式安装nginx:
sudo yum install epel-release
yum update
yum install nginx
yum install 与 yum groupinstall 的区别
yum 提供二种安装软件的方式
1,yum install 它安装单个软件,以及这个软件的依赖关系
2,yum groupinstall 它安装一个安装包,这个安装包包涵了很多单个软件,以及单个软件的依赖关系。
举例说明一下。
我想装mysql
yum install mysql 或者 yum groupinstall “MySQL Database” 这二个都是可以安装mysql的
[root@tank ~]# yum groupinfo "MySQL Database" Loading "security" plugin Loading "rhnplugin" plugin Setting up Group Process rhel-x86_64-server-5 100% |=========================| 1.4 kB 00:00 Group: MySQL Database Description: This package group contains packages useful for use with MySQL. Mandatory Packages: mysql Default Packages: unixODBC mysql-server MySQL-python mysql-connector-odbc libdbi-dbd-mysql perl-DBD-MySQL Optional Packages: mod_auth_mysql mysql-devel qt-MySQL mysql-bench php-mysql
如果想查看单个软件的安装,yum info 软件名,在这里yum info mysql
MySQL Database这个安装包里面包括了mysql,mysql-server,mysql-bench等等,安装这个包,不光安装了mysql,还安装了mysql的一些工具。如果是用yum install mysql来安装mysql的话,只是安装了MySQL Database这个包里面的mysql部分。
使用低版本DockerFile构建镜像时报错“Error parsing reference: “xxx AS base” is not a valid repository/tag: invalid reference format”
运行dockerfile时报出的错误
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base Error parsing reference: "microsoft/dotnet:2.2-aspnetcore-runtime AS base" is not a valid repository/tag: invalid reference format
这个问题一般是由docker的版本错误导致的FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
,使用docker的新特性multi-stage build,该特性要求docker 17.05或更高版本。
我使用的服务器版本是centos 7.5 ,默认安装docker安装的docker 1.13.1版本
下面将docker更新到最新版本,删除已安装的docker版本 。
yum -y remove docker*
(不删除 /var/lib/docker 目录 就不会删除已安装的镜像及容器)
安装国内阿里云镜像yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装最新版本的dockeryum install docker-ce
如果重启容器时发生错误 Unknown runtime specified docker-runc
运行如下指令解决
grep -rl 'docker-runc' /var/lib/docker/containers/ | xargs sed -i 's/docker-runc/runc/g' systemctl restart docker
gnutls_handshake() failed: Error in the push function 关于git报错的解决办法
git clone 的时候遇到这样的报错。
root@VM-8-15-ubuntu:/code/python# git clone https://github.com/dfir-iris/iris-web.git Cloning into 'iris-web'... fatal: unable to access 'https://github.com/dfir-iris/iris-web.git/': gnutls_handshake() failed: Error in the push function.
执行以下命令即可解决。
sudo apt-get install libcurl4-openssl-dev sudo apt-get update sudo apt-get install build-essential fakeroot dpkg-dev libcurl4-openssl-dev
lsof: no pwd entry for UID xx 报错分析
root@VM-8-15-ubuntu:~# lsof 2>&1 | head -n 3 lsof: no pwd entry for UID 999 lsof: no pwd entry for UID 999 lsof: no pwd entry for UID 999
出现大量‘lsof: no pwd entry for UID 999’的情况,主要有两个原因:
- 进程在用户被删除之前启动,并且从那以后一直在运行;
- 进程在容器内被启动(该UID为容器内的用户ID)
如何分析呢?
root@VM-8-15-ubuntu:~# ps -ef | awk '$1==999{print $0}' 999 2238 11289 0 2021 ? 00:00:00 redis-rdb-bgsave *:6379 999 11289 11261 0 2021 ? 01:45:07 redis-server *:6379 999 19669 19636 0 Mar25 ? 00:03:19 mysqld root@VM-8-15-ubuntu:~# ps -ef | awk '$1==999{print $3}' | xargs -I % strings /proc/%/cmdline redis-server *:6379 /usr/bin/containerd-shim-runc-v2 -namespace moby f33fd58f2967e4b1c256cd0093426d1f3fbf8f265798f8a70812d8deed813e8f -address /var/run/docker/containerd/containerd.sock /usr/bin/containerd-shim-runc-v2 -namespace moby bfcb373742b34bfed83aa1944fd0af02d262a61a81b09edf04185ec4db021902 -address /run/containerd/containerd.sock root@VM-8-15-ubuntu:~#
我们查看父进程的cmdline可以看到是docker的进程。
ln -s 软链接产生Too many levels of symbolic links错误
今天调用Nginx的时候发现找不到,ls报错提示Too many levels of symbolic links。
这个软链接指向的是相对路径。一定要改为绝对路径!!!
重新建立软链接即可。
Debian下iptables规则重启失效问题的解决方法
Debian系统默认不会保存iptables规则,重启后所有设置过的iptables会失效。解决方法是:设置好iptables规则后,使用iptables-save保存规则到文件;然后设置开机时使用iptables-restore导入这个文件。
具体执行命令:
touch /etc/network/if-pre-up.d/iptables
chmod +x /etc/network/if-pre-up.d/iptables
然后编辑这个文件:vi /etc/network/if-pre-up.d/iptables
输入以下内容:
#!/bin/sh
/sbin/iptables-restore < /etc/iptables
然后,配置iptables规则。
iptables -t nat -A POSTROUTING -s ‘10.20.20.20/24’ -o vmbr0 -j MASQUERADE
iptables -t nat -A PREROUTING -i vmbr0 -p tcp –dport 7894 -j DNAT –to 10.20.20.100:3389
配置完毕后,把规则保存到文件:iptables-save > /etc/iptables
这样设置,重启系统iptables规则就不会再失效了。
将CHM文件翻译成中文
hh.exe是微软windows系统程序,.chm扩展名的帮助文件默认是用hh.exe打开。
CHM文件是Windows的一种帮助文件格式, 它主要是由.html 转换制作出来的,有时我们需要将.CHM文件反向转换成 .html 格式文件,即chm to html。我们可以利用Windows自带的hh.exe文件来进行文件格式转换。
转换语法为:hh -decompile 目标文件夹 源CHM文件名。
比如想要在阅读logparser的chm文档时进行翻译。
hh.exe -decompile ./README ./LogParser.chm
浏览器打开,翻译即可。
grep匹配两个字符串之间的字符
grep -P的使用。
Interpret PATTERN as a Perl regular expression. This is highly experimental and grep -P may warn of nimplemented features.
-P, –perl-regexp
这意思是,-P 可以让grep使用perl的正则表达式语法,因为perl的正则更加多元化,能实现更加复杂的场景。
最典型的用法是,匹配指定字符串之间的字符。 比如,我们想在一句话(Hello,my name is aming.)中匹配中间的一段字符串(my name is) 可以这样写正则表达式。
[root@allen1 ~]# echo "Hello, my name is aming."|grep -P '(?<=Hello, ).*(?= aming.)' Hello, my name is aming.
?<=字符串1:表示只匹配字符串1后面的内容
?= 字符串2:表示只匹配字符串2前面的内容
如果只需要匹配到的部分,还可以加上-o选项
[root@allen1 ~]# echo "Hello, my name is aming."|grep -Po '(?<=Hello, ).*(?= aming.)' my name is
根据这个思路,我们可以去匹配IP地址
centos6:ifconfig eth0 |grep -Po ‘(?<=addr:).*(?= Bcast)’
centos7: ifconfig ens33 |grep -Po ‘(?<=inet ).*(?= netmask)’
[root@allen1 ~]# ifconfig ens33 |grep -Po '(?<=inet ).*(?= netmask)' 192.168.197.128
安装telnet服务端并允许root用户登录
yum -y install telnet* xinetd systemctl start telnet.socket systemctl start xinetd
1、开启telnet在终端中输入 vi /etc/xinetd.d/telnet 打开文件后,将里面的disable=yes行前面加上#注释掉,保存退出,重新启动 xinetd服务 /etc/rc.d/init.d/xinetd restart 就可以了。注意,由于安全考虑,telnet不允许root用户直接登录,需要您先建立一个普通用户,使用这个用户登录,再转换到root用户:su root。
2、配置允许root用户登录:允许root用户登录是很不安全的,但是有时候为了测试的方便,也可以允许root用户登录,但是这个方法最好不要对公网开放使用。 (1)vi /etc/pam.d/login 将文件中的 pam_securetty.so行,加上“#”注释掉;重启telnet看是否可以以root用户登录telnet,如果可以跳过(2),不可以执行(2);(2)查看log信息:tail /var/log/securetail /var/log/secureMar 17 02:16:55 localhost login: pam_securetty(remote:auth): access denied: tty ‘pts/3’ is not secure !
Mar 17 02:16:59 localhost login: FAILED LOGIN 1 FROM 192.168.160.1 FOR root, Authentication failure
根据“tty’pts3′ is not secure”的提示。添加 pts/ 系列终端到 /etc/securetty pts/1
pts/2
pts/3 //增加这个是增加使用root登陆的个数
pts/4
pts/5
//也不知道有多少可以加,不能登陆就看log,如果不够再加好了。此时,再重启telnet,便可以以root用户登录telnet服务器了。3. 我们不建议你允许root用户通过telnet方式远程登录,而且系统缺省也是不允许这样做的。如果希望以root的身份远程管理服务器,可以在服务器上安装SSHD,然后通过 Secure Shell连接到服务器。
目前较新的linux发行版都自带名为OpenSSH的SSH服务器,通过
/etc/rc.d/init.d/sshd start即可启动SSH服务器。客户端通过SSH客户端即可连接到服务器。telnet服务重启
[root@rhel52 /]# service xinetd restart Stopping
xinetd: [ OK ]
Starting xinetd: [ OK ]
shell随机生成 IP 地址
使用dd生成随机ip
dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -An -tu1 | xargs |sed 's/ /./g'
od -An -tu1,-An防止打印地址,-tu1将输入作为一字节无符号整数。
-A, –address-radix=RADIX
文件偏移量的输出格式;RADIX是[doxn]之一,表示十进制、八进制、十六进制或无。
-t, –format=TYPE
TYPE是由这些规格中的一个或多个组成。
u[SIZE] 无符号十进制,SIZE字节/整数
生成ip如下:
root@VM-8-15-ubuntu:~# dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -An -tu1 | xargs |sed 's/ /./g' 30.146.167.159 root@VM-8-15-ubuntu:~# dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -An -tu1 | xargs |sed 's/ /./g' 17.61.46.18 root@VM-8-15-ubuntu:~# dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -An -tu1 | xargs |sed 's/ /./g' 9.184.22.215 root@VM-8-15-ubuntu:~# dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -An -tu1 | xargs |sed 's/ /./g' 187.189.145.98 root@VM-8-15-ubuntu:~# dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -An -tu1 | xargs |sed 's/ /./g' 41.33.12.143
使用nmap生成随机ip
nmap -n -iR 10 -sL | awk '/report for/ { print $NF }'
root@VM-8-15-ubuntu:~# nmap -n -iR 10 -sL | awk '/report for/ { print $NF }' 83.251.27.17 82.242.157.237 34.139.154.159 67.78.145.180 187.70.234.250 143.203.74.252 55.80.23.114 58.105.16.154 29.249.197.42 18.38.251.22
在页面中使用iframe标签
<iframe src="https://zgao.top/tools/reverse/" frameborder="0" width="1200" height="1100" scrolling="no"></iframe>
docker删除未使用的image镜像
docker 使用时间长了,就会有大量未使用但占用大量空间的镜像。
docker image prune
通过该命令清理未被容器使用的镜像。
赞赏微信赞赏支付宝赞赏
发表评论