🍉Linux下常用命令整理~持续更新……

前言:

  接触Linux也有很久了,都是东学一点,西学一点也并没有系统的去学习一下这些命令,自己也有过一版的笔记,不过是纯手写的在外也不方便查看

所以就想着做个电子版的文档方便日后查看使用,但是进阶指令什么的我确是一片空白,本文章参考《鸟哥的LINUX私房菜_基础学习篇(第三版)》进行整理。

如果有小伙伴需要IT方面的电子书,可以发私信给我,免费分享给你。如果大家经济允许的话还是希望支持一下正版书籍!

Linux目录整理说明:

Linux目录整理说明:
/bin:
    bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。
   
/boot:
    这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。

/dev :
    dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
   
/etc:
    配置文件
    1.用户相关信息
        /ect/passwd
    2.个人密码
        /ect/shadow
    3.用户组
        /etc/ group
    4.第三方软件的配置文件
        /etc/opt
/home:
    用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。

/lib:
    lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。

/lost+found:
    这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

/media:
    linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。

/mnt:
    系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

/opt:
    第三方辅助软件

/proc:
    proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
    1.修改ping主机:0表示可以ping,0表示ping不同
        /proc/sys/net/ipv4/icmp_echo_ignore_all

/root   
    该目录为系统管理员,也称作超级权限者的用户主目录。

/sbin:
    s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。

/selinux:
    这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。

/srv:
    该目录存放一些服务启动之后需要提取的数据。

/sys:
    这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

/tmp:
    tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。

/usr:
    与软件安装/执行有关
    1.以前的软件安装位置
        /usr/local
    2.在线帮助文档
        /usr/share/man
    3.软件说明文档
        /usr/share/doc
    4.时区相关
        /usr/share/zoneinfo
/usr/bin:
    系统用户使用的应用程序。

/usr/sbin:
    超级用户使用的比较高级的管理程序和系统守护程序。

/usr/src:
    内核源代码默认的放置目录。

/ var :
    var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
    1.用户登录的文件:使用last查看,cat查看会乱码
        / var /log/wtmp
    2.用户邮箱
        / var /mail
    3.程序相关
        / var /run
    4.新闻组
        / var /spool/news
/run:
    是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 / var /run 目录,应该让它指向 run。
  

一、Linux系统常用命令

Windows下CMD关闭占用端口

# 查询8080端口
netstat -nao | findstr "8080" 
# 关闭pid为3017的进程
taskkill /pid 3017 /F 

软件图标变白修复

新建文件文件,粘贴以下内容,并将文件扩展名修改为bat

@echo off
color 0a
echo **************************************************************************
echo 请按下任意按键开始修复桌面白图标情况
echo 注意:本脚本只适用于图标损坏,并不适用用于文件打不开的文件图标修复!!!
echo **************************************************************************
pause

::打开图标缓存文件夹
::cd %localappdata%
cd /d %userprofile%\AppData\Local

::删除图标缓存文件
del IconCache.db /a

::终止进程资源管理器
taskkill /f /im explorer.exe

::启动资源管理器
start explorer.exe

echo.
echo 修复完毕,感谢使用
pause

su 和 su - 区别

susu - 是两个用于切换用户身份的命令,它们之间有一些重要的区别。

  1. su 命令:

    • 使用 su 命令时,你可以切换到另一个用户的身份,但不改变环境变量和工作目录。
    • 例如,如果你使用 su username,你将切换到指定用户(username)的身份,但你仍然保留原用户的环境变量和工作目录。
    •  su username 
  2. su - 命令:

    • 使用 su - 命令时,不仅会切换到另一个用户的身份,还会加载该用户的环境变量和工作目录。
    • 这意味着你将以目标用户的身份启动一个新的 shell 会话,该 shell 会话将具有目标用户的环境设置。
    •  su - username 

总结一下:

  • su 只切换用户身份,但不切换环境。
  • su - 不仅切换用户身份,还切换到目标用户的环境。

在实际使用中,根据你的需求,选择使用 susu -。如果需要执行目标用户的环境设置,最好使用 su -

一条命令关闭所有【Tomcat】进程

方式一:使用 xargs 将进程ID传递给 kill 命令,如果进程不存在不执行(-r 参数)

ps -ef | grep tomcat | grep -v grep | awk '{print $2}' | xargs -r kill -9

这条命令首先通过ps -ef列出所有的进程,然后用grep tomcat找出包含“tomcat”的行,

接着grep -v grep排除掉当前正在执行的grep命令自身的行,

最后使用awk '{print $2}'提取出第二列的进程ID,

并通过xargs kill -9将这些进程ID作为参数传递给kill -9命令以强制终止对应的进程。

方式二:使用pkill命令

pkill -9 -f tomcat

这条命令更加简洁且安全,它会根据进程名称或命令行中包含的字符串(这里是"tomcat")来终止相应的进程,-f标志确保了匹配整个命令行,而不是仅仅匹配进程名。  

查看及关闭端口对应的进程ID

查看端口对应的进程是否存在:

netstat -ntpl | grep 8080

查看端口对应的进程ID:

netstat -ntpl | grep 8080 | awk '{print $7}' | awk -F '/' '{print $1}'

查看内存内存占用:top

默认top按照cpu使用率进行排序的,如果想要按照内存使用率进行排序,可以通过快捷键:Shift+M,或者命令:top -o %MEM

top - 12:52:58 up 1 day,  1:40,  5 users,  load average: 1.09, 1.08, 1.10
Tasks: 149 total,   1 running, 148 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.7 us,  0.7 sy,  0.0 ni, 98.3 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st
KiB Mem : 31729792 total,  5388080 free, 22601020 used,  3740692 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  8720644 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                         
 2398 root      20   0   10.3g   5.2g  11896 S   1.3 17.3  22:50.08 java 

解释上面输出的内容:

KiB Mem:总共的物理内存大小为31,729,792 KiB(约为31.7 GB)。

  • total:总共的物理内存大小。
  • free:可用的物理内存大小为5,388,080 KiB(约为5.4 GB)。
  • used:已使用的物理内存大小为22,601,020 KiB(约为22.6 GB)。
  • buff/cache:缓存和缓冲区使用的物理内存大小为3,740,692 KiB(约为3.7 GB)。此部分包括用于存储文件系统缓存的内存以及其他系统缓存。

KiB Swap:交换分区的相关信息。

  • total:交换分区的总大小为0 KiB。
  • free:可用的交换分区大小为0 KiB。
  • used:已使用的交换分区大小为0 KiB。
  • avail Mem:可用的物理内存大小,即可供程序使用的内存大小为8,720,644 KiB(约为8.7 GB)。

关于top命令的进程列表解释如下:

  • PID:进程的ID。
  • USER:进程属于的用户。
  • PR:进程的优先级。
  • NI:进程的优先级修正号。
  • VIRT:进程使用的虚拟内存大小。
  • RES:进程使用的物理内存大小。
  • SHR:共享内存大小。
  • S:进程的状态(如running、sleeping、stopped等)。
  • %CPU:进程的CPU使用率。
  • %MEM:进程的内存使用率。
  • TIME+:进程已运行的累计时间。
  • COMMAND:进程的命令或可执行文件名。

根据你提供的示例输出,PID为2398的进程是一个名为java的命令,使用了大约17.3%的物理内存(约为5.2 GB)。

挖矿病毒rcu_bj:

公司主机有遇到这种情况,这里先记录一下解决办法:

https://www.jianshu.com/p/c1c77a63e824

https://blog.csdn.net/dualvencsdn/article/details/127458496

Linux下实现分片压缩:

背景:大文件传输时候可能不那么方便,万一有网络问题失败了,需要重新传输,这是很难受的。这时候我们可以通过分片压缩来解决这种困扰

分卷压缩

#1、将原始文件(qxzc.mp4)进行压缩成压缩包
# zip -r[递归压缩子目录/文件] 创建的压缩文件的文件名 要压缩的文件名
zip -r qxzc.zip qxzc.mp4

# 2、将压缩包进行分割,单位有:m、g、t等
# zip -s 每个压缩包大小 要分割的压缩包 --out 分片后的压缩包名称(b.zip、b.z01、b.z02……)
zip -s 500m qxzc.zip --out b.zip 

将分片后的内容(圈出来的内容)拿到Windows本地,用压缩工具解压b.zip即可~

 分卷解压

# 1、将分卷内容合并为完整zip
# cat 分卷压缩内容 合并后的文件
cat b.* > a.zip
# 2、将压缩文件解压,就得到了原始的内容
# 解压
unzip a.zip

sshpass:免输服务器密码,连接到服务器执行命令

最近有个需求,要获取到几十上百台服务器的主机名称,按照之前的方法,纵使有这些服务器的密码。

但是需要一台一台通过ssh连接到服务器,然后只为了执行一条hostname命令,这显然太繁琐了。所以就简单了解了下sshpass命令的使用。

ssh和sshpass区别于联系

  SSH(Secure Shell)是一种网络协议,用于安全地连接到远程服务器并在这两个系统之间传输数据。
SSH提供了一种在非安全网络上执行安全远程登录的方式,它使用公钥加密技术来验证远程计算机并允许远程计算机验证用户。
SSH命令用于在Linux和Unix系统中启动SSH客户端会话:

  • ssh user@hostname

  sshpass是一个非交互式密码提供者,使用SSH通常需要交互式密码输入或使用密钥。
但有些情况下,我们可能需要在脚本中使用SSH做一些自动化的事情,这就需要无人值守的进行身份验证。
sshpass来由于这种需要,它可以为ssh命令提供密码参数,从而实现自动化登录。
sshpass命令的基本用法:

  • sshpass -p 'password' ssh user@hostname

这里,-p选项使得我们可以直接在命令行提供密码参数。
注意:在命令行中直接使用明文密码是有风险的,它可能会被其他用户查看或者被历史命令记录下来。
因此,使用sshpass需要谨慎,尽可能地使用SSH密钥对进行身份验证。

简而言之,ssh是用于安全远程登录的工具,而sshpass是为ssh提供自动化密码输入的工具

 需求实现:拿到所有主机的主机名称

1、新建服务器列表文件,ip 密码,使用空格分割即可

vim hosts.txt

2、新建脚本文件,批量查询主机名称

vim host_name.sh

#!/bin/bash
while IFS= ' ' read -r ip password
do
hostname=$(sshpass -p  "$password" ssh -n -o ConnectTimeout=10 -o StrictHostKeyChecking=no root @"$ip" "hostname" 2>/dev/ null )
if [ $? -eq 0 ]; then
echo  "IP: $ip, Hostname: $hostname"
else
echo  "无法连接到主机:$ip"
fi
done < hosts.txt

Centos7下使用命令行连接WiFI

1、查看可用的无线网卡:拿到无线网卡名称

[root@zhixi /]# iw dev

  • phy#0:这是无线网络设备的物理标识符,表示物理设备号是0。

  • Interface wlo1:这是无线网络设备的接口名称,表示该接口是wlo1。(无线网卡名称是wlo1)

  • ifindex 3:这是无线网络接口的索引号,表示该接口的索引号是3。

  • wdev 0x1:这是无线网络设备的无线接口标识符,表示该设备的无线接口标识是0x1。

  • addr e4:fd:45:6c:ab:1f:这是无线网络设备的MAC地址,表示该设备的MAC地址是e4:fd:45:6c:ab:1f。

  • type managed:这是无线网络设备的类型,表示该设备是一个托管型设备,即可以连接到其他无线网络。

2、启动无线网卡:

[root@zhixi /]# ip link set wlo1 up

ps:关闭无线网卡命令:ip link set wlo1 down

3、启动网络管理器

开启网络管理器:systemctl start NetworkManager

管理网络管理器:systemctl stop NetworkManager

网络管理器开机自启(*):systemctl enable NetworkManager

4、开启wifi

[root@zhixi /]# nmcli r wifi on

ps:关闭WiFi命令:nmcli r wifi off

5、查看所有wifi信号

[root@zhixi /]# nmcli dev wifi

6、连接wifi

[root@zhixi /]# nmcli d wifi connect "网络名" password "密码" 网卡名

7、验证Wifi是否连接成功

[root@zhixi /]# nmcli d

[root@zhixi /] # iw dev

可以通过

8、Xshell连接到服务器

[root@zhixi /]# ip addr show

测试远程端口:telnet、nmap

安装telnet:yum -y install telnet

安装nmap:yum -y install nmap

对比:

  • telnet命令是一种远程登录协议,它允许用户通过网络连接到远程主机或设备并执行命令。
  • nmap命令是一种网络扫描工具,用于扫描和探测网络上的主机、开放的端口和网络服务等信息。

本例,只是为了测试远程端口是否通,比如我的腾讯云服务器,想看下我的阿里云服务器,是否对外开放了xxx端口

  • telnet 182.92.209.212 22
  • nmap -Pn 182.92.209.212 -p 22

mount: /dev/sda 写保护,将以只读方式挂载

先说背景:这个U盘是烧录盘,装好系统后,想格式化做其他方式使用,在Windows下格式化后(NTFS),显示正常,32GB。

但是在Linux下挂载后,出现了无法写入,并且容量只有4GB多,有点纳闷,下面先来了解下文件系统格式:

  1、Fat32文件格式是一种通用格式,任何USB存储设备都会预装该文件系统,可以在任何操作系统平台上使用。最主要的缺陷是只支持最大单文件大小容量为4GB,因此日常使用没有问题,只有在传输大文件时才会显现出缺点。

  2、exFAT文件是微软自家创建的用来取代FAT32文件格式的新型文件格式,它最大可以支持1EB的文件大小,非常适合用来存储大容量文件,还可以在Mac和Windows操作系统上通用。虽然是微软的技术,苹果批准在系统中使用该文件格式,因此在Mac系统中格式化存储设备时会出现exFAT文件格式选项。最大的缺点是没有文件日志功能,这样就不能记录磁盘上文件的修改记录。

  3、NTFS是微软为硬盘或固态硬盘(SSD)创建的默认新型文件系统,NTFS的含义是 New Technology File System,它基层了所有文件系统的优点:日志功能、无文件大小限制、支持文件压缩和长文件名、服务器文件管理权限等。最大的缺点是Mac系统只能读取NTFS文件但没有权限写入,需要借助第三方工具才能实现。因此跨平台的功能非常差。

 找到问题所在了,在Linux下挂载的时候为什么会出现写保护了,应该如何解决呢?看下面说明就明白了,需要重新格式化U盘。

# 第一步操作,查看磁盘名称,然后设置挂载点
[root@zhixi ~]# fdisk -l
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

磁盘 /dev/nvme0n1:500.1 GB, 500107862016 字节,976773168 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: FAC2AB11-FB49-4CCF-B9B8-FD132C517AB4


#         Start          End    Size  Type            Name
 1         2048      4196351      2G  EFI System      EFI System Partition
 2      4196352      8390655      2G  Microsoft basic 
 3      8390656    976773119  461.8G  Linux LVM       

磁盘 /dev/mapper/centos-root:461.4 GB, 461448937472 字节,901267456 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-swap:34.4 GB, 34359738368 字节,67108864 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/sda:31.5 GB, 31457280000 字节,61440000 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xa4ed694e

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1               1  4294967295  2147483647+  ee  GPT


# 第二步,挂载,确保:/mnt/aiguozhe目录存在
# 这里就出现了问题
[root@zhixi ~]# mount /dev/sda /mnt/aiguozhe/
mount: /dev/sda 写保护,将以只读方式挂载
[root@zhixi ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 6.3G     0  6.3G    0% /dev
tmpfs                    6.3G     0  6.3G    0% /dev/shm
tmpfs                    6.3G   26M  6.3G    1% /run
tmpfs                    6.3G     0  6.3G    0% /sys/fs/cgroup
/dev/mapper/centos-root  430G   12G  418G    3% /
/dev/nvme0n1p2           2.0G  222M  1.8G   11% /boot
/dev/nvme0n1p1           2.0G   12M  2.0G    1% /boot/efi
tmpfs                    1.3G     0  1.3G    0% /run/user/0
/dev/sda                 4.4G  4.4G     0  100% /mnt/aiguozhe


# 第三步:解挂
[root@zhixi ~]# umount /dev/sda 

# 第四步:重新格式化磁盘
[root@zhixi ~]# mkfs.ext4 /dev/sda
mke2fs 1.42.9 (28-Dec-2013)
/dev/sda is entire device, not just one partition!
无论如何也要继续? (y,n) y
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1921360 inodes, 7680000 blocks
384000 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2155872256
235 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成   

# 第五步,查看磁盘,发现跟之前的不一样了
[root@zhixi ~]# fdisk -l
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

磁盘 /dev/nvme0n1:500.1 GB, 500107862016 字节,976773168 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: FAC2AB11-FB49-4CCF-B9B8-FD132C517AB4


#         Start          End    Size  Type            Name
 1         2048      4196351      2G  EFI System      EFI System Partition
 2      4196352      8390655      2G  Microsoft basic 
 3      8390656    976773119  461.8G  Linux LVM       

磁盘 /dev/mapper/centos-root:461.4 GB, 461448937472 字节,901267456 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-swap:34.4 GB, 34359738368 字节,67108864 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/sda:31.5 GB, 31457280000 字节,61440000 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

# 第六步,挂载
[root@zhixi ~]# mount /dev/sda /mnt/aiguozhe/
[root@zhixi ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 6.3G     0  6.3G    0% /dev
tmpfs                    6.3G     0  6.3G    0% /dev/shm
tmpfs                    6.3G   26M  6.3G    1% /run
tmpfs                    6.3G     0  6.3G    0% /sys/fs/cgroup
/dev/mapper/centos-root  430G   12G  418G    3% /
/dev/nvme0n1p2           2.0G  222M  1.8G   11% /boot
/dev/nvme0n1p1           2.0G   12M  2.0G    1% /boot/efi
tmpfs                    1.3G     0  1.3G    0% /run/user/0
/dev/sda                  29G   45M   28G    1% /mnt/aiguozhe

mount: 未知的文件系统类型“ntfs”,问题解决

在Windows下写入文件,想在Linux下挂载,然后读取。

如果在Linux系统中尝试挂载U盘时遇到“未知的文件系统类型“ntfs””的错误,这可能是因为缺少NTFS文件系统的支持。

解决此问题的方法是在Linux系统上安装ntfs-3g软件包。ntfs-3g是一个开源的NTFS文件系统驱动程序,它允许Linux系统读写NTFS分区。

yum -y install ntfs-3g

然后重新挂载即可~

发送邮件

一、安装mailx发送邮件工具

yum -y install mailx

二、编辑邮件发送服务器地址:vim /etc/mail.rc 

# 1、设置发件人地址
set from =zhang_zhixi@qq.com
# 2、设置SMTP服务器地址
set smtp=smtp.qq.com
# 3、设置SMTP验证的用户名(通常是发件人的邮箱地址)
set smtp-auth-user=zhang_zhixi@qq.com
# 4、设置SMTP验证的密码(在这里是发件人的QQ邮箱授权码)
set smtp-auth-password=xxxxxx
# 5、禁用对SMTP服务器的SSL证书验证
set ssl-verify=ignore
# 6、设置NSS配置目录的路径,NSS是用于管理证书和密钥的库
set nss-config-dir=/root/.certs
# 7、设置SMTP验证方法为“login”

三、测试发送邮件

echo  "Hello" | mail -v -s  "test" 1820712542@qq.com

邮件发送一些命令

1)  无正文邮件
mail -s  "主题" 收件人邮箱地址

2) 有正文邮件
mail -s  "主题" 收件人邮箱地址 < 文件[邮件正文.txt]

echo  "邮件正文" | mail -s 邮件主题  收件人邮箱地址

cat 邮件正文.txt | mail -s 邮件主题  收件人邮箱地址

3)  带附件
echo  "邮件正文" | mailx -s  "邮件主题" -a 附件 收件人邮箱地址

mail -s  "邮件主题" -a 附件 收件人邮箱地址 < 文件[邮件正文.txt]

查询当前服务器的公网IP

curl ifconfig.me

自动登录-免输密码:expect

expect主要应用于自动化交互式操作的场景,借助Expect处理交互的命令。

可以将交互过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率。

安装:

使用命令:whereis expect 查看是否安装了expect,如果没有安装,使用命令:yum -y install expect 进行安装即可

使用:

vim auto_login.sh

#!/usr/bin/expect -f
set timeout 30
set host  "服务器IP"
set user  "用户名"
set password  "密码"

set port  "22"

spawn ssh $user@$host -p $port
expect {
    "yes/no" {
        send  "yes\r"
        exp_continue
    }
    "password:" {
        send  "$password\r"
    }
}
interact

执行shell脚本即可:

chmod +x auto_login.sh
./auto_login.sh

设置程序开机自启

https://www.cnblogs.com/zhangzhixi/p/16836498.html

fish:并且功能丰富的 shell

安装:yum -y install fish

使用:fish

退出:exit

查看系统信息-精简版

echo -e  \
"
操作系统:$(cat /etc/redhat-release)\n\
内核版本:$(uname -r)\n\
CPU 信息:$(lscpu | grep "Model name" | head -n1 | cut -d: -f2-)\n\
核心数:$(cat /proc/cpuinfo | grep "processor" | wc -l)\n\
内存信息:$(free -h | awk 'NR==2 {print $2}')\n\
磁盘信息:总容量:$(df -h / | awk 'NR==2{print $2}'), 剩余容量:$(df -h / | awk 'NR==2{print $4}')\
"

echo  "操作系统:$(lsb_release -d | cut -f2-)"
echo  "内核版本:$(uname -r)"
echo  "CPU 信息:$(grep " model name " /proc/cpuinfo | head -n1 | cut -d: -f2-)"
echo  "内存信息:$(free -h | awk 'NR==2 {print $2}')"
echo  "磁盘信息:总容量:$(df -h / | awk 'NR==2{print $2}'), 剩余容量:$(df -h / | awk 'NR==2{print $4}')"

下载更新高版本GCC(Centos7)

yum -y  install centos-release-scl
yum -y  install devtoolset-9- gcc devtoolset-9- gcc -c++ devtoolset-9-binutils
#这句是临时的
scl  enable devtoolset-9  bash
#修改环境变量(永久)
echo "source /opt/rh/devtoolset-9/enable" >>  /etc/profile
#刷新配置
source /etc/profile
#查看gcc版本
gcc - v

更换yum源为阿里的yum源(Centos7)

参考地址:https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b11lKvxuq

# 查看yum源信息
yum repolist
#1、备份
mv /etc/yum .repos.d /CentOS-Base .repo  /etc/yum .repos.d /CentOS-Base .repo.backup 
# 2、下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 3、清理缓存
yum clean all
# 4、重新生成缓存
yum makecache

yum安装程序报错:One of the configured repositories failed (Unknown)

https://www.cnblogs.com/oboth-zl/p/16952330.html

yum安装软件时报“没有可用的软件包异常”

当在Linux系统中使用yum安装软件时提示 “没有可用软件包”时,代表在linux系统yum源中已经没有对应的安装包了,这时,我们需要安装EPEL。

EPEL(Extra Packages for Enterprise Linux),企业版Linux额外包,RHEL分布非标准包的社区类库。安装如下:

yum install -y epel-release

yum安装常用软件提示:没有可用软件包 httpd

vim /etc/yum.conf

 然后执行安装命令即可:

yum -y install httpd

vim显示行号

临时

在命令行输入:set number

永久

在用户的家目录创建vimrc文件,并追加:set number

vim ~/.vimrc

服务进程相关(systemctl)

 LinuxSystemctl是一个系统管理守护进程、工具和库的集合,用于取代System V、service和chkconfig命令。

初始进程主要负责控制systemd系统和服务管理器。

通过systemctl --help可以看到该命令主要分为:查询或发送控制命令给systemd服务,管理单元服务的命令,服务文件的相关命令,任务、环境、快照相关命令,systemd服务的配置重载,系统开机关机相关的命令

1、列出所有可用单元 
    systemctl list-unit-files
2、列出所有运行中单元 
    systemctl list-units
3、列出所有失败单元 
    systemctl –failed
4、检查某个单元(如 mysqld)是否启用 
    systemctl  is -enabled mysqld
5、列出所有服务 
    systemctl list-unit-files –type=service
6、Linux中如何启动、重启、停止、重载服务以及检查服务状态 、开机自启。(如 mysql)
    systemctl start mysqld
    systemctl restart mysqld
    systemctl stop mysqld
    systemctl reload mysqld
    systemctl status mysqld
    systemctl enable mysqld
注意:当我们使用systemctl的start,restart,stop和reload命令时,终端不会输出任何内容,只有status命令可以打印输出。
7、如何激活服务并在开机时启用或禁用服务(即系统启动时自动启动mysql服务) 
    systemctl  is -active mysqld(查看状态)
    systemctl enable mysqld (设置开机自启)
    systemctl disable mysqld (取消开机自启)
8、检查某个服务的所有配置细节 
    systemctl show mysqld
9、 重启、停止、挂起、休眠系统或使系统进入混合睡眠 
    systemctl reboot
    systemctl halt
    systemctl suspend
    systemctl hibernate
    systemctl hybrid-sleep

setfacl与getfacl:linux 下恢复文件权限设置,Linux系统文件权限的备份与恢复:

今天发生了一个事故,使用命令:chmod -R 777 /u01,不小心给Oracle的目录以及子目录全部设置成了777权限,导致了Oracle无法正常访问,请教了第三方的大佬这才找到解决的办法

以下简单的说明下这两个命令的使用,还有切记对于权限问题,一定要万千小心:

setfacl——设定文件访问控制列表
    语法: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
  -m, --modify=acl 更改文件的访问控制列表
  -M, --modify-file=file 从文件读取访问控制列表条目更改
  -x, --remove=acl 根据文件中访问控制列表移除条目
  -X, --remove-file=file 从文件读取访问控制列表条目并删除
  -b, --remove-all 删除所有扩展访问控制列表条目
  -k, --remove- default 移除默认访问控制列表
      -- set =acl 设定替换当前的文件访问控制列表
      -- set -file=file 从文件中读取访问控制列表条目设定
      --mask 重新计算有效权限掩码
  -n, --no-mask 不重新计算有效权限掩码
  -d, -- default 应用到默认访问控制列表的操作
  -R, --recursive 递归操作子目录
  -L, --logical 依照系统逻辑,跟随符号链接
  -P, --physical 依照自然逻辑,不跟随符号链接
      --restore=file 恢复访问控制列表,和“getfacl -R”作用相反
      --test 测试模式,并不真正修改访问控制列表属性
  -v, --version           显示版本并退出
  -h, --help              显示本帮助信息
 
getfacl ——获取文件访问控制列表
    语法: getfacl  [-aceEsRLPtpndvh]  文件 ...
  -a,  --access           仅显示文件访问控制列表
  -d, -- default 仅显示默认的访问控制列表
  -c, --omit-header     不显示注释表头
  -e, --all-effective     显示所有的有效权限
  -E, --no-effective      显示无效权限
  -s, --skip- base 跳过只有基条目( base entries)的文件
  -R, --recursive         递归显示子目录
  -L, --logical           逻辑遍历(跟随符号链接)
  -P, --physical          物理遍历(不跟随符号链接)
  -t, --tabular           使用制表符分隔的输出格式
  -n, --numeric           显示数字的用户/组标识
  -p, --absolute-names    不去除路径前的  '/' 符号
  -v, --version           显示版本并退出
  -h, --help              显示本帮助信息

测试:

1、在tmp目录下新建test.txt文件,查看tmp目录下所有文件的权限

2、备份/tmp及其子文件夹下所有文件的权限信息

3、将/tmp及其子文件夹下所有文件的权限全部设置为777

4、恢复/tmp及其子文件夹下所有文件的权限

[root@zhixi tmp]# touch test.txt
[root@zhixi tmp]# ll
total 0
drwxr-xr-x 2 root root 50 Jan 27 15:49 aegis_dfir
-rw------- 1 root root  0 Jan 27 10:49 AliyunAssistClientSingleLock.lock
drwx------ 3 root root 17 Jan 27 10:49 systemd-private-3aa83314b1f44096b13b6664046cfef6-chronyd.service-7shkni
-rw-r--r-- 1 root root  0 Jan 27 22:40 test.txt
[root@zhixi tmp]# getfacl -pR /tmp/ > /tmp/facl.bak
[root@zhixi tmp]# ll
total 4
drwxr-xr-x 2 root root  50 Jan 27 15:49 aegis_dfir
-rw------- 1 root root   0 Jan 27 10:49 AliyunAssistClientSingleLock.lock
-rw-r--r-- 1 root root 885 Jan 27 22:40 facl.bak
drwx------ 3 root root  17 Jan 27 10:49 systemd-private-3aa83314b1f44096b13b6664046cfef6-chronyd.service-7shkni
-rw-r--r-- 1 root root   0 Jan 27 22:40 test.txt
[root@zhixi tmp]# chmod -R 777 /tmp/*
[root@zhixi tmp]# ll
total 4
drwxrwxrwx 2 root root  50 Jan 27 15:49 aegis_dfir
-rwxrwxrwx 1 root root   0 Jan 27 10:49 AliyunAssistClientSingleLock.lock
-rwxrwxrwx 1 root root 885 Jan 27 22:40 facl.bak
drwxrwxrwx 3 root root  17 Jan 27 10:49 systemd-private-3aa83314b1f44096b13b6664046cfef6-chronyd.service-7shkni
-rwxrwxrwx 1 root root   0 Jan 27 22:40 test.txt
[root@zhixi tmp]# setfacl --restore=/tmp/facl.bak
[root@zhixi tmp]# ll
total 4
drwxr-xr-x 2 root root  50 Jan 27 15:49 aegis_dfir
-rw------- 1 root root   0 Jan 27 10:49 AliyunAssistClientSingleLock.lock
-rw-r--r-- 1 root root 885 Jan 27 22:40 facl.bak
drwx------ 3 root root  17 Jan 27 10:49 systemd-private-3aa83314b1f44096b13b6664046cfef6-chronyd.service-7shkni
-rw-r--r-- 1 root root   0 Jan 27 22:40 test.txt

date,cal,bc 时间、日期、计算器

  • 显示日期与时间的命令: date

  • 显示日历的命令: cal

  • 简单好用的计算器:bc

cp:复制

Linux cp(英文全拼:copy file)命令主要用于复制文件或目录。

参数说明

  • -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
  • -s:复制成符号链接文件,这里所说的链接相当于 Windows 系统中的快捷方式。注意:这是因为 "-s" 选项在 cp 命令中用于创建符号链接,但不能用于复制目录。
    • 需要复制目录使用以下命令:ln -s 目录/文件  目标目录
  • -f:覆盖已经存在的目标文件而不给出提示。
  • -i:与 -f 选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 y 时目标文件将被覆盖。
  • -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
  • -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
  • -l:不复制文件,只是生成链接文件。

生成快捷方式:

  需要注意的是,如果将软连接放到其他文件夹(不是相同文件夹),那么需要指定原文件位置(使用绝对路径)

  或者可以通过ln命令进行实现软链接:

复制当前目录下包含子目录下的指定类型文件

第一种(常规):

cp -r $(find . -name  "*.war" ) /root

第二种(针对目录包含空格的):

find . -name  "*.war" > filelist.txt
cat filelist.txt | xargs -I {} cp {} /root

scp:命令用于Linux之间复制文件和目录

https://www.cnblogs.com/zhangzhixi/p/16352319.html#_label7

cat、more……文件内容查阅

chattr和lsattr:设置文件属性(无法删除)

chattr命令用于改变文件属性。

这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:

  1. a:让文件或目录仅供附加用途。(只可以追加)
  2. b:不更新文件或目录的最后存取时间。
  3. c:将文件或目录压缩后存放。
  4. d:将文件或目录排除在倾倒操作之外。
  5. i:不得任意更动文件或目录(不能追加,编辑,删除)
  6. s:保密性删除文件或目录。
  7. S:即时更新文件或目录。
  8. u:预防意外删除。

实例:

用chattr命令防止系统中某个关键文件被修改:

chattr +i  /etc/resolv .conf
lsattr  /etc/resolv .conf

会显示如下属性(如果要删除这个文件,就需要将i属性给去除):

----i--------  /etc/resolv .conf

让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:

chattr +a  /var/log/messages

删除文件:将该文件的i属性取消:

chattr -i  /etc/resolv .conf

which,whereis,find: 文件查找

  • 寻找“执行文件”(which):

#which ls

  • 寻找特定文件(whereis):
[root@zhixi /] # whereis ifconfig
ifconfig :  /usr/sbin/ifconfig /usr/share/man/man8/ifconfig .8.gz
  • 查找指定文件(find)  
从www目录下开始找,名称为index.html的文件:
#find /www/ -name index.html
从指定目录 /www/ ,找到大于1M的文件
#find /www/ -size +1000k
将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
# find . -name "*.c"

将当前目录及其子目录中的所有文件列出:
# find . -type f

将当前目录及其子目录下所有最近 20 天内更新过的文件列出:
# find . -ctime -20

tar:压缩跟解压缩

linux中 tar 命令用法

把常用的 tar 解压命令总结下,当作备忘:
tar
    -c: 建立压缩档案
    -x:解压
    -t:查看内容
    -r:向压缩归档文件末尾追加文件
    -u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
    -z:有 gzip 属性的
    -j:有bz2属性的
    -Z:有compress属性的
    - v :显示所有过程
    -O:将文件解开到标准输出
下面的参数-f是必须的
    -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
   
# tar -cf all.tar *.jpg 
这条命令是将所有.jpg的文件打成一个名为all. tar 的包。-c是表示产生新的包,-f指定包的文件名。

# tar -rf all.tar *.gif 
这条命令是将所有.gif的文件增加到all. tar 的包里面去。-r是表示增加文件的意思。

# tar -uf all.tar logo.gif 
这条命令是更新原来 tar 包all. tar 中logo.gif文件,-u是表示更新文件的意思。

# tar -tf all.tar 
这条命令是列出all. tar 包中所有文件,-t是列出文件的意思

# tar -xf all.tar 
这条命令是解出all. tar 包中所有文件,-x是解开的意思


压缩
    tar –cvf jpg. tar *.jpg  将目录里所有jpg文件打包成 tar .jpg
    tar –czf jpg. tar .gz *.jpg   将目录里所有jpg文件打包成jpg. tar 后,并且将其用 gzip 压缩,生成一个 gzip 压缩过的包,命名为jpg. tar .gz
    tar –cjf jpg. tar .bz2 *.jpg 将目录里所有jpg文件打包成jpg. tar 后,并且将其用 bzip2 压缩,生成一个 bzip2 压缩过的包,命名为jpg. tar .bz2
    tar –cZf jpg. tar .Z *.jpg   将目录里所有jpg文件打包成jpg. tar 后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg. tar .Z
    rar a jpg.rar *.jpg rar格式的压缩,需要先下载rar  for linux
    zip jpg.zip *.jpg   zip格式的压缩,需要先下载zip  for linux 
解压
    tar -xvf mysql. tar -C  /opt/test1/zzx 解压到指定目录下
    tar –xvf  file . tar 解压  tar 包
    tar -xzvf  file . tar .gz 解压 tar .gz
    tar -xjvf  file . tar .bz2   解压  tar .bz2
    tar –xZvf  file . tar .Z   解压 tar .Z
    unrar e  file .rar 解压rar
    unzip  file .zip 解压zip
总结
    *. tar 用  tar –xvf 解压
    *.gz 用  gzip -d或者gunzip 解压
    *. tar .gz和*.tgz 用  tar –xzf 解压
    *.bz2 用  bzip2 -d或者用bunzip2 解压
    *. tar .bz2用 tar –xjf 解压
    *.Z 用 uncompress 解压
    *. tar .Z 用 tar –xZf 解压
    *.rar 用 unrar e解压
    *.zip 用 unzip 解压




linux下最常用的打包程序就是 tar 了,使用 tar 程序打出来的包我们常称为 tar 包, tar 包文件的命令通常都是以. tar 结尾的。生成 tar 包后,就可以用其它的程序来进行压缩。

1.命令格式:

    tar [必要参数][选择参数][文件] 

2.命令功能:

    用来压缩和解压文件。 tar 本身不具有压缩功能。他是调用压缩功能实现的 

3.命令参数:

必要参数有如下:

    -A 新增压缩文件到已存在的压缩

    -B 设置区块大小

    -c 建立新的压缩文件

    -d 记录文件的差别

    -r 添加文件到已经压缩的文件

    -u 添加改变了和现有的文件到已经存在的压缩文件

    -x 从压缩的文件中提取文件

    -t 显示压缩文件的内容

    -z 支持 gzip 解压文件

    -j 支持 bzip2 解压文件

    -Z 支持compress解压文件

    - v 显示操作过程

    -l 文件系统边界设置

    -k 保留原有文件不覆盖

    -m 保留文件不被覆盖

    -W 确认压缩文件的正确性

可选参数如下:

    -b 设置区块数目

    -C 切换到指定目录

    -f 指定压缩文件

    --help 显示帮助信息

    --version 显示版本信息

4.常见解压/压缩命令

tar
    解包: tar xvf FileName. tar
    打包: tar cvf FileName. tar DirName
    (注: tar 是打包,不是压缩!)
.gz
    解压1:gunzip FileName.gz
    解压2: gzip -d FileName.gz
    压缩: gzip FileName

. tar .gz 和 .tgz
    解压: tar zxvf FileName. tar .gz
    压缩: tar zcvf FileName. tar .gz DirName
.bz2
    解压1: bzip2 -d FileName.bz2
    解压2:bunzip2 FileName.bz2
    压缩:  bzip2 -z FileName
. tar .bz2
    解压: tar jxvf FileName. tar .bz2
    压缩: tar jcvf FileName. tar .bz2 DirName
.bz
    解压1: bzip2 -d FileName.bz
    解压2:bunzip2 FileName.bz
    压缩:未知
. tar .bz
    解压: tar jxvf FileName. tar .bz
    压缩:未知
.Z
    解压:uncompress FileName.Z
    压缩:compress FileName
. tar .Z
    解压: tar Zxvf FileName. tar .Z
    压缩: tar Zcvf FileName. tar .Z DirName
.zip
    解压:unzip FileName.zip
    压缩:zip FileName.zip DirName
.rar
    解压:rar x FileName.rar
    压缩:rar a FileName.rar DirName 


5.使用实例

实例1:将文件全部打包成 tar 包

命令:
    tar -cvf log. tar log2012.log

    tar -zcvf log. tar .gz log2012.log

    tar -jcvf log. tar .bz2 log2012.log

修改Host主机名称:

方法一:

[root@xxxx]:如果不想主机名称显示的这么长,可以自定义主机名称:

 #hostnamectl set-hostname hostname 

方法二:

1、打开文件:vim  /etc/sysconfig/network

2、插入:HOSTNAME=主机名

3、重启:reboot

hostadmin :查看系统主机名称

Hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,

系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,

则系统再会将网址提交DNS域名解析服务器进行IP地址的解析,如果发现是被屏蔽的IP或域名,就会禁止打开此网页!

查看本机的host文件: #cat /etc/hosts 

history :查看历史命令

见名知意:历史(history)

输入: #export HISTTIMEFORMAT='%F %T' 表示激活显示行号

输入: #history 查看服务器的历史命令

如需永久显示执行时间需要修改.bash.rc文件,参考:https://blog.csdn.net/evil_wdpp/article/details/91873771

netstat:网络连接命令

先说我遇到的问题:启动SpringBoot项目时指定端口为8080,阿里云也已经开放安全组规则,但是网站还是无法访问,所以就想到了端口有可能被占用的情况。

  • 查看所有端口
netstat -ntpl

  • 查看端口对应的应用程序
#lsof -i:端口号
#ps -ef|grep 应用程序名
  • 杀死对应的应用程序(达到关闭端口的作用)
kill -9 应用PID
  • 强制杀死指定端口进程(最直接)
sudo fuser -k -n tcp 端口号

开放/移除端口

1、开启防火墙 
    systemctl start firewalld
2、开放指定端口
      firewall-cmd --zone= public --add-port=9999/tcp --permanent
   命令含义:
    --zone #作用域
    --add-port=1935/tcp  #添加端口,格式为:端口/通讯协议
    --permanent  #永久生效,没有此参数重启后失效
#移除指定端口
    firewall-cmd --zone= public --remove-port=3306/tcp  --permanent 
3、重启防火墙
      firewall-cmd --reload
4、查看端口号
    netstat -ntlp    //查看当前所有tcp端口·
    netstat -ntulp |grep 9999    //查看所有1935端口使用情况·
5. 查看所有已开放的端口
    firewall-cmd --zone= public --list-ports

*如果端口没有被使用的话,那么就不会有监听到(不显示)

top - 整机性能查看

参数说明

  • d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
  • q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
  • c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
  • S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来
  • s : 安全模式,将交谈式指令取消, 避免潜在的危机
  • i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程
  • n : 更新的次数,完成后将会退出 top
  • b : 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内

主要看load average, CPU, MEN三部分

load average表示系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

load average: 如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了

uptime - 系统性能命令的精简版

  1. 当前时间 23::52:36
  2. 系统已运行的时间 1:51min
  3. 当前在线用户 2 user
  4. 平均负载:0.16, 0.13, 0.09,最近1分钟、5分钟、15分钟系统的负载

vmstat:CPU查看

procs

  • r:运行和等待的CPU时间片的进程数,原则上1核的CPU的运行队列不要超过2,整个系统的运行队列不超过总核数的2倍,否则代表系统压力过大,我们看蘑菇博客测试服务器,能发现都超过了2,说明现在压力过大
  • b:等待资源的进程数,比如正在等待磁盘I/O、网络I/O等

cpu

  1. us:用户进程消耗CPU时间百分比,us值高,用户进程消耗CPU时间多,如果长期大于50%,优化程序
  2. sy:内核进程消耗的CPU时间百分比
  3. us + sy 参考值为80%,如果us + sy 大于80%,说明可能存在CPU不足,从上面的图片可以看出,us + sy还没有超过百分80,因此说明蘑菇博客的CPU消耗不是很高
  4. id:处于空闲的CPU百分比
  5. wa:系统等待IO的CPU时间百分比
  6. st:来自于一个虚拟机偷取的CPU时间比

2 3 表示:每隔2s打印一次数据,打印3次结束

free:查看内存状态

参数:

  • -b  以Byte为单位显示内存使用情况。
  • -k  以KB为单位显示内存使用情况。
  • -m  以MB为单位显示内存使用情况。
  • -h  以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。单位有:

    B = bytes
    K = kilos
    M = megas
    G = gigas
    T = teras
  • -o  不显示缓冲区调节列。
  • -s<间隔秒数>  持续观察内存使用状况。
  • -t  显示内存总和列。
  • -V  显示版本信息。

查看内存使用情况:

每2s执行一次命令:

df:硬盘查看命令

Size:总大小

User:已使用

Avail:剩余

Use:已使用的内存百分比

curl:文件传输

curl命令来自于英文词组”CommandLine URL“的缩写,其功能是用于在Shell终端界面中基于URL规则进行的文件传输工作。curl是一款综合的传输工具,可以上传也可以下载,支持HTTP、HTTPS、FTP等三十余种常见协议。

示例:cur [参数] 网址

1、获取指定网页的源码:curl URL

 2、打印指定网站的HTTP响应头信息:curl -i URL

3、发送请求:curl d JSON -X POST  URL 

curl不加参数默认发送的是get请求。

POST请求:curl -XPOST -d '{"name":"zhangsan"}' http://jsonplaceholder.typicode.com/posts

 PUT请求:curl -XPUT -d '{"name":"zlisi}' http://jsonplaceholder.typicode.com/posts/1

DLETE请求:curl -XDELETE http://jsonplaceholder.typicode.com/posts/1

 4、添加响应头:curl -XPOST -H 响应头 -d JSON URL

5、下载文件:curl -O URL

下载文件到当前文件夹[curl -O URL]:curl -O https://s2.loli.net/2022/01/05/l8nNYxIXBZpRt2P.jpg

 下载文件后自定义文件名[curl -o filename URL]:curl -o test.jpg  https://s2.loli.net/2022/01/05/l8nNYxIXBZpRt2P.jpg

 限制下载速度[curl --limit-rate ]:curl --limit-rate 100k -o test111.jpg https://s2.loli.net/2022/01/05/l8nNYxIXBZpRt2P.jpg

支持断点续传[curl -C - -o filename URL]:curl -C - -o test222.jpg  https://s2.loli.net/2022/01/05/l8nNYxIXBZpRt2P.jpg

6、获取更多的网页信息:curl -v URL

wget:下载网络资源

使用方法更curl的下载差不多,但是通过测试发现,效率是比curl要高,命令参考地址:https://www.linuxcool.com/wget

二、Linux基础命令

配置系统环境变量:~/.bashrc

前言:如何将:/usr/bin/mysql添加到环境变量,不然每次访问mysql都需要使用这条命令:/usr/bin/mysql -u root -p

1、编辑文件:~/.bashrc

vim ~/.bashrc

2、在文件的末尾添加以下一行代码

export PATH= "/usr/bin/mysql:$PATH"

3、重新加载配置文件

source ~/.bashrc

系统信息 

cat /etc/redhat-release 显示安装的系统版本
getconf LONG_BIT 显示系统是多少位的(32/64bit)
arch 显示机器的处理器架构(1) 
uname -m 显示机器的处理器架构(2) 
uname -r 显示正在使用的内核版本 
dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) 
hdparm -i /dev/hda 罗列一个磁盘的架构特性 
hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 
cat /proc/cpuinfo 显示CPU info的信息 
cat /proc/interrupts 显示中断 
cat /proc/meminfo 校验内存使用 
cat /proc/swaps 显示哪些swap被使用 
cat /proc/version 显示内核的版本 
cat /proc/net/dev 显示网络适配器及统计 
cat /proc/mounts 显示已加载的文件系统 
lspci -tv 罗列 PCI 设备 
lsusb -tv 显示 USB 设备 
date 显示系统日期 
cal 2007 显示2007年的日历表 
date 041217002007.00 设置日期和时间 - 月日时分年.秒 
clock -w 将时间修改保存到 BIOS

 关机 (系统的关机、重启以及登出 ) 

shutdown -h now 关闭系统(1) 
init 0 关闭系统(2) 
telinit 0 关闭系统(3) 
shutdown -h hours:minutes & 按预定时间关闭系统 
shutdown -c 取消按预定时间关闭系统 
shutdown -r now 重启(1) 
reboot 重启(2) 
logout 注销 

文件和目录

cd /home 进入  '/ home' 目录' 
cd .. 返回上一级目录 
cd ../.. 返回上两级目录 
cd 进入个人的主目录 
cd ~user1 进入个人的主目录 
cd - 返回上次所在的目录 
pwd 显示工作路径 
ls 查看目录中的文件 
ls -F 查看目录中的文件 
ls -l 显示文件和目录的详细资料 
ls -a 显示隐藏文件 
ls *[0-9]* 显示包含数字的文件名和目录名 
tree 显示文件和目录由根目录开始的树形结构(1) 
lstree 显示文件和目录由根目录开始的树形结构(2) 
mkdir dir1 创建一个叫做  'dir1' 的目录' 
mkdir dir1 dir2 同时创建两个目录 
mkdir -p /tmp/dir1/dir2 创建一个目录树 
rm -f file1 删除一个叫做  'file1' 的文件' 
rmdir dir1 删除一个叫做  'dir1' 的目录' 
rm -rf dir1 删除一个叫做  'dir1' 的目录并同时删除其内容 
rm -rf dir1 dir2 同时删除两个目录及它们的内容 
mv dir1 new_dir 重命名/移动 一个目录 
cp file1 file2 复制一个文件 
cp dir/* . 复制一个目录下的所有文件到当前工作目录 
cp -a /tmp/dir1 . 复制一个目录到当前工作目录 
cp -a dir1 dir2 复制一个目录 
ln -s file1 lnk1 创建一个指向文件或目录的软链接 
ln file1 lnk1 创建一个指向文件或目录的物理链接 
touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm) 
file file1 outputs the mime type of the file  as text 
iconv -l 列出已知的编码 
iconv -f fromEncoding -t toEncoding inputFile > outputFile creates a  new from the given input file  by assuming it  is encoded  in fromEncoding and converting it to toEncoding. 
find . -maxdepth 1 -name *.jpg -print -exec convert  "{}" -resize 80x60  "thumbs/{}" \; batch resize files  in the current directory and send them to a thumbnails directory (requires convert  from Imagemagick)

防火墙(基于Centos7)

1:查看防火状态
    systemctl status firewalld
    service  iptables status
    firewall-cmd --state
   systemctl list-unit-files|grep firewalld.service
2:暂时关闭防火墙
    systemctl stop firewalld
    service  iptables stop
3:永久关闭防火墙
    systemctl disable firewalld
    chkconfig iptables off
4:重启防火墙
    firewall-cmd --reload
    service iptables restart 
    systemctl restart firewalld.service
5:禁止开机自启
    systemctl disable firewalld.service
    chkconfig iptables off  

文件搜索 

find / -name file1 从  '/' 开始进入根文件系统搜索文件和目录 
find / -user user1 搜索属于用户  'user1' 的文件和目录 
find /home/user1 -name \*.bin 在目录  '/ home/user1' 中搜索带有 '.bin' 结尾的文件 
find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件 
find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件 
find / -name \*.rpm -exec chmod 755  '{}' \; 搜索以  '.rpm' 结尾的文件并定义其权限 
find / -xdev -name \*.rpm 搜索以  '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备 
locate \*.ps 寻找以  '.ps' 结尾的文件 - 先运行  'updatedb' 命令 
whereis halt 显示一个二进制文件、源码或man的位置 
which halt 显示一个二进制文件或可执行文件的完整路径

挂载一个文件系统 

mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘 - 确定目录  '/ mnt/hda2' 已经存在 
umount /dev/hda2 卸载一个叫做hda2的盘 - 先从挂载点  '/ mnt/hda2' 退出 
fuser -km /mnt/hda2 当设备繁忙时强制卸载 
umount -n /mnt/hda2 运行卸载操作而不写入 /etc/mtab 文件- 当文件为只读或当磁盘写满时非常有用 
mount /dev/fd0 /mnt/floppy 挂载一个软盘 
mount /dev/cdrom /mnt/cdrom 挂载一个cdrom或dvdrom 
mount /dev/hdc /mnt/cdrecorder 挂载一个cdrw或dvdrom 
mount /dev/hdb /mnt/cdrecorder 挂载一个cdrw或dvdrom 
mount -o loop file.iso /mnt/cdrom 挂载一个文件或ISO镜像文件 
mount -t vfat /dev/hda5 /mnt/hda5 挂载一个Windows FAT32文件系统 
mount /dev/sda1 /mnt/usbdisk 挂载一个usb 捷盘或闪存设备 
mount -t smbfs -o username=user,password=pass  //WinClient/share /mnt/share 挂载一个windows网络共享

磁盘空间 

df -h 显示已经挂载的分区列表 
ls -lSr |more 以尺寸大小排列文件和目录 
du -sh dir1 估算目录  'dir1' 已经使用的磁盘空间' 
du -sk * | sort -rn 以容量大小为依据依次显示文件和目录的大小 
rpm -q -a --qf  '%10{SIZE}t%{NAME}n' | sort -k1,1n 以大小为依据依次显示已安装的rpm包所使用的空间 (fedora, redhat类系统) 
dpkg-query -W -f= '${Installed-Size;10}t${Package}n' | sort -k1,1n 以大小为依据显示已安装的deb包所使用的空间 (ubuntu, debian类系统)

用户和群组

groupadd group_name 创建一个新用户组 
groupdel group_name 删除一个用户组 
groupmod -n new_group_name old_group_name 重命名一个用户组 
useradd -c  "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 创建一个属于  "admin" 用户组的用户 
useradd user1 创建一个新用户 
userdel user1 删除一个用户(只删除了用户,并未删除用户的配置文件)
userdel -r user1 删除了用户和用户的配置文件(*)
usermod -c  "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 修改用户属性 
passwd 修改口令 
passwd user1 修改一个用户的口令 (只允许root执行) 
chage -E 2005-12-31 user1 设置用户口令的失效期限 
pwck 检查  '/etc/passwd' 的文件格式和语法修正以及存在的用户 
grpck 检查  '/etc/passwd' 的文件格式和语法修正以及存在的群组 
newgrp group_name 登陆进一个新的群组以改变新创建文件的预设群组

批量添加用户

1、创建用户组

groupadd mixky

拿到组id(1003): cat /etc/group   

2、编辑用户文件

vim /home/user_name.txt

user001::1101:1003::/home/user001:/bin/bash
user002::1102:1003::/home/user002:/bin/bash
user003::1103:1003::/home/user003:/bin/bash
user004::1104:1003::/home/user004:/bin/bash
user005::1105:1003::/home/user005:/bin/bash

参数解释:  

  • user001 # 用户名
  • # 第1个冒号(:)表示密码被设置为加密形式存储,这里为空字符串表示没有密码
  • 1101 # 用户ID (UID)
  • 1103 # 主组ID (GID)
  • # 第2个冒号(:)表示用户说明信息为空
  • /home/user001 # 用户主目录
  • /bin/bash # 用户默认Shell

3、编辑用户密码文件

vim /home/user_pwd.txt

user001:123456
user002:123456
user003:123456
user004:123456
user005:123456

4、创建用户:newusers

newusers < /home/user_name.txt

5、取消 shadow password 功能

将 /etc/shadow 产生的 shadow 密码解码,然后回写到 /etc/passwd 中,并将/etc/shadow的shadow密码栏删掉。这是为了方便下一步的密码转换工作

pwunconv

6、设置用户密码

chpasswd  < /home/user_pwd.txt

7、恢复shadow  

pwconv

8、测试  

[root@MiWiFi-R3-srv home]# whoami 
root
[root@MiWiFi-R3-srv home]# su - user001
上一次登录:日 4月 23 09:58:51 CST 2023pts/0 上
-bash-4.2$ whoami
user001
-bash-4.2$ pwd
/home/user001

文件的权限 - 使用 "+" 设置权限,使用 "-" 用于取消 

ls -lh 显示权限 
ls /tmp | pr -T5 -W$COLUMNS 将终端划分成5栏显示 
chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r )、写(w)和执行(x)的权限 
chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限 
chown user1 file1 改变一个文件的所有人属性 
chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性 
chgrp group1 file1 改变文件的群组 
chown user1:group1 file1 改变一个文件的所有人和群组属性 
find / -perm -u+s 罗列一个系统中所有使用了SUID控制的文件 
chmod u+s /bin/file1 设置一个二进制文件的 SUID 位 - 运行该文件的用户也被赋予和所有者同样的权限 
chmod u-s /bin/file1 禁用一个二进制文件的 SUID位 
chmod g+s /home/ public 设置一个目录的SGID 位 - 类似SUID ,不过这是针对目录的 
chmod g-s /home/ public 禁用一个目录的 SGID 位 
chmod o+t /home/ public 设置一个文件的 STIKY 位 - 只允许合法所有人删除文件 
chmod o-t /home/ public 禁用一个目录的 STIKY 位

文件的特殊属性 - 使用 "+" 设置权限,使用 "-" 用于取消 

chattr +a file1 只允许以追加方式读写文件 
chattr +c file1 允许这个文件能被内核自动压缩/解压 
chattr +d file1 在进行文件系统备份时,dump程序将忽略这个文件 
chattr +i file1 设置成不可变的文件,不能被删除、修改、重命名或者链接 
chattr +s file1 允许一个文件被安全地删除 
chattr +S file1 一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘 
chattr +u file1 若文件被删除,系统会允许你在以后恢复这个被删除的文件 
lsattr 显示特殊的属性

包和压缩文件 

bunzip2 file1.bz2 解压一个叫做  'file1.bz2' 的文件 
bzip2 file1 压缩一个叫做  'file1' 的文件 
gunzip file1.gz 解压一个叫做  'file1.gz' 的文件 
gzip file1 压缩一个叫做  'file1' 的文件 
gzip -9 file1 最大程度压缩 
rar a file1.rar test_file 创建一个叫做  'file1.rar' 的包 
rar a file1.rar file1 file2 dir1 同时压缩  'file1' ,  'file2' 以及目录  'dir1'
rar x file1.rar 解压rar包 
unrar x file1.rar 解压rar包 
tar -cvf archive.tar file1 创建一个非压缩的 tarball 
tar -cvf archive.tar file1 file2 dir1 创建一个包含了  'file1' ,  'file2' 以及  'dir1' 的档案文件 
tar -tf archive.tar 显示一个包中的内容 
tar -xvf archive.tar 释放一个包 
tar -xvf archive.tar -C /tmp 将压缩包释放到 /tmp目录下 
tar -cvfj archive.tar.bz2 dir1 创建一个bzip2格式的压缩包 
tar -xvfj archive.tar.bz2 解压一个bzip2格式的压缩包 
tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包 
tar -xvfz archive.tar.gz 解压一个gzip格式的压缩包 
zip file1.zip file1 创建一个zip格式的压缩包 
zip -r file1.zip file1 file2 dir1 将几个文件和目录同时压缩成一个zip格式的压缩包 
unzip file1.zip 解压一个zip格式压缩包   

tar

其实最简单的使用 tar 就只要记忆下面的方式即可:
压 缩: time tar -zpcvf [压缩的文件.tar.gz] [被压缩的文件或目录名称]
查 询/预览:time tar -tvf [被压缩的文件或目录名称]
解压缩:time tar -zxvf etc.tar.gz [-C 欲解压缩的目录]

time tar -zpcvf etc.tar.gz /etc    # 压缩文件/目录

tar -tvf etc.tar.gz # 预览压缩文件内容
tar -tvf etc.tar.gz | grep  'reso*' # 检索压缩包中的文件名
tar -zxvf  etc.tar.gz etc/resolv.conf # 单独解压出来此文件,因为在打包时候没有/,所以此处不能写/etc

time tar -zxvf etc.tar.gz #解压文件


选项与参数: -c :创建打包文件,可搭配 -v 来察看过程中被打包的文件名(filename) -t :察看打包文件的内容含有哪些文件名,重点在察看“文件名”就是了; -x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开 特别留意的是, -c, -t, -x 不可同时出现在一串命令行中。 -z :通过 gzip 的支持进行压缩/解压缩:此时文件名最好为 *.tar.gz -j :通过 bzip2 的支持进行压缩/解压缩:此时文件名最好为 *.tar.bz2 -J :通过 xz 的支持进行压缩/解压缩:此时文件名最好为 *.tar.xz 特别留意, -z, -j, -J 不可以同时出现在一串命令行中 -v :在压缩/解压缩的过程中,将正在处理的文件名显示出来! -f filename:-f 后面要立刻接要被处理的文件名!建议 -f 单独写一个选项啰!(比较不会忘记) -C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。 其他后续练习会使用到的选项介绍: -p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件 -P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意; --exclude=FILE:在压缩的过程中,不要将 FILE 打包!

  

RPM 包 - (Fedora, Redhat及类似系统)

rpm -ivh package.rpm 安装一个rpm包 
rpm -ivh --nodeeps package.rpm 安装一个rpm包而忽略依赖关系警告 
rpm -U package.rpm 更新一个rpm包但不改变其配置文件 
rpm -F package.rpm 更新一个确定已经安装的rpm包 
rpm -e package_name.rpm 删除一个rpm包 
rpm -qa 显示系统中所有已经安装的rpm包 
rpm -qa | grep httpd 显示所有名称中包含  "httpd" 字样的rpm包 
rpm -qi package_name 获取一个已安装包的特殊信息 
rpm -qg  "System Environment/Daemons" 显示一个组件的rpm包 
rpm -ql package_name 显示一个已经安装的rpm包提供的文件列表 
rpm -qc package_name 显示一个已经安装的rpm包提供的配置文件列表 
rpm -q package_name --whatrequires 显示与一个rpm包存在依赖关系的列表 
rpm -q package_name --whatprovides 显示一个rpm包所占的体积 
rpm -q package_name --scripts 显示在安装/删除期间所执行的脚本l 
rpm -q package_name --changelog 显示一个rpm包的修改历史 
rpm -qf /etc/httpd/conf/httpd.conf 确认所给的文件由哪个rpm包所提供 
rpm -qp package.rpm -l 显示由一个尚未安装的rpm包提供的文件列表 
rpm --import /media/cdrom/RPM-GPG-KEY 导入公钥数字证书 
rpm --checksig package.rpm 确认一个rpm包的完整性 
rpm -qa gpg-pubkey 确认已安装的所有rpm包的完整性 
rpm -V package_name 检查文件尺寸、 许可、类型、所有者、群组、MD5检查以及最后修改时间 
rpm -Va 检查系统中所有已安装的rpm包- 小心使用 
rpm -Vp package.rpm 确认一个rpm包还未安装 
rpm2cpio package.rpm | cpio --extract --make-directories *bin* 从一个rpm包运行可执行文件 
rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm 从一个rpm源码安装一个构建好的包 
rpmbuild --rebuild package_name.src.rpm 从一个rpm源码构建一个 rpm 包

YUM 软件包升级器 - (Fedora, RedHat及类似系统) 

yum install package_name 下载并安装一个rpm包 
yum localinstall package_name.rpm 将安装一个rpm包,使用你自己的软件仓库为你解决所有依赖关系 
yum update package_name.rpm 更新当前系统中所有安装的rpm包 
yum update package_name 更新一个rpm包 
yum remove package_name 删除一个rpm包 
yum list 列出当前系统中安装的所有包 
yum search package_name 在rpm仓库中搜寻软件包 
yum clean packages 清理rpm缓存删除下载的包 
yum clean headers 删除所有头文件 
yum clean all 删除所有缓存的包和头文件

查看文件内容 

cat file1 从第一个字节开始正向查看文件的内容 
tac file1 从最后一行开始反向查看一个文件的内容 
more file1 查看一个长文件的内容 
less file1 类似于  'more' 命令,但是它允许在文件中和正向操作一样的反向操作 
head -2 file1 查看一个文件的前两行 
tail -2 file1 查看一个文件的最后两行 
tail -f / var /log/messages 实时查看被添加到一个文件中的内容

文本处理(cat、sed) 

grep Aug  /var/log/messages 在文件  '/var/log/messages' 中查找关键词 "Aug"
grep ^Aug  /var/log/messages 在文件  '/var/log/messages' 中查找以 "Aug" 开始的词汇 
grep [0-9]  /var/log/messages 选择  '/var/log/messages' 文件中所有包含数字的行 
grep Aug -R  /var/log/ * 在目录  '/var/log' 及随后的目录中搜索字符串 "Aug"

# s:这个选项代表"substitute"(替换)。
# g:这个选项代表"global"(全局)。
sed -i  's/string1/string2/g' example.txt 将example.txt文件中的  "string1" 替换成  "string2"

#删除xml文件中所有的注释以及空白行
sed -i  '/^\s*$/d; //d' server.xml
# 删除nginx.conf中所有注释以及空白行
sed -i  '/^[[:space:]]*#/d;/^[[:space:]]*$/d' nginx.conf
echo 'esempio' |  tr '[:lower:]' '[:upper:]' 合并上下单元格内容 
sed -e  '1d' result.txt 从文件example.txt 中排除第一行 
sed -n  '/stringa1/p' 查看只包含词汇  "string1" 的行 
sed -e  's/ *$//' example.txt 删除每一行最后的空白字符 
sed -e  's/stringa1//g' example.txt 从文档中只删除词汇  "string1" 并保留剩余全部 
sed -n  '1,5p;5q' example.txt 查看从第一行到第5行内容 
sed -n  '5p;5q' example.txt 查看第5行 
sed -e  's/00*/0/g' example.txt 用单个零替换多个零 


cat -n file1 标示文件的行数 
cat example.txt |  awk 'NR%2==1' 删除example.txt文件中的所有偶数行 
echo a b c |  awk '{print $1}' 查看一行第一栏 
echo a b c |  awk '{print $1,$3}' 查看一行的第一和第三栏 
paste file1 file2 合并两个文件或两栏的内容 
paste -d  '+' file1 file2 合并两个文件或两栏的内容,中间用 "+" 区分 

sort file1 file2 排序两个文件的内容 
sort file1 file2 |  uniq 取出两个文件的并集(重复的行只保留一份) 
sort file1 file2 |  uniq -u 删除交集,留下其他的行 
sort file1 file2 |  uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件) 

comm -1 file1 file2 比较两个文件的内容只删除  'file1' 所包含的内容 
comm -2 file1 file2 比较两个文件的内容只删除  'file2' 所包含的内容 
comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分

字符设置和文件格式转换 

dos2unix filedos.txt fileunix.txt 将一个文本文件的格式从MSDOS转换成UNIX 
unix2dos fileunix.txt filedos.txt 将一个文本文件的格式从UNIX转换成MSDOS 
recode ..HTML < page.txt > page.html 将一个文本文件转换成html 
recode -l | more 显示所有允许的转换格式

文件系统分析 

badblocks -v /dev/hda1 检查磁盘hda1上的坏磁块 
fsck /dev/hda1 修复/检查hda1磁盘上linux文件系统的完整性 
fsck.ext2 /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性 
e2fsck /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性 
e2fsck -j /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性 
fsck.ext3 /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性 
fsck.vfat /dev/hda1 修复/检查hda1磁盘上fat文件系统的完整性 
fsck.msdos /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性 
dosfsck /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性

备份 

dump -0aj -f /tmp/home0.bak /home 制作一个  '/home' 目录的完整备份 
dump -1aj -f /tmp/home0.bak /home 制作一个  '/home' 目录的交互式备份 
restore - if /tmp/home0.bak 还原一个交互式备份 
rsync -rogpav --delete /home /tmp 同步两边的目录 
rsync -rogpav -e ssh --delete /home ip_address:/tmp 通过SSH通道rsync 
rsync -az -e ssh --delete ip_addr:/home/ public /home/local 通过ssh和压缩将一个远程目录同步到本地目录 
rsync -az -e ssh --delete /home/local ip_addr:/home/ public 通过ssh和压缩将本地目录同步到远程目录 
dd bs=1M  if =/dev/hda | gzip | ssh user@ip_addr  'dd of=hda.gz' 通过ssh在远程主机上执行一次备份本地磁盘的操作 
dd  if =/dev/sda of=/tmp/file1 备份磁盘内容到一个文件 
tar -Puf backup.tar /home/user 执行一次对  '/home/user' 目录的交互式备份操作 
( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr  'cd /home/share/ && tar x -p' 通过ssh在远程目录中复制一个目录内容 
( tar c /home ) | ssh -C user@ip_addr  'cd /home/backup-home && tar x -p' 通过ssh在远程目录中复制一个本地目录 
tar cf - . | (cd /tmp/backup ; tar xf - ) 本地将一个目录复制到另一个地方,保留原有权限及链接 
find /home/user1 -name  '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents 从一个目录查找并复制所有以  '.txt' 结尾的文件到另一个目录 
find / var /log -name  '*.log' | tar cv --files- from =- | bzip2 > log.tar.bz2 查找所有以  '.log' 结尾的文件并做成一个bzip包 
dd  if =/dev/hda of=/dev/fd0 bs=512 count=1 做一个将 MBR (Master Boot Record)内容复制到软盘的动作 
dd  if =/dev/fd0 of=/dev/hda bs=512 count=1 从已经保存到软盘的备份中恢复MBR内容

网络 - (以太网和WIFI无线

ifconfig eth0 显示一个以太网卡的配置 
ifup eth0 启用一个  'eth0' 网络设备 
ifdown eth0 禁用一个  'eth0' 网络设备 
ifconfig eth0 192.168.1.1 netmask 255.255.255.0 控制IP地址 
ifconfig eth0 promisc 设置  'eth0' 成混杂模式以嗅探数据包 (sniffing) 
dhclient eth0 以dhcp模式启用  'eth0'

 

posted @ 2021-07-02 14:10  Java小白的搬砖路  阅读(508)  评论(0编辑  收藏  举报