Linux 使用命令记录

Posted by zengchengjie on Wednesday, February 9, 2022

查看系统参数

#查看系统版本
[root@1519e10e029c /]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (AltArch)
[root@1519e10e029c /]# uname
Linux
#查看内存版本
[root@1519e10e029c /]# uname -r
5.10.47-linuxkit
#查看机器架构
[root@1519e10e029c /]# uname -m
aarch64
#其他参数详见命令详情
[root@1519e10e029c /]# uname --help
Usage: uname [OPTION]...
Print certain system information.  With no OPTION, same as -s.

  -a, --all                print all information, in the following order,
                             except omit -p and -i if unknown:
  -s, --kernel-name        print the kernel name
  -n, --nodename           print the network node hostname
  -r, --kernel-release     print the kernel release
  -v, --kernel-version     print the kernel version
  -m, --machine            print the machine hardware name
  -p, --processor          print the processor type or "unknown"
  -i, --hardware-platform  print the hardware platform or "unknown"
  -o, --operating-system   print the operating system
      --help     display this help and exit
      --version  output version information and exit

解压、压缩命令

  • tar命令

    将data.tar.gz解压到data文件夹

    #将data文件夹压缩到data.tar.gz
    tar -zcvf data.tar.gz data/
    #解压data.tar.gz到当前目录下名称为data
    tar -zxvf data.tar.gz
    
  • unzip命令

    #解压到当前文件夹下
    unzip data.zip
    #解压到data文件夹下 
    unzip -t data data.zip
    
  • rar命令

    解压.rar文件,一般不常用rar包,因为很多系统没装rar命令

    #将/etc 目录压缩为etc.rar 命令为:
    rar a etc.rar /etc
    
    #将etc.rar 解压 命令为:
    rar x etc.rar
    unrar -e etc.tar
    

nohup命令启动应用

应用启动,日志不输出到控制台

  • 语法格式:

    nohup Command [ Arg … ] [ & ]
    
  • 参数说明:

    Command:要执行的命令。

    Arg:一些参数,可以指定输出文件。

    &:让命令在后台执行,终端退出后命令仍旧执行。

  • 示例

    执行test二进制文件,将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向,直接忽略

    末尾增加 &表示在后台运行

    nohup ./test 1>/dev/null 2>&1 &
    
  • 若需要程序/脚本输出内容到指定文件,则执行:

    nohup ./test >test.log 2>&1 &
    
  • 若没有制定输出到文件,则默认会放到当前目录下的nohup.out这个文件中去

    nohup ./test 2>&1 &
    #或者
    nohup ./test &
    

解析

jq解析

  • 使用jq/gojq解析curl的返回结果

    curl -s -q http://127.0.0.1:9001/program/list | ./gojq -r '.[1].name'
    

xargs过滤

  • 使用xargs 命令解析结果:

    当我们在执行命令的时候,我们往往需要在返回的结果集里获取我们需要的目标值,这个时候我们可以用xrgs过滤数据

    如:

    # ip -br link show  p1p1
    p1p1             UP             b0:7b:25:1f:3d:b2 <BROADCAST,MULTICAST,UP,LOWER_UP>
    

    而某些情况下,我们只需要mac地址或者mac地址及网卡状态,则可以这样:

    # ip -br link show  p1p1 | xargs |awk '{print $2" "$3}'
    UP b0:7b:25:1f:3d:b2
    
    • 注:grep提取行,cut和awk提取列

      cut命令使用:提取内存的 total,used和free值,并保存到一个文件中。

      $ free -m | tr -s ' ' | sed '/^Mem/!d' | cut -d" " -f2-4 >> memory.txt
      $ cat memory.txt
      985 86 234
      

网络

  • 网络相关

    • 查看网关 route -n
    • 查看子网掩码 ifconfig
    • 查看IP ip a 或ifconfig
    • jnettop查看网络流量

ssh

免密登录:

(事实证明根本记不住命令,我已经是第n遍返回来看了)

  1. 本地客户端生成公私钥:(一路回车默认即可)

    ssh-keygen
    
  2. 上传公钥到服务器

    ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.44
    

    如果带端口的机器,输入-P port即可,如:

    ssh-copy-id -p 2021 -i ~/.ssh/id_rsa.pub root@192.168.10.44
    
  3. 测试免密登录

    ssh root@192.168.10.44
    

删除指纹:

如果有删除登录指纹的需求,可以执行命令:

  ssh-keygen -R 192.168.8.1

删除免密登录的密钥:


linux清理磁盘

  • 查找大文件

    find . -type f -size +800M
    

    只需要查找超过800M大小文件,并显示查找出来文件的具体大小

    find . -type f -size +800M  -print0 | xargs -0 du -h
    

    查看大文件的详细信息

    find . -type f -size +800M  -print0 | xargs -0 ls -l
    

    对查找结果按照文件大小做一个排序(du -hm表示按照M为单位排序)

    find . -type f -size +800M  -print0 | xargs -0 du -hm | sort -nr
    
  • 查找大目录

    du -h --max-depth=1
    

    查看二级目录

    du -hm --max-depth=2 | sort -n
    

    查看当前目录下的文件大小列表

    ls -lh
    

    ls -lrt 命令的作用

    ls 命令用于列出目录的内容,lrt 是其三个不同选项的组合:

    • l: 这是一个很长的内容列表,它在每一行里面显示一个文件的其他信息,比如权限,拥有者,大小,创建时间等;
    • t: 这个选项将输出列表按照时间排序;
    • r: 它将ls命令的输出进行倒序排序。
    #根据字母排序
    ls -l
    #根据时间排序
    ls -lt
    # 根据修改时间、创建时间、字母排序
    ls -lrt
    

    查看最大的12个文件夹

    du -hm --max-depth=2 | sort -nr | head -12	
    

    注:当磁盘100%后,删除大文件,再次查询有可能还是100%因为进程没有释放,这时候重启进程即可,当然,事情往往不这么简单,如果删除的是多个大文件,我们并不知道涉及到哪些进程,这时候查找资料发现答案:

    在Linux中,当我们使用rm在linux上删除了大文件,但是如果有进程打开了这个大文件,却没有关闭这个文件的句柄,那么linux内核还是不会释放这个文件的磁盘空间,最后造成磁盘空间占用100%,整个系统无法正常运行。这种情况下,通过df和du命令查找的磁盘空间,两者是无法匹配的,可能df显示磁盘100%,而du查找目录的磁盘容量占用却很小。

    遇到这种情况,基本可以断定是某些大文件被某些程序占用了,并且这些大文件已经被删除了,但是对应的文件句柄没有被某些程序关闭,造成内核无法收回这些文件占用的空间。

    原文链接:https://blog.csdn.net/langhailove_2008/article/details/79501129

    执行命令

    lsof -n | grep deleted
    

    执行kill -9 命令,kill掉列出的对应进程即可

    • 磁盘使用率相关命令

      df -hP|awk 'NR>1 && $5 > 20'
      /dev/mapper/centos-root      17G   14G  3.3G   81% /
      
      df -Th |grep -E $ | awk '{ print $3" "$5}'
      容量 可用
      16G 16G
      16G 16G
      16G 16G
      
      

vim命令

  • Vim 多行注释 1 1. 首先按 esc 进入命令行模式下,按下 Ctrl + v ,进入列(也叫区块)模式; 2 2. 在行首使用上下键选择需要注释的多行; 3 3. 按下键盘(大写) “I” 键,进入插入模式; 4 4. 然后输入注释符( “//"、"#” 等); 5 5. 最后按下 “Esc” 键

  • Vim取消多行注释

    ctrl+v 选中,点击d即可

  • 删除

    vim删除教程

    • 删除字母’d’之后的字符

      • fdde
      • 多个’d' fd;de
    • 删除单行

      • dd
    • 删除所有行

      按一下ESC键,确保退出编辑模式

      按两次键盘上面的g键,让光标移动到文本的首行

      然后按键盘上面的d和G键。其中d键是小写,G键要切换成大写的。

    • 删除带某个关键字的行

      示例:删除包含text关键字的行 :g/text/d

    • 删除多行

      1. 首先在命令模式下,输入“:set nu”显示行号;
      2. 通过行号确定你要删除的行;
      3. 命令输入“:32,65d”,回车键,32-65行就被删除了,如果无意中删除错了,可以使用‘u’键恢复(命令模式下)
  • vim替换

    vim替换教程

    • 示例::%s#/root/data#/root/test#g
  • 光标控制

    1. 跳转到行末 $

    2. 跳到文本的最后一行:按“G”,即“shift+g”

    3. 跳到最后一行的最后一个字符 : 先重复1的操作即按“G”,之后按“$”键,即“shift+4”。

    4. 跳到第一行的第一个字符:先按两次“g”,

    5. 跳转到当前行的第一个字符:在当前行按“0”或者按“^”,即“shift+6”。

    6. vi加密。进入vi,输入":X" 之后按回车就提示你输入两次密码。之后:wq 保存退出。再次进入时就提示你输入密码了。如果你不想要密码了,就:X 提示你输入密码时连续按两次回车

关闭防火墙

  • 查看防火墙状态

    systemctl status firewalld.service

  • 关闭防火墙

    systemctl stop firewalld.service

  • 启动防火墙

    systemctl start firewalld.service

  • 执行开机禁用防火墙自启命令

    systemctl disable firewalld.service

  • 防火墙随系统开启启动

    systemctl enable firewalld.service

  • 防火墙关闭以后,需要重启docker服务

    service docker restart

  • 放开单个防火墙端口

    # 打开单个端口方法
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    # 打开多个端口方法
    firewall-cmd --zone=public --add-port=20000-29999/tcp --permanent
    # 防火墙重载配置(修改完要执行这个reload才能生效)
    firewall-cmd --reload
    # 查看开启端口
    netstat -ntlp 或:firewall-cmd --list-ports
    # 关闭端口命令
    firewall-cmd --zone=public --remove-port=80/tcp --permanent
    # 查看端口是否打开
    firewall-cmd --zone=public --query-port=80/tcp
    

关闭selinux

  • /usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: enabled

  • getenforce ##也可以用这个命令检查

  • 临时关闭(不用重启机器):

    setenforce 0 ##设置SELinux 成为permissive模式

    ##setenforce 1 设置SELinux 成为enforcing模式

  • 修改配置文件需要重启机器:

    修改/etc/selinux/config 文件

    将SELINUX=enforcing改为SELINUX=disabled

    重启机器即可

  • docker 镜像移除(把为none的移除,注意docker rmi前后空格)

    • docker images | grep none | awk ‘{print " docker rmi “$3}’ | bash

其他

  • upx安装

    wget -c http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el7/en/x86_64/rpmforge/RPMS/ucl-1.03-2.el7.rf.x86_64.rpm 
    rpm -Uvh ucl-1.03-2.el7.rf.x86_64.rpm 
    yum install ucl 
    wget -c http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el7/en/x86_64/rpmforge/RPMS/upx-3.91-1.el7.rf.x86_64.rpm 
    rpm -Uvh upx-3.91-1.el7.rf.x86_64.rpm 
    yum install upx
    
  • python2升级python3

    yum install gcc gcc-c++ -y
    wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
    tar xvf Python-3.7.2.tgz
    cd Python-3.7.2/
    ./configure
    make
    make install
    python3-V
    
  • centos安装打印机驱动

    yum install hplip
    
  • linux 桌面版快捷方式

    • 最小化窗口

      win + H
      
    • 退出当前窗口

      alt+F4
      
  • 重启一个服务

    改完配置文件后,需要重启一个service,这时候,执行以下命令

    systemctl daemon-reload
    systemctl restart xxx.service
    #查看
    systemctl status xxx.service
    
  • 安装jdk

    1. 查看云端目前支持安装的jdk版本

      yum search java|grep jdk
      
    2. 选择JDK版本,并安装

      yum install -y java-1.8.0-openjdk
      
    3. 检查是否安装成功

      java -version
      
    4. 查看JDK的安装目录

      find / -name 'java'
      

修改IP为静态IP的方式

场景:在windows上装虚拟机,修改为静态IP,在mac上访问

  • 虚拟机修改为桥接模式

mac替换brew源

在国内,使用brew极慢. 因为它需要访问国外的一些服务器.

解决方法是使用国内的镜像站.

  • 如果是首次安装:
curl https://raw.githubusercontent.com/Homebrew/install/master/install.sh  > install-brew.sh

然后,在下载的文件中, 修改BREW_REPO为:

BREW_REPO="https://mirrors.ustc.edu.cn/brew.git"

最后, 运行:

HOMEBREW_CORE_GIT_REMOTE=https://mirrors.ustc.edu.cn/homebrew-core.git bash install-brew.sh
  • 如果是已经安装了brew, 可以这样替换镜像站:
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git

echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bash_profile
source ~/.bash_profile

cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git

替换后, 就可以正常使用brew了.

文件夹权限:

drwxr-xr-x 即 chmod 755级别权限

drwxrwxrwx即chmod 777级别权限

文件夹的用户权限:

root用户将文件夹赋予权限给普通用户:

chown -R  username  filepath
#比如:chown -R  username /usr/loacal/nginx
-rw------- (600) 只有所有者才有读和写的权限
-rw-r--r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限
-rwx------ (700) 只有所有者才有读,写,执行的权限
-rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限
-rwx--x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限
-rw-rw-rw- (666) 每个人都有读写的权限
-rwxrwxrwx (777) 每个人都有读写和执行的权限

场景:docker使用roo用户安装的,需要给mysql文件配置root权限,并且读写权限扩大到755,否则会出现无法连接msyql的问题,里面外面都连不上

磁盘挂载

# 注意:最好在挂载前备份挂载目录的数据到其他路径或机器下。不要嫌麻烦,cp命令很快的!
fdisk /dev/vda
# 依次按 n(新建)、(e)默认回车、默认回车、默认回车、最后w保存,新建的分区为/dev/vda4
# 此时新建的分区在df -h能显示,lsblk看不到,格式化分区也会失败,需要执行partprobe命令
partprobe /dev/vda
mkfs.ext4 /dev/vda4
# 等待格式化完成后,执行mout命令挂载,将此分区挂载到 /test目录
mount /dev/vda4 /test
# 分区信息写入配置文件,保证开机自启
echo /dev/sdb1 /data ext4 defaults 0 0 >> /etc/fstab