在linux shell 命令行循环执行一些命令的方法
# for i in {20200601..20200624} ; do ./yiic statvisitors stat --date=$i; done;
# for i in {20200601..20200624} ; do ./yiic statvisitors stat --date=$i; done;
首页你必需拿到主机(就是在主机上操作,不是远程连接上可以操作的)
很多时候我们都会忘记Linux root 用户的口令,下面就教大家如果忘记root口令怎么办
第1步:开机后在启动菜单上定位到系统所启动的选项上,按“e”进入编辑。
第2步:在linux16这行按END键在后面输入“ rd.break console=tty0”,然后按“ctrl+x“,进入到了系统的紧急求援模式
第3步:依次输入以下命令:
#mount –o remount,rw /sysroot
#chroot /sysroot
#passwd
输入新的root密码,2次确认,然后继续
#touch /.autorelabel
#exit
#exitroot
输完以后,系统会重启,输入我们刚才配置的密码登录就行
至此,密码破解完毕
那么怎么来预防别人通过这种方式来破密呢,就是给系统加上第二首锁:
使用 grub2-mkpasswd-pbkdf2 命令生成hash密码
编辑文件/etc/grub.d/文件夹下任意文件,通常编辑10_linux
在末尾添加如下几行:
cat <<EOF
set superusers="admin"
password_pbkdf2 admin xxxxxxxxxx
EOF
xxxxxx就是hash密码,或者用文明密码就是换成
password admin 123456这样
更新grub配置后并重启
#grub2-mkconfig -o /boot/grub2/grub.cfg
#reboot
当你重启过后想输入e编辑启动脚本时,要求认证输入上方的用户名admin和密码123456,才能进入,没错我们再上一把锁,不过有时候也许会坑自己,除非你的确需要这样做
不过这样做了,也有第三招来破密,这里就不写了
方法 1 – 使用反斜杠:command
输入以下命令暂时绕过名为 mount 的 bash 别名:mount
方法 2 – 使用引号: “command” 或 ‘command’
如下引用 mount 命令调用实际的 /bin/mount:”mount”
这里单引号和双引号都可以。
方法 3 – 使用命令的完全路径
使用完整的二进制路径,如 /bin/mount:
方法 4 – 使用内部命令 command
就是在执行的命令前加上 command 命令,样例如下:
command cmd
command cmd arg1 arg2
要绕过 .bash_aliases 中设置的别名,例如 mount:
command mount
command mount /dev/sdc /mnt/pendrive/
“command” 直接运行命令或显示关于命令的信息。它带参数运行命令,会阻止 shell 函数查询或者别名,或者显示有关给定命令的信息。
方法 5 – 使用 unalias 命令的说明
要从当前会话的已定义别名列表中移除别名,请使用 unalias 命令:
unalias mount
要从当前 bash 会话中删除所有别名定义:
unalias -a
如果要永久删除定义的别名,则必须删除别名的定义语句,确保你更新你的 ~/.bashrc 或 $HOME/.bash_aliases :
vi ~/.bashrc #或者执行 vi $HOME/.bash_aliases
想了解更多信息,参考这里的在线手册,或者输入下面的命令查看:
man bash
help command
help unalias
help alias
服务器负载过高(卡死)
#查看80端口连接数最多的20个IP
netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20
查看并发数
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
前面的 netstat -n是netstat的命令,window和linux都可以用,结果显示内容差不多
后面的 awk'/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 是linux下的命令,主要作用是对netstat输出的结果进行过滤和处理
运行这一句之后,显示的结果类似如下:
TIME_WAIT 27
FIN_WAIT1 435
FIN_WAIT2 89
ESTABLISHED 82
SYN_RECV 64
CLOSING 4
LAST_ACK 90
这些结果代表啥意思呢?如下:
TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:从远程TCP等待连接中断请求
ESTABLISHED:代表一个打开的连接
SYN-RECV:再收到和发送一个连接请求后等待对方对连接请求的确认
SYN-SENT:再发送连接请求后等待匹配的连接请求
CLOSING:等待远程TCP对连接中断的确认
CLOSED:没有任何连接状态
CLOSE-WAIT:等待从本地用户发来的连接中断请求
LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
LISTEN:侦听来自远方的TCP端口的连接请求
#列出php-fpm进程,按内存排序
ps -ylC php-fpm --sort:rss
#列出所有用户的进程
ps aux | grep php-fpm
Linux上进程有5种状态:
进程状态 含义 对应ps命令的状态码
运行 正在运行或在运行队列中等待 R 运行 runnable (on run queue)
中断 休眠中, 受阻, 在等待某个条件的形成或接受到信号 S 中断 sleeping
不可中断 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生 D 不可中断 uninterruptible sleep (usually IO)
僵死 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放 Z 僵死 a defunct (”zombie”) process
停止 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行 T 停止 traced or stopped
ps命令有很多参数,具体如下:
命令 含义
e 显示所有进程,环境变量
f 全格式
h 不显示标题
l 长格式
w 宽输出
a 显示终端上地所有进程,包括其他用户地进程
r 只显示正在运行地进程
x 显示没有控制终端地进程
u 以用户为主的格式来显示程序状况
au 显示较详细的资讯
aux 显示所有包含其他使用者的行程
-C<命令> 列出指定命令的状况
--lines<行数> 每页显示的行数
--width<字符数> 每页显示的字符数
--help 显示帮助信息
--version 显示版本显示
其中STAT状态位常见的状态字符有
D //无法中断的休眠状态(通常 IO 的进程);
R //正在运行可中在队列中可过行的;
S //处于休眠状态;
T //停止或被追踪;
W //进入内存交换 (从内核2.6开始无效);
X //死掉的进程 (基本很少见);
Z //僵尸进程;
< //优先级高的进程
N //优先级较低的进程
L //有些页被锁进内存;
s //进程的领导者(在它之下有子进程);
l //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads);
+ //位于后台的进程组;