对于 Intel CPU 来说,网上很多教程都说使用 cat /sys/class/thermal/thermal_zone0/temp
获取的值,除以 1000 就是 CPU 温度。在多数时候,这个值是 CPU 附近的温度,但不是 CPU 的温度。
执行以下命令可以看到系统中可以显示的温度的来源 (thermal_zone 从 0 开始):
root@dy:~# cat /sys/class/thermal/thermal_zone*/type
acpitz
TCPU
x86_pkg_temp
其中 x86_pkg_temp 所属的 thermal_zone 才是 CPU 的 thermal_zone。从输出中可以知道 x86_pkg_temp 属于 thermal_zone2,那么这样获取到的才是 CPU 的温度:
root@dy:~# cat /sys/class/thermal/thermal_zone2/temp
52000
最终的值除以 1000 就是 CPU 的温度,当前 CPU 52 度。
而对于 AMD CPU 来说,要这样找:
root@gen10:~# grep -r . /sys/class/hwmon/hwmon*/name
/sys/class/hwmon/hwmon0/name:k10temp
/sys/class/hwmon/hwmon1/name:fam15h_power
/sys/class/hwmon/hwmon2/name:amdgpu
root@gen10:~# grep -r . /sys/class/hwmon/hwmon*/temp*
/sys/class/hwmon/hwmon0/temp1_crit:100000
/sys/class/hwmon/hwmon0/temp1_crit_hyst:99000
/sys/class/hwmon/hwmon0/temp1_input:42125
/sys/class/hwmon/hwmon0/temp1_max:70000
/sys/class/hwmon/hwmon2/temp1_input:42000
/sys/class/hwmon/hwmon2/temp1_label:edge
注: 正常来说,第二条命令的输出应该还有一行 /sys/class/hwmon/hwmon0/temp1_label:CPU Temperature 表示 temp1 的值是 CPU 温度。
找到 k10temp 所在的目录是 /sys/class/hwmon/hwmon0 那么,这个目录下 temp1_input 的值除以 1000 就是 CPU 当前的温度。
移动硬盘通过 USB 连接到 Linux 系统之后会被自动识别。
但卸载移动硬盘除了使用 umount 命令卸载挂载点之外还需要使用 eject 命令移除移动硬盘。
运行 rm *.txt
前执行 echo rm *.txt
或 echo *.txt
看一下匹配结果。
如果要递归删除文件和目录,则可以使用 find
代替 rm -r
例如: find . -name "*.txt" -print
然后,如果结果符合预期,把 -print
改为 -delete
: find . -name "*.txt" -delete
基本所有的发行版都带有 watch
,它可以自动重复执行命令并显示执行结果。
watch [args] [cmd]
fdisk -l
和 parted -l
最详细。
df [options] device
显示文件系统的磁盘使用情况,空间数值计算默认使用 1k block:
lsblk
可以查看磁盘信息,但看不到使用情况。
du [option] [file [file]...]
显示每个文件和目录的磁盘使用空间:
-X <file>
或 --exclude-from=<file>
: 指定的 ( 目录内的 ) 文件中记录了要被排除的文件,要和 --exclude=( <file> | <dir> )
区分开。--exclude=( <file> | <dir> )
: 略过指定的目录或文件。-L<symbolLink>
或 --dereference<symbolLink>
: 显示符号链接的源文件大小。-l
或 --count-links
: 重复计算硬件链接的文件。一般只用 du -sh
。
全局的 http 代理:
export HTTP_PROXY=http://192.168.2.10:10811
export HTTPS_PROXY=http://192.168.2.10:10811
export http_proxy=http://192.168.2.10:10811
export https_proxy=http://192.168.2.10:10811
注意: 有些程序使用大写的环境变量,有些程序使用小写的环境变量,所以最好大小写都配置一下。当然,还有些程序不使用这些环境变量,比如 Firefox。
如果要持久化配置可以把上面的代码块写在 ~/.bashrc 里面,重启系统后全局生效。
top 命令的第五行最后一个指标 avail Mem 的含义是: 不发生 swap 的条件下,可分配给程序的内存大小。
VIRT 是进程使用的虚拟内存。RES 进程使用的未被 swap 的物理内存。SHR 共享内存大小。
command >file 2>&1
command >>file 2>&1
放在 > 后面的 & ,表示重定向的目标不是一个文件,而是文件描述符,内置的文件描述符有:
1 => stdout
2 => stderr
0 => stdin
即, 2>1 代表将 stderr 重定向到当前路径下文件名为 1 的普通文件中,而 2>&1 代表将 stderr 重定向到文件描述符为 1 的文件 (即 /dev/stdout) 中,这个文件就是 stdout 在文件系统中的映射。
此外,以下三种写法等价 (前两行的 &> 与 >& 视作整体):
&>file
>&file
>file 2>&1
注意 2>&1 一定要放在 stdout 重定向 >file 的后面。
两者顺序不一样,效果也不一样:
find /etc -name .bashrc >list 2>&1
find /etc -name .bashrc 2>&1 >list
第一条: 先将 stdout 的内容重定向到文件,此时文件 list 就是这个程序的 stdout,再将 stderr 重定向到 stdout,也就是文件 list。
可以近似地看成指针关系:
# 先执行 >list
stdout -> list
stderr -> stderr
# 再执行 2>&1
stdout -> list
stderr -> stdout (-> list)
第二条: 先将要输出到 stderr 的内容重定向到 stdout ,此时会产生一个 stdout 的拷贝,也就是有了 2 个 stdout。旧的 stdout 依旧负责程序的 stdout,新的 stdout 负责输出程序的 stderr。两个 stdout 相互独立互不影响。
# 先执行 2>&1
stdout -> stdout
stderr -> new_stdout
# 再执行 >list
stdout -> list
stderr -> new_stdout
测试延迟: 队列深度 1, bs=4k,模拟单个队列读写
吞吐: 队列深度 32, bs=128k,尽量跑满磁盘带宽
iops: 队列深度 32, bs=4k,要在最短的时间内多去读磁盘
测试小文件读写性能要测随机读写,测试大文件读写性能通常要测顺序读写。
测试顺序读 IOPS: fio -name=Seq_Read_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=read -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=20G -numjobs=1 -runtime=600 -filename=/dev/<device>
测试顺序写 IOPS: fio -name=Seq_Write_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=write -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=20G -numjobs=1 -runtime=600 -filename=/dev/<device>
测试随机写 IOPS: fio -name=Rand_Write_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=20G -numjobs=1 -runtime=600 -filename=/dev/<device>
测试随机读 IOPS: fio -name=Rand_Read_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=20G -numjobs=1 -runtime=600 -filename=/dev/<device>
测试混合读写: fio -name=Read_Write_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=randrw -rwmixread=70 -refill_buffers -norandommap -randrepeat=0 -ioengine=libaio -bs=4k -size=20G -numjobs=1 -runtime=600 -ioscheduler=noop
测试写吞吐量: fio -name=Write_BandWidth_Test -group_reporting -direct=1 -iodepth=32 -rw=write -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=1024k -size=20G -numjobs=1 -runtime=600 -filename=/dev/<device>
测试读吞吐量: fio -name=Read_BandWidth_Test -group_reporting -direct=1 -iodepth=32 -rw=read -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=1024k -size=20G -numjobs=1 -runtime=600 -filename=/dev/<device>