Linux-Note

Table of Contents

top命令

top - 11:36:14 up 634 days, 20:57,  4 users,  load average: 0.42, 0.46, 0.50
Tasks: 135 total,   1 running, 134 sleeping,   0 stopped,   0 zombie
%Cpu(s): 13.9 us,  0.6 sy,  0.2 ni, 85.3 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 15992076 total,  4754876 free,  3735156 used,  7502044 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 11840112 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
18347 tomcat    20   0 7958108 1.837g  17108 S  47.2 12.0  15:05.22 java
31937 root      10 -10  153328  23968  10456 S   1.0  0.1   1186:51 AliYunDunMonito
 9381 root      20   0 32.657g  49144  19472 S   0.7  0.3 993:09.77 chrome
25847 root      20   0 4286188 413964  14200 S   0.7  2.6 456:50.72 java

以下是对这段输出内容的解释:

一、系统整体状态

  1. `top - 11:36:14 up 634 days, 20:57, 4 users, load average: 0.42, 0.46, 0.50`:
    • 显示当前时间是 11:36:14。
    • 系统已经运行了 634 天 20 小时 57 分钟。
    • 目前有 4 个用户登录到系统。
    • 系统负载平均值分别为最近 1 分钟、5 分钟和 15 分钟的负载情况,这里分别是 0.42、0.46 和 0.50。负载平均值表示系统在一段时间内的平均任务队列长度,数值越高表示系统负载越重。

二、任务状态

  1. `Tasks: 135 total, 1 running, 134 sleeping, 0 stopped, 0 zombie`:
    • 系统中总共有 135 个任务。
    • 其中 1 个任务正在运行。
    • 134 个任务处于睡眠状态(等待事件发生)。
    • 0 个任务已停止。
    • 0 个任务处于僵尸状态(已结束但父进程未回收资源)。

三、CPU 使用情况

  1. `%Cpu(s): 13.9 us, 0.6 sy, 0.2 ni, 85.3 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st`:
    • `us`:用户空间占用 CPU 的百分比为 13.9%。表示用户进程所占用的 CPU 时间比例。
    • `sy`:内核空间占用 CPU 的百分比为 0.6%。表示系统内核进程所占用的 CPU 时间比例。
    • `ni`:低优先级用户进程占用 CPU 的百分比为 0.2%。表示调整过优先级的用户进程所占用的 CPU 时间比例。
    • `id`:空闲状态的 CPU 百分比为 85.3%。表示 CPU 处于空闲状态,没有任何任务在运行的时间比例。
    • `wa`:等待 I/O 完成所占用 CPU 的百分比为 0.1%。表示由于等待输入/输出操作完成而导致的 CPU 空闲时间比例。
    • `hi`:硬件中断占用 CPU 的百分比为 0.0%。表示硬件中断处理所占用的 CPU 时间比例。
    • `si`:软件中断占用 CPU 的百分比为 0.0%。表示软件中断处理所占用的 CPU 时间比例。
    • `st`:被虚拟化管理程序(如 KVM)偷走的 CPU 时间百分比为 0.0%。表示在虚拟化环境中,虚拟机监控程序占用的 CPU 时间比例。

四、内存使用情况

  1. `KiB Mem : 15992076 total, 4754876 free, 3735156 used, 7502044 buff/cache`:
    • 系统总内存为 15992076 KiB(千字节)。
    • 目前有 4754876 KiB 内存空闲。
    • 已使用的内存为 3735156 KiB。
    • 用于缓冲区(buff)和缓存(cache)的内存为 7502044 KiB。缓冲区和缓存可以提高系统的 I/O 性能,当内存不足时,它们可以被释放供其他进程使用。
  2. `KiB Swap: 0 total, 0 free, 0 used. 11840112 avail Mem`:
    • 交换分区总大小为 0 KiB。
    • 目前交换分区空闲大小为 0 KiB。
    • 已使用的交换分区大小为 0 KiB。
    • 可用内存大小为 11840112 KiB。

五、进程列表

  1. `PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND`:
    • `PID`:进程 ID。
    • `USER`:进程所有者的用户名。
    • `PR`:进程优先级。
    • `NI`:进程的 nice 值,用于调整进程的优先级。
    • `VIRT`:进程使用的虚拟内存大小(以 KiB 为单位)。
    • `RES`:进程使用的物理内存大小(以 KiB 为单位)。
    • `SHR`:进程共享内存大小(以 KiB 为单位)。
    • `S`:进程状态,如 `R`(运行中)、`S`(睡眠中)、`Z`(僵尸状态)等。
    • `%CPU`:进程占用 CPU 的百分比。
    • `%MEM`:进程占用内存的百分比。
    • `TIME+`:进程累计使用的 CPU 时间。
    • `COMMAND`:启动进程的命令名称。

例如:

  • `18347 tomcat 20 0 7958108 1.837g 17108 S 47.2 12.0 15:05.22 java`:表示进程 ID 为 18347,所有者是 `tomcat` 用户,优先级为 20,nice 值为 0,使用虚拟内存 7958108 KiB,物理内存 1.837GB(1.837g 表示 1.837 * 1024 * 1024 KiB),共享内存 17108 KiB,状态为睡眠中(S),占用 CPU 47.2%,占用内存 12.0%,累计使用 CPU 时间为 15 分钟 5.22 秒,启动命令为 `java`。

linux 查看终端是bash,还是zsh

  • echo $SHELL

下载b站视频-高清

  • annie高清
  • 下载annie brew install annie
  • annie -c bilicookie.txt -f {{url}}
  • annie -c bilicookie.txt -f 80 {{url}}
  • bilicookie.txt 存放的是登录b站的cookie
  • -f 查看可以下载的清晰度,若无cookie,最高可以下载的清晰度只有480P

查看本机ip

# 公网ip
curl ifconfig.me

# 本机ip
ifconfig
# 或者
hostname -I

iTerm2 app 关闭右侧滑动条

  1. 打开 iTerm2。
  2. 进入 Preferences(偏好设置),可以通过菜单栏中的 iTerm2 → Preferences,或者使用快捷键 `Command` + `,`。
  3. 在 Preferences 窗口中,选择 Appearance(外观)标签页。
  4. 在 Appearance 下的 Window 区域,找到滚动条相关的设置。
  5. 取消勾选 “Show scrollbars”(显示滚动条)选项。

traceroute

traceroute www.example.com
  • 其输出会显示数据包经过的每个路由器的 IP 地址和往返时间等信息。

ufw

  • Ubuntu 18.04 LTS 默认的防火墙是 ufw(Uncomplicated Firewall)。
sudo ufw status
sudo ufw enable && sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443

# 对内暴露 8080 端口:
sudo ufw allow in 8080

# 允许本机对外访问所有端口:
sudo ufw default allow outgoing

# 拒绝特定端口:
sudo ufw deny 8080

# UFW 防火墙将恢复到初始的默认状态
sudo ufw reset

nginx尾斜杠的坑

Q: nginx,配置:

location / {
        proxy_pass http://127.0.0.1:8888/;
}
访问:http:{domain}/mall-admin-abc,正常


location ^~ /mall-admin {
        proxy_pass http://127.0.0.1:8888/;
}
访问:http:{domain}/mall-admin-abc,404了

A:来自ChatGPT的回答:

这个问题的原因在于 proxy_pass 的使用,特别是当代理到不同的 URI 时。
对于第一个配置 location /,任何请求都会被代理到 http://127.0.0.1:8888/,并且请求的 URI 部分会被直接附加到代理服务器的地址后面。因此,http://{domain}/mall-admin-abc 实际请求的是 http://127.0.0.1:8888/mall-admin-abc,因此能够正常工作。
然而,对于第二个配置 location ^~ /mall-admin,使用了 proxy_pass 同样的语法 http://127.0.0.1:8888/;。问题在于,当使用 proxy_pass 与非根位置块(例如 location /something)时,如果 proxy_pass 指定的是带有尾随斜杠的地址,会导致请求的 URI 被映射至代理目标的根路径,而忽略了源请求中 URI 的匹配部分(即 /mall-admin)。
为了修复这个问题,您可以移除 proxy_pass 目标 URL 末尾的斜杠(如果您的目标目录结构不需要),任何匹配的 location 块的 URI 将会透传给代理地址。这样,http://{domain}/mall-admin-abc 请求会正确地代理到 http://127.0.0.1:8888/mall-admin-abc,以下是修正后的配置示例:
nginx

server {
    # ...其他配置可能存在...

    location ^~ /mall-admin {
        proxy_pass http://127.0.0.1:8888;
        # 确保不要在代理URL最后加斜杠

        # 其他代理配置如上面的示例...
    }

    # ...其他 location 配置...
}

确保在做出更改后,运行 nginx -t 命令测试配置文件的语法,然后使用 nginx -s reload 或者 service nginx reload(根据您的系统)来重载配置。这样应该能够解决您遇到的 404 问题。

Q:macOS Sonoma新增了一个功能——屏幕上的大写锁定指示器。有没有办法禁用它?

sudo mkdir -p /Library/Preferences/FeatureFlags/Domain
sudo /usr/libexec/PlistBuddy -c "Add 'redesigned_text_cursor:Enabled' bool false" /Library/Preferences/FeatureFlags/Domain/UIKit.plist

journalctl日志

//检查当前journal使用磁盘量
journalctl --disk-usage

// 清理方法可以采用按照日期清理,或者按照允许保留的容量清理
journalctl --vacuum-time=2d
journalctl --vacuum-size=500M

查看用户

  • cat /etc/passwd | cut -f 1 -d :

注:| 是管道,把cat的输出传给cut处理;后面的cut取出每一行的以:分割的第一栏

/etc/passwd 文件存放的是用户信息.由六个分号组成的7个信息,分别是:

  • 用户名 (magesh): 已创建用户的用户名,字符长度 1 个到 12 个字符。
  • 密码(x):代表加密密码保存在 `/etc/shadow 文件中。
  • 用户 ID(506):代表用户的 ID 号,每个用户都要有一个唯一的 ID 。UID 号为 0 的是为 root 用户保留的,UID 号 1 到 99 是为系统用户保留的,UID 号 100-999 是为系统账户和群组保留的。
  • 群组 ID (507):代表群组的 ID 号,每个群组都要有一个唯一的 GID ,保存在 /etc/group文件中。
  • 用户信息(2g Admin - Magesh M):代表描述字段,可以用来描述用户的信息(LCTT 译注:此处原文疑有误)。
  • 家目录(/home/mageshm):代表用户的家目录。
  • Shell(/bin/bash):代表用户使用的 shell 类型。
//查看用户
cat /etc/passwd
or
cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more
or
cat /etc/passwd | cut -f 1 -d :

//查看用户组
cat /etc/group

//查看当前活跃的用户列表
w

nmap

##自行设置端口范围进行扫描
nmap -p22,80,7771 192.168.34.90
nmap -p1-9999 192.168.34.90

Linux 关闭/开启密码登录(仅证书登录)

 vim /etc/ssh/sshd_config

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

#默认PasswordAuthentication 为yes,即允许密码登录,改为no后,禁止密码登录
PasswordAuthentication no

重启服务 service sshd restart

ssh生成公私钥:

  • ssh-keygen -t [rsa|dsa]
  • 根据提示起名(例子:ykyk),不输密码
  • 生成2个文件:ykyk 和 ykyk.pub
  • 将公钥考到对方机器的用户目录下 ,并将其复制到~/.ssh/authorized_keys中(操作命令:cat ykyk.pub >> ~/.ssh/authorized_keys )
  • 设置.ssh/ 目录的权限为==700==;
  • 设置authorized_keys权限为600;($ chmod 600 authorized_keys)

说明:

  1. 生成的rsa/dsa签名的公钥是给对方机器使用的。这个公钥内容还要拷贝到authorized_keys
  2. 某个机器生成自己的RSA或者DSA的数字签名,将公钥给目标机器,然后目标机器接收后设定相关权限(公钥和authorized_keys权限),这个目标机就能被生成数字签名的机器无密码访问了

ssh连接长时间不断开

  • 修改系统 ssh 端配置文件:
sudo vi /etc/ssh/ssh_config

ServerAliveInterval 30 //每隔 30 秒向服务器发送一个空数据包

bashrc 里 alias 加参数如何做?

alias ttt='test() { echo $1;}; test'

然后终端输入:ttt 33,就会输出 33

eg:
alias lg='log() { git lg -$1; echo -e "\n";}; log'

ss-server

ssh timeout

修改自己用户目录下的.bashrc 文件,加上

export TMOUT=1000000 (以秒为单位)

然后运行:

source ~/.bashrc

在/etc/ssh/sshd_config 中加入:

ClientAliveInterval=60

每一分钟,sshd 都和 ssh client 打个招呼,检测它是否存在,不存时即断开连接。

chmod,chown,chgrp

chown

chown [-R] 账号名称 文件或目录
chown [-R] 账号名称:用户组名称 文件或目录

示例 1:
[root@localhost home]# touch testfile //由 root 用户创建文件
[root@localhost home]# ls testfile –l
-rw--w--w- 1 root root 0 Jun 7 19:35 testfile //文件的拥有者及拥有者级均为 root
[root@localhost home]# chown yangzongde testfile //修改文件拥有者为 yangzongde
[root@localhost home]# ls testfile -l
-rw--w--w- 1 yangzongde root 0 Jun 7 19:35 testfile //查看文件拥有者为 yangzongde,但组仍为 root
示例 2:
chown bin install.log
ls -l
-rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log
chown root:root install.log
ls -l
-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

chgrp

chgrp [-R] 用户组名称 dirname/filename ...

示例 3
[root@localhost home]# ls testfile -l
-rw--w--w- 1 yangzongde root 0 Jun 7 19:35 testfile //查看文件拥有者为 yangzongde,但组为 root
[root@localhost home]# chgrp yangzongde testfile //修改拥有者组为 yangzongde
[root@localhost home]# ls testfile -l
-rw--w--w- 1 yangzongde yangzongde 0 Jun 7 19:35 testfile
[root@localhost home]# chown root:root testfile // 使用 chown 一次性修改拥有者及组
[root@localhost home]# ls testfile -l
-rw--w--w- 1 root root 0 Jun 7 19:35 testfile
示例 4
[root@linux ~]# chgrp users install.log
[root@linux ~]# ls -l
-rw-r--r--  1 root users 68495 Jun 25 08:53 install.log
示例 5
更改为一个 /etc/group 里不存在的用户组
[root@linux ~]# chgrp testing install.log
chgrp: invalid group name `testing' <== 出现错误信息~找不到这个用户组名~

文件分割/合并

源文件:TW-REL-4.0.8.3.zip

//分割
split -b 11m TW-REL-4.0.8.3.zip tw_4083_

//合并
cat tw_4083_* > tw_4083_all.zip

tcpdump

sudo tcpdump -i ens192 host 192.168.3.130

less 乱码

export LESSCHARSET=utf-8
export LESS=Mrf

修改主机名

hostname yk #临时生效

hostnamectl set-hostname yk #永久生效

vi /etc/hostname #永久生效

建用户并赋予 sudo 权限

adduser yk
passwd yk(q123456)
whereis sudoers
ll /etc/sudoers
chmod +w /etc/sudoers
vi /etc/sudoers
- 在 root ALL=(ALL) ALL 下面增加
- yk ALL=(ALL) NOPASSWD: ALL
chmod -w /etc/sudoers
su yk

# 完全删除用户
userdel -r yk

# 查看是否删除干净
find / -name "*yk*"


禁用 ping

echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

netstat

查看当前服务器的端口监听状态
netstat -tunl

查看已经联机的连接状态
netstat -tun

查看端口对应什么服务
netstat -antlp

find命令

find . -type f -name "*.jpg" -exec mv {} ../jpg/ \;

mac osx 终端批量删除文件

find ./ -name "*.html" -exec rm -rf {} \;  # 注意 {}和\;之间有空格
find [目录名] -name "文件名" -exec rm -rf {} \;

# 搜索删除文件,例如:
find / -name *.raw -exe c rm -rf {} \;

其中,

  • -exec 表示后面执行命令 "{}" 表示查询到的文件名 -rf 为删除命令 rm 的参数
  • r 表示递归删除
  • f 表示不需要确认,两个参数可根据需要去留

查找并杀死 tomcat

  • sudo kill -9 `ps -ef|grep tomcat | grep -v grep | awk '{print $2}'`

ls 命令

ls -lt # 按时间排序(默认倒序)
ls -lt | tac # 按时间升序排序
ls -lSh #按大小排序(默认倒序)

ls -lh  #按 M 显示文件大小

ls | wc -w  #查看文件数量

ls -F | grep "/$"   #只显示目录

ls -al | grep "^d"  #只显示目录

ls -al | grep "^-"  #只显示文件

ls -l | grep "^-" | wc -l #查看文件个数

ls -l | grep "^d" | wc -l #查看目录个数

ls -Rl | grep "^-" | wc -l # 递归查看目录里面所有文件文件个数

du / df 命令

#按文件大小排序并拿出最大的 20 个
du -h ./* | sort -hr | head -20

#查看每个文件夹的大小
du   -sh    /*

#只显示 1 层目录
du -d 1 -h

#只显示 2 层目录
du -d 2 -h

# 查看硬盘使用情况
df -h

# 查看内存
free -h

mac 网关和路由

临时添加 sudo route -n add -net 192.168.1.0 -netmask 255.255.255.0 192.168.0.170  
查看 netstat -nr grep 170
外链 https://blog.csdn.net/weixin_34356310/article/details/89777649  

杀掉查询出来的进程

  • ps -ef|grep mongo | grep -v grep | awk '{print $2}' | xargs kill -4

pbcopy

#copy id_rsa.pub 文件的内容到剪贴板:
pbcopy < ~/.ssh/id_rsa.pub

#粘贴剪贴板的内容
pbpaste

arp -a

查看局域网中所有使用的 ip 和 mac 地址

软连接

  • sudo ln -s "/Applications/subl.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl3
  • sudo ln -s "/Applications/vscode.app/Contents/Resources/app/bin/code" /usr/local/bin/vscode

mac ox 终端显示 bogon 的问题

sudo hostname yourname

eg: sudo hostname Yangk

mac 恢复 launchpad 布局

  • defaults write com.apple.dock ResetLaunchPad -bool true; killall Dock

扩展属性@

xattr -c filename #去除文件的扩展属性@
xattr -c -r * #去除文件夹下所有文件的扩展属性@

nslookup

$ nslookup ec2-54-222-215-38.cn-north-1.compute.amazonaws.com.cn
Server:		192.168.0.1
Address:	192.168.0.1#53

Name:	ec2-54-222-215-38.cn-north-1.compute.amazonaws.com.cn
Address: 54.222.215.38

Date: 2019-09-06 Fri 15:27