Shell笔记——系统管理
安装w3m提示找不到软件包
1 2 | # 先执行以下代码,然后重新执行安装命令 sudo yum install -y epel-release |
释放系统缓存 来源
1 2 | sync echo 3 > /proc/sys/vm/drop_caches |
记录文件及目录访问
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 安装工具 sudo yum install inotify-tools.x86_64 nohup inotifywait -m -r -e access,create,move,delete /home/vince --timefmt '%d/%m/%H:%M' -- format '%T %w %f %e' & <<COMMENT 输出 Setting up watches. Beware: since -r was given, this may take a while ! Watches established. 09 /08/10 :41 /home/aurora/ ACCESS,ISDIR 09 /08/10 :41 /home/aurora/ ACCESS,ISDIR 09 /08/10 :41 /home/aurora/ sas CREATE 09 /08/10 :41 /home/aurora/ ACCESS,ISDIR 09 /08/10 :41 /home/aurora/ ACCESS,ISDIR 09 /08/10 :41 /home/aurora/ ACCESS,ISDIR 09 /08/10 :41 /home/aurora/ ACCESS,ISDIR 09 /08/10 :41 /home/aurora/ ACCESS,ISDIR 09 /08/10 :41 /home/aurora/ sas DELETE COMMENT |
终止掉正在连接的某个用户
1 | sudo pkill - kill -t pts /0 |
pam登陆次数过多限制
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 远程ssh,第一行添加 /etc/pam .d /sshd # 终端,第一行添加 /etc/pam .d /login auth required pam_tally2.so deny=3 unlock_time=600 even_deny_root root_unlock_time=1200 # 查看用户错误登陆次数,使用pam_tally2 pam_tally --user tom pam_tally2 --user tom # 重置用户错误登陆次数 pam_tally2 --user tom --reset |
收集登录用户信息
1 2 3 4 5 | # 列出当前登录主机的用户列表 users # 查看系统运行了多长时间 uptime |
watch 监视命令输出
1 2 3 4 | # 默认间隔时间2秒 watch 'ls' watch -n 5 'ls -l' |
查看某个命令包含在哪个包下
1 2 3 | yum provides * /nslookup apt search ifconfig |
向终端中所有的当前登录用户发送广播消息
1 2 3 4 5 6 7 | cat message | wall # 向指定用户发送消息 write hz pts /1 Hello world! # 目录/dev/pts中包含着与每一位系统终端中登录用户所对应的字符设备 |
logrotate 管理日志文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # logrotate 的配置目录位于/etc/logrotate.d # 为自己的日志文件(比如/var/log/program.log)编写一个特定的配置 $ cat /etc/logrotate .d /program /var/log/program .log { missingok notifempty size 30k compress weekly rotate 5 create 0600 root root } # logger命令默认把日志输出到/var/log/message中 # logger This is a test log line |
电源监视工具 powertop (需要安装)
1 2 3 4 5 | # 查看电量使用情况 powertop # 生成html报表 powertop --html |
检查磁盘及文件系统错误
1 | fsck /dev/sdb3 |
rsync 备份系统快照
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | rsync - a fast, versatile, remote (and local ) file -copying tool # 将源目录复制到目的端 rsync -avz /home/slynux/data slynux@192.168.0.6: /home/backups/data # -a 归档模式 # -v 显示进度,详细内容 # -z 传输时压缩文件 # 在更新 rsync 备份时,删除不存在的文件(默认情况下, rsync 并不会在目的端删除那些在源端已不存在的文件) rsync -avz SOURCE DESTINATION --delete # 定期进行备份(10小时备份一次) crontab -e 0 * /10 * * * rsync -avz /home/code user@IP_ADDRESS: /home/backups |
弹出光盘,eject命令
1 2 3 4 5 | # 弹出光盘 eject # 合上光盘 eject -t |
录制终端
1 2 3 4 5 | # 录制(record) script -t 2> timing.log -a output.session # 回放(replay) scriptreplay timing.log output.session |
配置免验证登录
1 # ssh-keygen -t rsa 2 ssh-keygen 3 # 修改授权文件权限 chmod 600 authorized_keys 4 5 # 日志文件 6 /var/log/secure
配置登录提示字符
1 | vim /etc/motd |
/proc目录
1 2 3 4 | # /proc 是一个在内存中的伪文件系统(pseudo filesystem)。在运行时访问内核内部数据结构、改变内核设置的机制。 # 它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。 # 在/proc下还有三个很重要的目录:net,scsi和sys。 # 系统中每一个运行的进程在 /proc 中都有一个对应的目录。目录名和进程ID相同。 |
脚本 : 监测目录变动 watchdir.sh
1 2 3 4 5 6 | #!/bin/bash # 文件名: watchdir.sh # 用途: 监视目录访问,安装inotify-tools path=$1 # 将目录或文件路径作为脚本参数 inotifywait -m -r -e access,create,move,delete $path |
脚本 : 检测入侵者 intruder_detect.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #!/bin/bash #文件名:intruder_detect.sh #用途:入侵报告工具,以auth.log作为日志文件 AUTHLOG= /var/log/auth .log if [[ -n $1 ]]; then AUTHLOG=$1 echo Using Log file : $AUTHLOG fi LOG= /tmp/valid .$$.log grep - v "invalid" $AUTHLOG > $LOG users =$( grep "Failed password" $LOG | awk '{ print $(NF-5) }' | sort | uniq ) printf "%-5s|%-10s|%-10s|%-13s|%-33s|%s\n" "Sr#" "User" "Attempts" "IP address" "Host_Mapping" "Time range" ucount=0; ip_list= "$(egrep -o " [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+ " $LOG | sort | uniq)" for ip in $ip_list; do grep $ip $LOG > /tmp/temp .$$.log for user in $ users ; do grep $user /tmp/temp .$$.log> /tmp/ $$.log cut -c-16 /tmp/ $$.log > $$. time tstart=$( head -1 $$. time ); start=$( date -d "$tstart" "+%s" ); tend=$( tail -1 $$. time ); end=$( date -d "$tend" "+%s" ) limit=$(( $end - $start )) if [ $limit -gt 120 ]; then let ucount++; IP=$( egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" /tmp/ $$.log | head -1 ); TIME_RANGE= "$tstart-->$tend" ATTEMPTS=$( cat /tmp/ $$.log| wc -l); HOST=$(host $IP | awk '{ print $NF }' ) printf "%-5s|%-10s|%-10s|%-10s|%-33s|%-s\n" "$ucount" "$user" "$ATTEMPTS" "$IP" "$HOST" "$TIME_RANGE" ; fi done done rm /tmp/valid .$$.log /tmp/ $$.log $$. time /tmp/temp .$$.log 2> /dev/null |
脚本 : 找出系统中用户的活跃时段 active_users.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #!/bin/bash #用户名: active_users.sh #用途:查找活跃用户 log= /var/log/wtmp if [[ -n $1 ]]; then log=$1 fi printf "%-4s %-10s %-10s %-6s %-8s\n" "Rank" "User" "Start" "Logins" "Usage hours" last -f $log | head -n -2 > /tmp/ulog .$$ cat /tmp/ulog .$$ | cut -d ' ' -f1 | sort | uniq > /tmp/users .$$ ( while read user; do grep ^$user /tmp/ulog .$$ > /tmp/user .$$ minutes=0 while read t do s=$( echo $t | awk -F: '{ print ($1 * 60) + $2 }' ) let minutes=minutes+s done < <( cat /tmp/user .$$ | awk '{ print $NF }' | tr -d ')(' ) firstlog=$( tail -n 1 /tmp/user .$$ | awk '{ print $5,$6 }' ) nlogins=$( cat /tmp/user .$$ | wc -l) hours=$( echo "$minutes / 60.0" | bc ) printf "%-10s %-10s %-6s %-8s\n" $user "$firstlog" $nlogins $hours done < /tmp/users .$$ ) | sort -nrk 4 | awk '{ printf("%-4s %s\n", NR, $0) }' rm /tmp/users .$$ /tmp/user .$$ /tmp/ulog .$$ |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话