本文不完全总结实用的 shell
命令 1。
Updated: 2023 / 02 / 26
uname
命令 2,主要用于输出和系统本身相关的内容,包含内核的版本、硬件架构是32位还是64位即可。
以以下系统为例,
% uname -help
uname: illegal option -- h
usage: uname [-amnprsv]
% uname -a
Darwin X-MacBook-Pro.local 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:31 PDT 2021; root:xnu-7195.121.3~9/RELEASE_ARM64_T8101 arm64
% uname -s //输出内核名称
Darwin
% uname -n //输出网络节点上的主机名
X-MacBook-Pro.local
% uname -r //输出内核发行号
20.5.0
% uname -v //输出内核版本
Darwin Kernel Version 20.5.0: Sat May 8 05:10:31 PDT 2021; root:xnu-7195.121.3~9/RELEASE_ARM64_T8101
% uname -m //输出主机的硬件架构名称
arm64
% uname -p //输出处理器类型
arm
参考这里 3
$ uname -a
Linux itsfoss 4.4.0-97-generic '#'120-Ubuntu SMP Tue Sep 19 17:28:18 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
# Linux – 内核名称。如果在BSD或macOS上运行相同的命令,结果会有所不同。
# itsfoss – 主机名
# 4.4.0-97-generic – 内核版本(使用 -r 选项时所输出的内部版本号)
# #120-Ubuntu SMP Tue Sep 19 17:28:18 UTC 2017 – 这意味着Ubuntu已经编译了4.4.0-97-generic 120次。上次编译的时间戳为Tue Sep 19 17:28:18 UTC 2017。
# x86_64 – 机器架构
# x86_64 – 处理器架构
# x86_64 – 操作系统架构(您可以在64位处理器上运行32位操作系统)
# GNU/Linux – 操作系统。
$ uname -r //输出内核发行号
4.4.0-97-generic
# 意味着您正在运行Linux内核4.4.0-97,或者更笼统地说,您正在运行 Linux 内核版本4.4。
# 但是这里的其他数字是什么意思?
# 4 – 内核版本
# 4 – 重大修订
# 0 – 小修订
# 97 – 错误修复
# generic – 特定于发行版的字符串。对于Ubuntu,这意味着使用的是桌面版本。对于Ubuntu服务器版本,它将是server。
kernel
会将开机信息存储在 ring buffer
中。
dmesg
命令检查或控制内核环缓冲区,显示 Linux
系统启动信息。
您若是开机时来不及查看信息,可利用
dmesg
来查看。开机信息保存在/var/log/dmesg
文件里。
dmesg
命令的默认操作是从内核环缓冲区读取所有消息。
内核环缓冲区是一种数据结构,它记录与内核操作相关的消息。
环形缓冲区是一种特殊类型的缓冲区,总是一个恒定的大小,在新消息进入时删除最旧的消息。
使用 dmesg --help
看到,如下:
$ demsg --help
Usage:
dmesg [options]
Display or control the kernel ring buffer.
Options:
-C, --clear clear the kernel ring buffer
-c, --read-clear read and clear all messages
-D, --console-off disable printing messages to console
-E, --console-on enable printing messages to console
-F, --file <file> use the file instead of the kernel log buffer
-f, --facility <list> restrict output to defined facilities
-H, --human human readable output
-k, --kernel display kernel messages
-L, --color[=<when>] colorize messages (auto, always or never)
colors are enabled by default
-l, --level <list> restrict output to defined levels
-n, --console-level <level> set level of messages printed to console
-P, --nopager do not pipe output into a pager
-r, --raw print the raw message buffer
-S, --syslog force to use syslog(2) rather than /dev/kmsg
-s, --buffer-size <size> buffer size to query the kernel ring buffer
-u, --userspace display userspace messages
-w, --follow wait for new messages
-x, --decode decode facility and level to readable string
-d, --show-delta show time delta between printed messages
-e, --reltime show local time and time delta in readable format
-T, --ctime show human readable timestamp (may be inaccurate!)
-t, --notime don't print messages timestamp
--time-format <format> show time stamp using format:
[delta|reltime|ctime|notime|iso]
Suspending/resume will make ctime and iso timestamps inaccurate.
-h, --help display this help and exit
对应⬆️的中文版本为,
-c:显示信息后,清除ring buffer中的内容;
-s<缓冲区大小>:预设置为8196,刚好等于ring buffer的大小;
-n:设置记录信息的层级。
-C, --清楚 ring buffer.
-D, --console-off 禁用打印到控制台的消息。
-d, --show-delta 显示消息之间花费的时间戳和时间增量。 如果与--notime一起使用,则仅打印没有时间戳的时间增量。
-E, --console-on 启用打印消息到控制台。
-f, --facility list 将输出限制为已定义(逗号分隔)的设施列表。 对于所有支持的设施,请参阅--help输出。
-h, --help 打印帮助文本并退出。
-k, --kernel 打印内核消息。
-l, --level list 将输出限制为已定义(逗号分隔)的级别列表。 对于所有支持的级别,请参阅--help输出。
-n, --console-level level 设置将消息记录到控制台的级别。 级别是级别名称的级别编号或缩写。
例如,-n 1或-n警报可防止除紧急(恐慌)消息之外的所有消息出现在控制台上。
所有级别的消息仍然写入/ proc / kmsg,因此syslogd(8)仍可用于精确控制内核消息的显示位置。
使用-n选项时,dmesg不会打印或清除内核环缓冲区。 对于所有支持的级别,请参阅--help输出。
-r, --raw 打印原始消息缓冲区,即不剥离日志级别前缀。
-s, --buffer-size size 使用大小的缓冲区来查询内核环缓冲区。 默认情况下为16392。 如果已将内核缓冲区设置为大于默认值,则可以使用此选项查看整个缓冲区。
-T, --ctime 打印人类可读时间戳。 时间戳可能不准确; 在系统SUSPEND / RESUME之后,不会更新用于日志的时间源。
-t, --notime 不要打印内核的时间戳。
-u, --userspace 打印用户空间消息。
-V, --version 输出版本信息并退出。
-x, --decode 将设施和级别(优先级)编号解码为人类可读的前缀。
参考 4’ 5
dmesg | head
$ dmesg | head
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 3.10.0-957.10.1.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Mon Mar 18 15:06:45 UTC 2019
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.10.0-957.10.1.el7.x86_64 root=UUID=312381f6-4571-4cfa-b93b-7add4cbb8059 ro crashkernel=auto rhgb LANG=en_US.UTF-8 console=tty0 console=ttyS0,115200n8
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
[ 0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000bffd9fff] usable
dmesg | grep -i memory
$ dmesg | grep -i memory
[ 0.000000] Base memory trampoline at [ffff8f9340099000] 99000 size 24576
[ 0.000000] Reserving 161MB of memory at 688MB for crashkernel (System RAM: 8191MB)
[ 0.000000] Early memory node ranges
[ 0.000000] PM: Registered nosave memory: [mem 0x0009f000-0x0009ffff]
[ 0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000effff]
[ 0.000000] PM: Registered nosave memory: [mem 0x000f0000-0x000fffff]
[ 0.000000] PM: Registered nosave memory: [mem 0xbffda000-0xbfffffff]
[ 0.000000] PM: Registered nosave memory: [mem 0xc0000000-0xfeffbfff]
[ 0.000000] PM: Registered nosave memory: [mem 0xfeffc000-0xfeffffff]
[ 0.000000] PM: Registered nosave memory: [mem 0xff000000-0xfffbffff]
[ 0.000000] PM: Registered nosave memory: [mem 0xfffc0000-0xffffffff]
[ 0.000000] Memory: 4991300k/9437184k available (7668k kernel code, 1049120k absent, 400700k reserved, 6051k data, 1876k init)
[ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups
[ 0.357447] Initializing cgroup subsys memory
[ 1.004073] Freeing initrd memory: 18472k freed
[ 1.128259] Non-volatile memory driver v1.3
[ 1.130740] crash memory driver: version 1.1
[ 1.243076] Freeing unused kernel memory: 1876k freed
[ 1.248183] Freeing unused kernel memory: 512k freed
[ 1.250888] Freeing unused kernel memory: 600k freed
[ 1.700781] [TTM] Zone kernel: Available graphics memory: 4004426 kiB
[ 1.702519] [TTM] Zone dma32: Available graphics memory: 2097152 kiB
dmesg | grep sda
$ dmesg | grep sda
[ 2.442555] sd 0:0:0:0: [sda] 488281250 512-byte logical blocks: (250 GB/232 GiB)
[ 2.442590] sd 0:0:0:0: [sda] Write Protect is off
[ 2.442592] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 2.442607] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 2.447533] sda: sda1
[ 2.448503] sd 0:0:0:0: [sda] Attached SCSI disk
dmesg -L
$ dmesg -L
[ 0.000000] MTRR variable ranges enabled:
[ 0.000000] 0 base 0000C0000000 mask 3FFFC0000000 uncachable
[ 0.000000] 1 disabled
[ 0.000000] 2 disabled
[ 0.000000] 3 disabled
......
dmesg -T
为
dmesg
设置时间戳的方式,可参考 6
[95721.670363] device is closed
[95721.693207] device is closed
$ dmesg -T
[Fri Aug 31 17:55:32 2018] device is closed
[Fri Aug 31 17:55:32 2018] device is closed
dmidecode
命令可以让你在 Linux
系统下获取有关硬件方面的信息。dmidecode
的作用是将 DMI
数据库中的信息解码,以可读的文本方式显示。由于 DMI
信息可以人为修改,因此里面的信息不一定是系统准确的信息。
dmidecode
遵循 SMBIOS/DMI
标准,其输出的信息包括 BIOS
、系统、主板、处理器、内存、缓存等等。
DMI(Desktop Management Interface,DMI)
就是帮助收集电脑系统信息的管理系统,DMI
信息的收集必须在严格遵照 SMBIOS
规范的前提下进行。SMBIOS(System Management BIOS)
是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范。SMBIOS
和 DMI
是由行业指导机构 Desktop Management Task Force(DMTF)
起草的开放性的技术标准,其中 DMI
设计适用于任何的平台和操作系统。
DMI
充当了管理工具和系统层之间接口的角色。它建立了标准的可管理系统更加方便了电脑厂商和用户对系统的了解。DMI
的主要组成部分是 Management Information Format(MIF)
数据库。这个数据库包括了所有有关电脑系统和配件的信息。通过 `DMI``,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息。
root@baremetal-3-77 ~]# dmidecode [选项]
-d : (default:/dev/mem)从设备文件读取信息,输出内容与不加参数标准输出相同。
-h : 显示帮助信息。
-s : 只显示指定DMI字符串的信息。(string)
-t : 只显示指定条目的信息。(type)
-u : 显示未解码的原始条目内容。
--dump-binfile : 将DMI数据转储到一个二进制文件中。
--from-dumpFILE : 从一个二进制文件读取DMI数据。
-V : 显示版本信息。
-t
指令参数参考如下,
[root@baremetal-3-77 ~]# dmidecode -t [选项]
Type Information
────────────────────────────────────────────
0 BIOS # 查看BIOS相关的硬件信息
1 System # 查看系统相关的硬件信息
2 Baseboard # 查看主板相关的硬件信息
3 Chassis # 查看机箱相关的硬件信息
4 Processor # 查看处理器相关的硬件信息
5 Memory Controller # 查看内存控制的相关信息
6 Memory Module # 查看内存模块的相关信息
7 Cache # 查看缓存的相关信息
8 Port Connector # 查看端口连接器的相关信息
9 System Slots # 查看系统槽的相关信息
10 Onboard Devices # 查看系统机载装置的相关信息
11 OEM Strings # 查看系统OEM配置选项的相关信息
12 System Configuration Options # 查看系统获取的SMBIOS数据的相关信息
13 BIOS Language # 查看BIOS语言的相关信息
14 Group Associations # 查看系统组织协会的相关信息
15 System Event Log # 查看系统事件日志的相关信息
16 Physical Memory Array # 查看系统物理内存数组的相关信息
17 Memory Device # 查看系统存储设备的相关信息
18 32-bitMemory Error # 查看系统32位内存错误的相关信息
19 Memory Array Mapped Address # 查看系统存储阵列映射地址的相关信息
20 Memory Device Mapped Address # 查看系统存储设备映射地址的相关信息
21 Built-in Pointing Device # 查看系统内置定位设备的相关信息
22 Portable Battery # 查看系统便携式电池的相关信息
23 System Reset # 查看系统复位的相关信息
24 Hardware Security # 查看硬件安全的相关信息
25 System Power Controls # 查看系统功率控制的相关信息
26 Voltage Probe # 查看电压探针的相关信息
27 Cooling Device # 查看系统冷却装置的相关信息
28 Temperature Probe # 查看系统温度探测器的相关信息
29 Electrical Current Probe # 查看系统电流探头的相关信息
30 Out-of-band Remote Access # 查看系统远程访问的相关信息
31 Boot Integrity Services # 查看系统引导诚信服务的相关信息
32 System Boot # 查看系统启动的相关信息
33 64-bitMemory Error # 查看系统64位内存错误的相关信息
34 Management Device # 查看系统管理设备的相关信息
35 Management Device Component # 查看系统管理设备组件的相关信息
36 Management Device Threshold Data # 管理设备阈值数据的相关信息
37 Memory Channel # 查看系统内存通道的相关信息
38 IPMI Device # 查看系统IPMI设备的相关信息
39 Power Supply # 查看系统电力供应的相关信息
40 Additional Information # 查看系统额外的信息的相关信息
41 Onboard Devices Extended Information # 查看系统机载设备扩展信息的相关信息
42 Management Controller Host Interface # 查看系统管理控制器主机接口的相关信息
-s
指令参数参考如下,
bios-vendor # 查看bios供应商的相关信息
bios-version # 查看bios版本的相关信息
bios-release-date # 查看bios发布日期的相关信息
system-manufacturer # 查看系统制造商的相关信息
system-product-name # 查看系统产品名称的相关信息
system-version # 查看系统版本的相关信息
system-serial-number # 查看系统串行数量的相关信息
system-uuid # 查看系统uuid的相关信息
baseboard-manufacturer # 查看系统护板制造商的相关信息
baseboard-product-name # 查看系统护板产品名称的相关信息
baseboard-version # 查看系统护板版本的相关信息
baseboard-serial-number # 查看系统护板串行数量的相关信息
baseboard-asset-tag # 查看系统护板资产标签的相关信息
chassis-manufacturer # 查看系统底盘制造商的相关信息
chassis-type # 查看系统底盘类型的相关信息
chassis-version # 查看系统底盘版本的相关信息
chassis-serial-number # 查看系统底盘串行数量的相关信息
chassis-asset-tag # 查看系统底盘资产标签的相关信息
processor-family # 查看系统处理器的相关信息
processor-manufacturer # 查看系统处理器制造商的相关信息
processor-version # 查看系统处理器版本的相关信息
processor-frequency # 查看系统处理器频率的相关信息
[root@baremetal-3-77 ~]# dmidecode -t 1
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.
Handle 0x0100, DMI type 1, 27bytes
System Information
Manufacturer: Dell Inc.
Product Name: PowerEdge R630
Version: Not Specified
Serial Number: 316RG82
UUID: 4c4c4544-0031-3610-8052-b3c04f473832
Wake-up Type: Power Switch
SKU Number: SKU=NotProvided;ModelName=PowerEdge R630
Family: Not Specified
[root@baremetal-3-77 ~]# dmidecode -t 2
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.
Handle 0x0200, DMI type 2, 8bytes
Base Board Information
Manufacturer: Dell Inc.
Product Name: 0CNCJW
Version: A08
Serial Number: .316RG82.CN747515921090.
[root@baremetal-3-77 ~]# dmidecode -t processor
# CPU相关信息
[root@baremetal-3-77 ~]# dmidecode -t 4 | grep ID
ID: F2 060300FF FB EB BF
ID: F2 060300FF FB EB BF
# CPU ID
[root@baremetal-3-77 ~]# dmidecode -t 16
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.
Handle 0x1000, DMI type 16, 23bytes
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 3TB
Error Information Handle: Not Provided
Number Of Devices: 24
# 这里可以查看到当前服务器允许扩容的最大内存大小,从以上输出可知,该机器理论上支持的最大内存为3TB
# 然后使用以下命令查询机器可用的内存:
[root@baremetal-3-77 ~]# grep MemTotal /proc/meminfo
MemTotal: 263743724kB
# 可以看到机器可用的内存为263G,也即我们可以再扩3072G-263G内存。
% dmidecode --type bios
# dmidecode 3.1
Getting SMBIOS data from sysfs.
SMBIOS 3.0.0 present.
Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
Vendor: American Megatrends Inc.
Version: GL702ZC.305
Release Date: 05/10/2018
Address: 0xF0000
Runtime Size: 64 kB
ROM Size: 16 MB
Characteristics:
PCI is supported
BIOS is upgradeable
BIOS shadowing is allowed
Boot from CD is supported
Selectable boot is supported
BIOS ROM is socketed
EDD is supported
5.25"/1.2 MB floppy services are supported (int 13h)
3.5"/720 kB floppy services are supported (int 13h)
3.5"/2.88 MB floppy services are supported (int 13h)
Print screen service is supported (int 5h)
Serial services are supported (int 14h)
Printer services are supported (int 17h)
ACPI is supported
USB legacy is supported
Smart battery is supported
BIOS boot specification is supported
Targeted content distribution is supported
UEFI is supported
BIOS Revision: 5.12
rmdir
命令是 remove directory
的缩写,主要作用是删除文件夹。但是,该命令只能用于删除空文件夹,而如果文件夹非空的话则会报错 7。
$ rmdir folder
rmdir: failed to remove ‘folder': Directory not empty.
如果需要使用 rmdir
命令来删除一个文件夹的话,需要先将目标文件夹清空再进行删除。
rm
(英文全拼:remove
)命令用于删除一个文件或者目录 7’ 8。
其语法如下:
rm [options] name...
参数 | 含义 |
---|---|
-i |
删除前逐一询问确认; |
-f |
即使原档案属性设为唯读,亦直接删除,无需逐一确认; |
-r |
将目录及以下之档案亦逐一删除。 |
删除文件可以直接使用 rm
命令,若删除目录则必须配合选项 -r
,例如:
$ rm test.txt
$ rm:是否删除 一般文件 "test.txt"? y
$ rm homework
$ rm: 无法删除目录"homework": 是一个目录
$ rm -r homework
$ rm:是否删除 目录 "homework"? y
删除当前目录下的所有文件及目录,并且是直接删除,无需逐一确认命令行为:
$ rm -rf 要删除的文件名或目录
比如,
$ rm -rf test.txt
# 删除文件名 test.txt:
$ rm -rf test/
#删除目录 test,不管该目录下是否有子目录或文件,都直接删除:
sysmctl list-unit-files
centos
上的服务开机启动列表 9参考 10
ls
命令是 linux
下最常用的命令。ls
命令就是 list
的缩写。缺省下 ls
用来打印出当前目录的清单。
如果 ls
指定其他目录,那么就会显示指定目录里的文件及文件夹清单。
通过 ls
命令不仅可以查看 linux
文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限),查看目录信息等等。
命令格式:
ls [选项] [目录名]
参数 | 含义 |
---|---|
-a, –all |
列出目录下的所有文件,包括以 . 开头的隐含文件 |
-A |
同 -a ,但不列出 . (表示当前目录)和 .. (表示当前目录的父目录) |
-c |
配合 -lt :根据 ctime 排序及显示 ctime (文件状态最后更改的时间) 配合 -l :显示 ctime 但根据名称排序,否则:根据 ctime 排序 |
-C |
每栏由上至下列出项目 |
–color[=WHEN] |
控制是否使用色彩分辨文件。WHEN 可以是 never 、always 或 auto 其中之一 |
-d, –directory |
将目录象文件一样显示,而不是显示其下的文件。 |
-D, –dired |
产生适合 Emacs 的 dired 模式使用的结果 |
-f |
对输出的文件不进行排序,-aU 选项生效,-lst 选项失效 |
-g |
类似 -l , 但不列出所有者 |
-G, –no-group |
不列出任何有关组的信息 |
-h, –human-readable |
以容易理解的格式列出文件大小 (例如 1K 234M 2G ) |
–si |
类似 -h ,但文件大小取 1000 的次方而不是 1024 |
-H, –dereference-command-line |
使用命令列中的符号链接指示的真正目的地 –indicator-style =方式 指定在每个项目名称后加上指示符号<方式>:none (默认),classify (-F ),file-type (-p ) |
-i, –inode |
印出每个文件的 inode 号 |
-I, –ignore=样式 |
不印出任何符合 shell 万用字符<样式>的项目 |
-k |
即 –block-size=1K ,以 k 字节的形式表示文件的大小。 |
-l |
除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来。 |
-L, –dereference |
当显示符号链接的文件信息时,显示符号链接所指示的对象而并非符号链接本身的信息 |
-m |
所有项目以逗号分隔,并填满整行行宽 |
-o |
类似 -l ,显示文件的除组信息外的详细信息。 |
-r, –reverse |
依相反次序排列 |
-R, –recursive |
同时列出所有子目录层 |
-s, –size |
以块大小为单位列出所有文件的大小 |
-S |
根据文件大小排序 –sort=WORD 以下是可选用的 WORD 和它们代表的相应选项:extension -X status -c none -U time -t size -S atime -u time -t access -u version -v use -u |
-t |
以文件修改时间排序 |
-u |
配合 -lt ,显示访问时间而且依访问时间排序;配合 -l ,显示访问时间但根据名称排序; 否则,根据访问时间排序 |
-U |
不进行排序;依文件系统原有的次序列出项目 |
-v |
根据版本进行排序 |
-w, –width=COLS |
自行指定屏幕宽度而不使用目前的数值 |
-x |
逐行列出项目而不是逐栏列出 |
-X |
根据扩展名排序 |
-1 |
每行只列出一个文件 |
–help |
显示此帮助信息并离开 |
–version |
显示版本信息并离开 |
-alt
,list all by modified time
:Documents % ls -alt
total 1376
drwxr-xr-x 25 staff 800 Feb 26 13:34 Documents_2021-2023
-rw-r--r--@ 1 staff 14340 Feb 26 13:15 .DS_Store
drwxr-xr-x+ 929 staff 29728 Feb 25 11:07 ..
drwx------@ 16 staff 512 Feb 25 11:02 .
drwxr-xr-x 20 staff 640 Feb 25 11:02 Job Seeking
drwxr-xr-x 5 staff 160 Feb 25 11:00 CV
drwxr-xr-x 17 staff 544 Feb 9 21:35 CL
-rw-r--r--@ 1 staff 210945 Nov 11 12:17 历史.docx
-rw-r--r--@ 1 staff 165 Oct 10 19:34 .~geo.xlsx
--sort=time –la
,sort order, list all
-alrt
,list all by reverse modified time
:-rw-r--r--@ 1 staff 165 Oct 10 19:34 .~geo.xlsx
-rw-r--r--@ 1 staff 210945 Nov 11 12:17 历史.docx
drwxr-xr-x 17 staff 544 Feb 9 21:35 CL
drwxr-xr-x 5 staff 160 Feb 25 11:00 CV
drwxr-xr-x 20 staff 640 Feb 25 11:02 Job Seeking
drwx------@ 16 staff 512 Feb 25 11:02 .
drwxr-xr-x+ 929 staff 29728 Feb 25 11:07 ..
-rw-r--r--@ 1 staff 14340 Feb 26 13:15 .DS_Store
drwxr-xr-x 25 staff 800 Feb 26 13:34 Documents_2021-2023
-alc
,list all by created time
xueshanzhang@XUESHANs-MacBook-Pro Documents % ls -alc
total 1376
drwx------@ 16 staff 512 Feb 25 11:02 .
drwxr-xr-x+ 929 staff 29728 Feb 26 14:43 ..
-rw-r--r--@ 1 staff 14340 Feb 26 13:15 .DS_Store
-rw-r--r--@ 1 staff 165 Oct 10 19:34 .~geo.xlsx
drwxr-xr-x 17 staff 544 Feb 9 21:35 CL
drwxr-xr-x 5 staff 160 Feb 25 11:00 CV
drwxr-xr-x 25 staff 800 Feb 26 13:34 Documents_2021-2023
drwxr-xr-x 20 staff 640 Feb 25 11:02 Job Seeking
drwxr-xr-x 10 staff 320 Mar 14 2022 Personal Document
-rw-r--r--@ 1 staff 210945 Feb 25 11:01 历史.docx
-alrc
,list all by reverse created time
xueshanzhang@XUESHANs-MacBook-Pro Documents % ls -alrc
total 1376
-rw-r--r--@ 1 staff 210945 Feb 25 11:01 历史.docx
drwxr-xr-x 10 staff 320 Mar 14 2022 Personal Document
drwxr-xr-x 20 staff 640 Feb 25 11:02 Job Seeking
drwxr-xr-x 25 staff 800 Feb 26 13:34 Documents_2021-2023
drwxr-xr-x 5 staff 160 Feb 25 11:00 CV
drwxr-xr-x 17 staff 544 Feb 9 21:35 CL
-rw-r--r--@ 1 staff 165 Oct 10 19:34 .~geo.xlsx
-rw-r--r--@ 1 staff 14340 Feb 26 13:15 .DS_Store
drwxr-xr-x+ 929 staff 29728 Feb 26 14:43 ..
drwx------@ 16 staff 512 Feb 25 11:02 .
-alu
,list all by user access time
Documents % ls -alu
total 1376
drwx------@ 16 staff 512 Feb 25 11:02 .
drwxr-xr-x+ 929 staff 29728 Feb 26 14:43 ..
-rw-r--r--@ 1 staff 14340 Feb 25 11:06 .DS_Store
-rw-r--r-- 1 staff 0 Nov 15 2021 .localized
-rw-r--r--@ 1 staff 165 Oct 10 19:34 .~geo.xlsx
drwxr-xr-x 17 staff 544 Feb 9 21:35 CL
drwxr-xr-x 5 staff 160 Feb 25 11:00 CV
drwxr-xr-x 25 staff 800 Feb 26 13:34 Documents_2021-2023
drwxr-xr-x 20 staff 640 Feb 25 11:02 Job Seeking
drwxr-xr-x 10 staff 320 Mar 14 2022 Personal Document
-rw-r--r--@ 1 staff 210945 Feb 25 11:01 历史.docx
-alru
,list all by reverse user access time
xueshanzhang@XUESHANs-MacBook-Pro Documents % ls -alru
total 1376
-rw-r--r--@ 1 staff 210945 Feb 25 11:01 历史.docx
drwxr-xr-x 10 staff 320 Mar 14 2022 Personal Document
drwxr-xr-x 20 staff 640 Feb 25 11:02 Job Seeking
drwxr-xr-x 25 staff 800 Feb 26 13:34 Documents_2021-2023
drwxr-xr-x 5 staff 160 Feb 25 11:00 CV
drwxr-xr-x 17 staff 544 Feb 9 21:35 CL
-rw-r--r--@ 1 staff 165 Oct 10 19:34 .~geo.xlsx
-rw-r--r--@ 1 xueshanzhang staff 165 Nov 30 2021 .~XueshanZhang_Interview_20211018.pptx
-rw-r--r-- 1 xueshanzhang staff 0 Nov 15 2021 .localized
-rw-r--r--@ 1 xueshanzhang staff 14340 Feb 25 11:06 .DS_Store
drwxr-xr-x+ 929 xueshanzhang staff 29728 Feb 26 14:43 ..
drwx------@ 16 xueshanzhang staff 512 Feb 25 11:02 .
root
用户删除一个普通的文件,提示 permission denied
。该文件标红。原因可能是,设置了 chattr
权限保护:可以通过 lsattr
命令查看 11。
chatrr
权限是一种非常特殊的权限,它设置的属性对超级用户 root
也有效。只不过,它设置的属性也可以通过 root
来删除。
归根结底,chattr
的作用是防止用户(包括 root
)对文件或目录进行误操作(比如修改或删除)的一种保险手段。
chattr
命令的语法格式为:
chattr [±=][选项] 文件/目录
参数 | 含义 |
---|---|
+ |
增加权限(属性) |
- |
删除权限(属性) |
= |
设置权限(属性) |
权限具体类型:
权限类型 | 含义 |
---|---|
a |
设置 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有 root 才能设置这个属性。 |
i |
它可以让一个文件不能被删除、改名,设置连接也无法写入或添加数据。只有 root 才能设置这个属性。例如 chattr +i filename |
问题:已经去掉了某个文件的 i
属性和 a
属性,为什么还是不能删除???
原因在于该文件的所在目录的属性也要去掉。
如果去掉文件或目录的隐藏属性之后还是不能删除,那么查看父目录是否配置了不可删除的隐藏属性,若父目录有配置,文件也是不能删除的,需要逐级往上查看。
使用 chattr
命令配置文件或目录的隐藏属性后,可以使用 lsattr
命令查看 12。
lsattr
命令,用于显示文件或目录的隐藏属性,其基本格式如下:
[root@localhost ~]# lsattr [选项] 文件或目录名
常用选项有以下 3 种:
参数 | 含义 |
---|---|
-a |
后面不带文件或目录名,表示显示所有文件和目录(包括隐藏文件和目录) 例如, lsattr -a |
-d |
如果目标是目录,只会列出目录本身的隐藏属性,而不会列出所含文件或子目录的隐藏属性信息; 例如, lsattr -d /home/Desktop |
-R |
和 -d 恰好相反,作用于目录时,会连同子目录的隐藏信息数据也一并显示出来。 |
参考这里 13
fuser
命令是一个非常聪明的 unix
实用程序,用于查找正在使用某个文件、目录或socket
的进程。 它还提供有关拥有该进程的用户和访问类型的信息。
fuser
工具显示了使用指定文件或文件系统的每个进程的进程 ID(PID)
。
如果你的精简版运行 fuser
提示如下信息:
-bash: fuser: command not found
请执行如下命令安装:
[winbert@winbert-server ~]$ sudo yum -y install psmisc
man
命令可用于查看任何命令的帮助手册,但是学习新知识(尤其是 linux
命令)的最佳方法是通过阅读真实的示例,并且不断地在终端中键入命令。 在终端中运行以下命令,以获取有关 fuser
实用程序的使用选项的信息。
[winbert@winbert-server ~]$ fuser
No process specification given
Usage: fuser [-fMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE] [-k [-i] [-SIGNAL]] NAME...
fuser -l
fuser -V
Show which processes use the named files, sockets, or filesystems.
-a,--all display unused files too
-i,--interactive ask before killing (ignored without -k)
-k,--kill kill processes accessing the named file
-l,--list-signals list available signal names
-m,--mount show all processes using the named filesystems or block device
-M,--ismountpoint fulfill request only if NAME is a mount point
-n,--namespace SPACE search in this name space (file, udp, or tcp)
-s,--silent silent operation
-SIGNAL send this signal instead of SIGKILL
-u,--user display user IDs
-v,--verbose verbose output
-w,--writeonly kill only processes with write access
-V,--version display version information
-4,--ipv4 search IPv4 sockets only
-6,--ipv6 search IPv6 sockets only
- reset options
udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]
fuser
序可以与 -v
选项一起使用,该选项以详细模式运行该工具。
verbose
选项用于在计算机屏幕上生成详细输出,因此用户可以实时查看实用程序正在执行的操作。
[winbert@winbert-server ~]$ fuser -v .
USER PID ACCESS COMMAND
/home/winbert: winbert 1435 ..c.. bash
上面的输出显示,以详细模式运行时,fuser
会提供有关 USER
,PID
,ACCESS
和COMMAND
的信息。 ACCESS
下的 c
字符表示访问类型,表示“当前目录”。 访问类型很多,例如 e
(正在运行的可执行文件),r
(根目录),f
(打开文件。在默认显示模式下省略 f
),F
(用于写入的打开文件,在默认显示模式下省略 F
)和 m
(mmap
文件或共享库)。
有时您需要使用 TCP
和 UDP
套接字查找进程。 为了查找这些进程,需要使用 -n
选项。-n
选项用于选择相应的名称空间。
[root@huidukongjian-h4 docker]# fuser -v -n tcp 80
USER PID ACCESS COMMAND
80/tcp: root 27411 F.... docker-proxy
默认情况下,fuser
将同时在 IPv6
和 IPv4
套接字中查找,但是可以使用 -4
和 -6
选项更改默认选项。 -4
选项代表 IPv4
,-6
选项代表 IPv6
。 请注意,fuser
仅将 PID
输出到 stdout
,其他所有内容都发送到 stderr
。
fuser -v -n tcp 80
命令的结果显示,使用 docker
的进程的进程 ID
为 27411
,而用于启动该进程的命令为 docker-proxy
。 进程 ID
(PID
)可以以多种方式使用,其中之一是进程终止。 与 PID
一起使用时,kill
命令根据该进程 ID
终止进程。 fuser
还可用于终止访问特定文件的进程。 在以下命令中,-k
选项用于终止正在使用在端口 123
上运行的tcp
侦听器的进程。为确保用户不会杀死错误的进程,使用 -i
选项询问用户是否在终止进程之前进行确认。
fuser -i -k 123/tcp
123/tcp: 12216
Kill process 12216 ? (y/N)
Use The -6 Option To Look For IPv6 Sockets.
-m
选项可与 fuser
命令一起使用,以查找访问文件文件系统上文件的进程。 此选项需要文件名作为输入参数。
-m
选项非常有用,尤其是当用于发现正在访问文件系统的进程并标识要杀死的进程时。
以下命令显示所有访问 example.txt
所在的文件系统的进程。仔细查看 -m
选项如何与fuser
一起使用。
[root@huidukongjian-h4 docker]# fuser -v -m data/v2/config.json
USER PID ACCESS COMMAND
/root/docker-v2/data/v2/config.json:
root kernel mount /
root 1 .rce. systemd
root 2 .rc.. kthreadd
root 3 .rc.. rcu_gp
root 4 .rc.. rcu_par_gp
root 6 .rc.. kworker/0:0H-kbl
root 8 .rc.. mm_percpu_wq
......
参考 14’ 15
如果想在运行的 Linux
下访问其它文件系统中的资源的话,就要用挂载命令 mount
来实现。
在进行挂载之前,要明确几件事情:
umount
以后才会恢复正常。例如:你的
/home
目录下原来有/home/test1
与/home/test2
两个目录。如果此时你加入了一个新的磁盘,并将其直接挂载在/home
目录下,那么你原来的/home/test1
与/home/test2
这两个目录都会被隐藏(但不是覆盖)。当你将新的磁盘卸载掉之后,/home
目录下原来的东西都会再跑出来。
/etc/fstab
文件中,只有记录到这个文件中的磁盘在系统启动时才会自动挂载。不在这个文件中记录的磁盘挂载了关机后就自动卸载,开机后又需要自己手动挂载。实现自动挂载的方式参考本文的
自动挂载
部分。
mount [-参数] [设备名称] [挂载点]
其中,
设备名称
是指 与包括文件系统的磁盘或分区相关的设备文件
;
挂载点
是指 要mount到的目录
。
比如,
mount [-t 文件系统] LABEL=' ' 挂载点
# 使用磁盘的 Label name 来挂载磁盘
mount [-t 文件系统] UUID=' ' 挂载点
# 使用磁盘的 UUID 来挂载磁盘
# 尽量使用设备的 UUID 来挂载目录。因为相同的一个磁盘在不同的 Linux 系统中,文件名是很容易重复的,但是 UUID 是很难重复的
mount [-t 文件系统] 设备文件名 挂载点
# 使用磁盘的设备文件名来挂载磁盘
选项 | 含义 |
---|---|
-a |
依照配置文件 /etc/fstab 的数据将文件内未挂载的磁盘都挂载上来。 |
-l |
单纯的输入 mount 会显示目前挂载的信息,加上 -l 之后可增列 Label 名称 |
-t |
可以加上文件系统的种类名来指定预挂载的类型。Linux 常见支持的类型有:xfs 、ext3 、ext4 、reiserfs 、vfat 、iso9660 (光盘格式)、nfs 、cifs 、smbfs (后三种是网络文件系统类型)、auto (自动检测文件系统)。也可以不加上 -t 这个选项,系统会自动分析最恰当的文件系统来尝试挂载你需要的设备。那么系统是如何找出文件系统类型的呢? 由于文件系统几乎都有超级区块, Linux 可以通过分析超级区块搭配 Linux 自己的驱动程序去测试挂载,如果测试成功,就立刻自动使用该类型的文件系统挂载起来。系统只会指定某些部分的类型的文件系统进行上述的挂载测试 (主要参考下面这两个文件) - /etc/filesystems ,系统指定的测试挂载文件系统类型的优先级;- /proc/filesystems ,Linux 系统已经加载的文件系统类型Linux 支持的文件系统的驱动程序都写在如下的目录中:/lib/modules/$(uname -r)/kernel/fs/ 例如 ext4 的驱动程序就写在 /lib/modules/$(uname -r)/kernel/fs//ext4/ 这个目录下 ext4 的驱动程序就写在 /lib/modules/$(uname -r)/kernel/fs//ext4/ 这个目录下。 |
-f |
伪装 mount ,作出检查设备和目录的样子,但并不真正挂载文件系统。 |
-n |
在默认的情况下,系统会将实际挂载的情况即时写入 /etc/mtab 中,以利于其他程序的运行。但是在某些情况下(例如单人维护模式),为了避免问题会刻意不写入,此时就需要加上 -n 选项来实现不把安装记录在 /etc/mtab 文件中。 |
-r |
讲文件系统安装为只读。 |
-v |
详细显示安装信息。 |
-w |
将文件系统安装为可写,为命令默认情况。 |
-o |
后面可以接一些挂载时额外加上的参数。比如账号、密码、读写权限等。 使用多个 -o 参数的时候,-o 只用一次,参数之间用半角逗号隔开,比如 mount –o remount,rw 。可与 mount 搭配的参数如下:async ,sync ,此文件系统是否使用同步写入的内存机制。默认为async ;atime ,noatime ,文件系统是否会修改文件的读取时间。为了性能,某些时刻会使用 noatime 。ro ,rw ,文件系统是只读 (ro ) 还是可读写 (rw );auto ,noauto ,文件系统是否以 mount -a 自动挂载;dev ,nodev ,文件系统是否可建立设备文件suid ,nosuid ,文件系统是否含有 suid / sgid 的文件格式;exec ,noexec ,文件系统是否拥有可执行的二进制文件user ,nouser ,是否允许文件系统让任何使用者执行mount 。一般来说,mount 仅有 root 可以进行defaults ,默认值为 rw 、suid 、dev 、exec 、auto 、nouser 、async remount ,重新挂载。这在系统出错,或重新更新参数时很有用codepage=数值 ,挂载时指定挂载文件系统所使用的语系。在 man mount 找到 vfat 文件格式当中可以使用codepage 来处理 (中文语系为 950 ) iocharset=编码名 ,指定中文是Unicode 还是 Big5 。loop ,Linux 下的文件制作 loop 设备挂载时时会用到 |
--bind |
挂载不特定目录,将一个挂载目录挂载到另一个目录下 |
单独使用 mount
也可以查看系统下所有设备文件的挂载情况,如下图所示,
例如要挂载 windows
下文件系统为 FAT32
的 D
盘,一般而言在 Linux
下这个分区对应 /dev/hda5
,根据具体的分区情况会有不同,这里就以 hda5
来举例说明:
$ mkdir /mnt/hda5 //创建hda5的目录作为挂载点,位置和目录名可自定义//
$ mount -t vfat /dev/hda5 /mnt/hda5
一般而言,Linux
会自动探测分区的文件系统,除非让你指定时,否则 -t vfat
可以省掉。
$ mount /dev/hda5 /mnt/hda5
这样就可以进入 /mnt/hda5
目录去访问分区中的资源了。
还可以参考这里 16 如何挂载 SMB
文件系统。
在给系统新增了磁盘以后,如果重启系统我们会发现找不到存储了。这是因为关机后,挂载已经自动卸载掉了。我们当然可以手动再次将其挂载,但如果每次重启都需要这样手动操作会很不方便;因此我们可以利用自动挂载,这样系统每次开机的时候就可以自动将磁盘挂载上去了。
自动挂载可以有两种方式:
/etc/fstab
文件Linux
提供了开机自动挂载分区的功能,我们可以通过一个名为 /etc/fstab
的配置文件,来指定需要在开机时挂载的分区。
用 vim
打开 fstab
文件,可以看到文件格式如下:
#
# /etc/fstab
# Created by anaconda on Tue Oct 20 11:50:19 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_minimal-LogVol00 / ext4 defaults 1 1
UUID=f8066e4a-e1df-4815-9d6e-c74a6811ba5e /boot ext4 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
可以很明显的看到文件有6列,
/dev
目录下的设备文件,例如 /dev/sdd1
,也可以通过设备标签或者所谓的 UUID
来指定要挂载的设备,如 LABEL=某个设备标签
或 UUID=某个设备UUID
。用设备标签或 UUID
更加安全和稳定。swap
是没有挂载点,该处就显示 swap
。;ext4
,swap
或者 iso9600。defaults
就可以;dump
备份,置 0
为不备份,置 1
,2
为备份,但 2
的备份重要性比 1
小;fsck
检验所挂载的磁盘,置 0
为不检验,置 1
,2
为检验,但置 2
盘比置 1
的盘晚检验。本文需将逻辑卷 lv_study
挂载到 /lv_study
,文件系统为 ext4
格式,不进行 dump
备份以及开机磁盘检查。
/dev/mapper/lv_study /lv_study ext4 defaults 0 0
如果需要根据指定用户名和密码,则:
/dev/mapper/lv_study /lv_study ext4 username=USER, password=PWD 0 0
将上面的命令添加进 fstab
后,为了避免可能的错误,我们可以使用 mount -a
命令来检验编辑的内容是否有错。
执行 mount -a
命令后,用 df -h
查看会发现磁盘已经挂载成功,说明输入没有错误。下次重启的时候系统就可以自动进行挂载了。
注意:
(1)根目录必须优先于其他挂载点
(2)挂载点必须为已经存在的目录
(3)卸载时必须保证当前磁盘没有发生读写操作
/etc/rc.d/rc.local
文件vim
打开 fstab
文件,可以看到文件格式如下:mount
命令 mount /dev/mapper/lv_study /lv_study
添加进 rc.local
文件是另一种实现开机自动挂载的方式。参考这里 17
Linux
下挂载后的分区或者磁盘某些时候需要 umount
的时候出现类似 umount: /mnt: target is busy.
等字样,或者 umount: /xxx: device is busy.
,如下所示:
该报错通常是由于待卸载磁盘正在使用,导致无法直接卸载。需要将当前使用数据盘的进程杀掉,才能卸载。
1.1 安装 fuser
[root@server-10 ~]# yum install psmisc
1.2 查看与待卸载磁盘有关的进程
[root@server-10 ~]# fuser -mv /mnt/
USER PID ACCESS COMMAND
/mnt: root kernel mount /mnt
root 13830 ..c.. bash
1.3 杀死相关进程(强制 kill
进程可能会导致数据丢失,请确保数据得到有效备份后,再进行相关操作),并再次查看
[root@server-10 ~]# fuser -kv /mnt/
USER PID ACCESS COMMAND
/mnt: root kernel mount /mnt
root 13830 ..c.. bash
[root@server-10 ~]# fuser -mv /mnt/
USER PID ACCESS COMMAND
/mnt: root kernel mount /mnt
1.4 确认无进程连接后,使用 umount
卸载命令
[root@server-10 ~]# umount /mnt/
[root@server-10 ~]# lsof /mnt/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 16302 root cwd DIR 8,17 50 64 /mnt
找到 PID
对应的进程或者服务,然后杀死或者停止相应服务即可。
参考这里 18
显示问号表明你的系统中没有可识别使用的中文字体,请先安装中文字体。确保你的系统已经可以很好的显示中文。显示为乱码一般是 mount
默认使用的文件系统编码和文件系统中文件的实际编码不一致造成的。要想正常显示中文文件,mount
时需要用到 -o
参数里的 codepage
和 iocharset
选项。codepage
指定文件系统的代码页,简体中文中文代码是 936
;iocharset
指定字符集,简体中文一般用 cp936
或 gb2312
。
$ mount –o iocharset=gb2312 codepage=936 /dev/hda5 /mnt/hda5
一般来说 mount –o iocharset=cp936 /dev/hda5 /mnt/hda5
就可以解决问题了。
如果这样做了以后还有问题,请尝试 UTF-8
编码:
# mount –o iocharset=utf8 /dev/hda5 /mnt/hda5
参考这里 18
mount
上去以后分区普通用户不可写。
mount
时加上 –oumask=000
即可:
$ mount –o umask=000, iocharset=cp936 /dev/hda5 /mnt/hda5
参考这里 18
mount
上去后的分区中的文件都变成短文件名了?
这是文件系统挂错的原因,将 FAT32
挂载成 FAT16
时就会出现这种情况,先 umount
,然后用 –t vfat
重新挂载即可解决问题。
$ mount –t vat /dev/hda5 /mnt/hda5
参考这里 18
不能 mount ntfs
分区?
这是内核不支持 NTFS
文件系统的原因,请重新编译内核或者安装内核的 NTFS
文件系统支持包,以使得内核有 NTFS
文件系统的支持。
参考这里 18
如何挂载U盘和mp3?
如果计算机没有其它 SCSI
设备和 usb
外设的情况下,插入的 U盘
的设备路径是 /dev/sda1
,用命令:
$ mkdir /mnt/u
$ mount /dev/sda1 /mnt/u
挂载即可。
参考这里 18
可以直接使用iso文件吗?
可以,就是 mount
的这一选项使得 Linux
下有免费虚拟光驱的说法,具体用法是:
$ mkdir /mnt/iso
$ mount –o loop linux.iso /mnt/iso
当然,挂载以后挂载点 /mnt/iso
也是只读的。
参考这里 18
怎么不可以 mount iso
文件?
一般而言,大多数的发行版使用的内核均已将 loop
设备的支持编译进去了,但是也有没有的情况,所以请确保系统所使用的内核支持 loop
设备。
第二种情况是 iso
文件被放置到了 NTFS
或其它只读文件系统中了。挂载 loop
设备必须要求挂载到一个可写的分区中,目前 Linux
内核对 NTFS
文件系统的写支持非常有限,请将 iso
文件复制到其它可写文件系统中后再挂载。
参考这里 18
如何挂载光驱和软驱?
一般来说 CDROM
的设备文件是 /dev/hdc
,软驱的设备名是 /dev/fd0
$ mkdir /mnt/cdrom
$ mount /dev/hdc /mnt/cdrom //挂载光驱 //
$ mkdir /mnt/floppy
$ mount /dev/fd0 /mnt/floppy //挂载软驱 //
为何挂载的 CD-ROM
不能显示中文文件?
使用 –o iocharset=cp936
选项一般能解决问题,否则使用 utf-8
编码。
$ mount –o iocharset=cp936 /dev/hdc /mnt/cdrom
如何开机自动挂载分区?
每次挂载都要输入那么长的命令的确是繁琐了些,只要将分区信息写到 /etc/fstab
文件中即可实现系统启动的自动挂载,例如对于 /dev/hda5
的自动挂载添加如下的行即可:
/dev/hda5 /mnt/hda5 vfat defaults,iocharset=cp936, rw 0 0
如何挂载 samba
分区?
$ mkdir /mnt/share
$ mount -t smbfs -ousername=root,password=abc,codepage=936,iocharset=gb2312//192.168.1.100/share /mnt/share
如果中文显示不正常请尝试 UTF-8
编码。当然可以写到 fstab
中实现自动挂载。
mount--bind
是什么意思?
mount --bind
是将一个目录中的内容挂载到另一个目录上,用法是
$ mount --bind olddir newdir
这个命令使得自己搭建的 FTP
要共享某个目录的时候变得特别方便。如果要取消 mount
用命令:
$ mount --move olddir newdir
即可。
如果 mount --bind
也想写入 fstab
中的话格式如下:
olddir newdir none bind 0 0
umount [选项] 设备文件名/挂载点
参数 | 含义 |
---|---|
-f |
强制卸载,可用在类似网络文件系统(NFS )无法读取的情况下 |
-l |
立刻卸载文件系统,比 -f 还强 |
-n |
不更新 /etc/mtab 情况下卸载 |
譬如 /dev/hda5
已经挂载在 /mnt/hda5
上, 用一下三条命令均可卸载挂载的文件系统
$ umount /dev/hda5
$ umount /mnt/hda5
$ umount /dev/hda5 /mnt/hda5
为什么 umount
的时候老显示 device busy
?
这是因为有程序正在访问这个设备,最简单的办法就是让访问该设备的程序退出以后再 umount
。可能有时候用户搞不清除究竟是什么程序在访问设备。
如果用户不急着 umount
,则可以用:
$ umount -l /mnt/hda5
来卸载设备。选项 –l
并不是马上 umount
,而是在该目录空闲后再 umount
。还可以先用命令 ps aux
来查看占用设备的程序 PID
,然后用命令 kill
来杀死占用设备的进程,这样就 umount
的非常放心了。
参考此处 19
echo
在 php
中是输入,那么在 linux
中是不是也是输入呢?当然 echo
在linux
也是输入,不过它的用法比 php
强大多了,可以带参数。
echo
命令用于在 shell
中打印 shell
变量的值,或者直接输出指定的字符串。linux
的 echo
命令,在 shell
编程中极为常用, 在终端下打印变量 value
的时候也是常常用到的,因此有必要了解下 echo
的用法。
echo
命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。
echo (选项) (参数) 选项
参数 | 含义 |
---|---|
-e |
激活转义字符。使用 -e 选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:\a ,发出警告声;\b ,删除前一个字符;\c ,最后不加上换行符号;\f ,换行但光标仍旧停留在原来的位置;\n ,换行且光标移至行首;\r ,光标移至行首,但不换行;\t ,插入 tab ;\v 与 \f 相同;\\ ,插入 \ 字符;\nnn ,插入 nnn (八进制)所代表的 ASCII 字符; |
echo -e "\e[1;31mThis is red text\e[0m"
\e[0m
,将颜色重新置回
颜色码:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37
echo -e "\e[1;41This is red text.\e[0m
\e[0m
,将颜色重新置回
颜色码:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47
echo -e "\033[字背景颜色;字体颜色m字符串\033[0m"
echo -e "\033[37;31;5mMySQL Server Stop...\033[39;49;0m"
还有其他数字参数:0 关闭所有属性、1 设置高亮度(加粗)、4 下划线、5 闪烁、7 反显、8 消隐
$ echo -e "a\bdddd" // 前面的a会被擦除
dddd
$ echo -e "a\adddd" // 输出同时会发出报警声音
adddd
$ echo -e "a\ndddd" // 自动换行
a
dddd
^C
会向前台进程群组中的所有进程发送 SIGINT
信号。用 kill
命令达到相同的目的,应该发送 kill -SIGINT -
给进程群组(OS-level概念),或者 kill -SIGINT %
发送给 job
(shell-level
概念,以 &
结尾的 pipeline
) 20。
date
命令用来显示系统日期和时间,也可以用于设置系统日期和时间。默认情况下,date
命令显示 linux
系统所配置的时区的日期。只有 root
账户才能改变日期和时间 21。
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
date +%[format-option]
命令 | 作用 | 输出 |
---|---|---|
date |
显示当前的日期和时间。 | $ date Sun Sep 4 21:31:36 CST 2022 |
date -u |
显示格林尼治时间 / UTC 时区。 | $ date -u Sun Sep 4 13:38:09 UTC 2022 |
date -d date --date |
根据给定字符串以日期格式显示。这并不会影响系统的真实日期和时间的值。 | $ date --date "09/04/2022" Sun Sep 4 00:00:00 CST 2022 $ date -d "09/04/2022" Sun Sep 4 00:00:00 CST 2022 $ date --date "Sep 4 2022" Sun Sep 4 00:00:00 CST 2022 |
date --date |
显示过去的时间 | $ date --date "2 year ago" Fri Sep 4 22:11:42 CST 2022 2 年前的日期和时间 $ date --date “yesterday" Sat Sep 3 22:15:29 CST 2022 昨日的日期和时间 $ date --date "1 month ago" Thu Aug 4 22:15:29 CST 2022 上个月的日期和时间 |
date --date |
显示将来的时间 | $ date --date "next tue" Tue Sep 6 00:00:00 CST 2022 下个周二的日期和时间 $ date --date "1 year" Mon Sep 4 22:15:29 CST 2023 明年的日期和时间 |
date -s date --set |
设置系统日期和时间 | $ date --set="Tue Nov 13 15:23:34 PDT 2018" $ date Tue Nov 13 15:23:34 PDT 2018 |
date -f date --file |
在每行以日期和时间的格式显示日期字符串。与 -date 选项相近,但区别是 -date 只能赋1个日期字符串但是在1个文件中给出多个日期字符串 |
$ cat >> datefile Sep 23 2018 Nov 03 2019 $ date --file=datefile Sun Sep 23 00:00:00 PDT 2018 Sun Nov 3 00:00:00 PDT 2019 |
date -r |
用以显示一个 datefile 的最后修改时间 |
|
date +%[format-option] |
可搭配 date 命令使用的格式列表:%D : Display date as mm/dd/yy. %d : Display the day of the month (01 to 31).%a : Displays the abbreviated name for weekdays (Sun to Sat).%A : Displays full weekdays (Sunday to Saturday).%h : Displays abbreviated month name (Jan to Dec).%b : Displays abbreviated month name (Jan to Dec).%B : Displays full month name(January to December).%m : Displays the month of year (01 to 12).%y : Displays last two digits of the year(00 to 99).%Y : Display four-digit year. %T : Display the time in 24 hour format as HH:MM:SS .%H : Display the hour.%M : Display the minute.%S : Display the seconds. |
$ date "+%D" 10/11/17 $ date "+%D %T" 10/11/17 16:13:27 $ date "+%Y-%m-%d" 2017-10-11 $ date "+%Y/%m/%d" 2017/10/11 $ date "+%A %B %d %T %y" Thursday October 07:54:29 12 17 |
参考这里 22。
命令 | 说明 |
---|---|
rpm -i example rpm |
安装 example.rpm 包。 |
rpm -iv example.com |
安装 example.rpm 包并在安装过程中显示正在安装的文件信息。 |
rpm -ivh example.com |
安装 example.rpm 包并在安装过程中显示正在安装的文件信息及安装进度。 |
rpm -qa | grep example.rpm | 查看安装完成的软件 example.rpm |
rpm -e --nodepvs example.rpm |
要卸载的安装包 example.rpm |
命令 | 说明 |
---|---|
shutdown -h now |
立刻进行关机。 |
shutdown -r now |
现在重新启动计算机。 |
shutdown -h now
和 shutdown -r now
必须是root用户或者具有root权限的用户才能使用 23。
halt
(立刻进行关机) 和 reboot
(现在重新启动计算机) 是 Linux
系统中的任何用户都可使用用来关机,不需要 root
权限 23。
参考 24‘ 25‘ 26’ 27
lspci
代表 pci
列表,可将此命令视为 ls
+ pci
。
它这将显示有关服务器中所有 PCI
总线的信息。除了显示有关总线的信息外,它还将显示有关连接到您的 PCI
和 PCIe
总线的所有硬件设备及驱动程序的信息。
例如,它将显示有关以太网卡、RAID
控制器、视频卡等的信息。
lspci
实用程序是 pciutils
28 软件包的一部分,可用于各种基于 Linux
和 BSD
的操作系统。
如果您没有 pciutilis
,请将其安装在您的系统上,比如 yum install pciutils
。
由于访问权限,普通用户运行
lspci
时显示的信息可能会受限,因此可以使用sudo
运行命令,系统会给出完整的信息图。
为了能使用这个命令所有功能,你需要 linux 2.1.82
或以上版本,支持 /proc/bus/pci
接口的核心。在旧版本核心中,PCI
工具必须使用只有 root
才能执行的直接硬体访问,而且总是出现竞争状况以及其他问题。
如果你要报告 PCI
设备驱动中,或者是 lspci
自身的 bugs
,请在报告中包含 lspci -vvx
的输出。
选项 | 含义 |
---|---|
-m |
以机器可读的方式转储 PCI 设备数据 (支持两种模式:普通和冗余),便於稿本解析。 |
-mm |
|
-t |
以树格式显示输出,其中包含有关总线的信息,以及设备如何连接到这些总线。 |
选项 | 含义 |
---|---|
-v |
使得 lspci 以冗余模式显示所有设备的详细信息。 |
-vv |
使得 lspci 以过冗余模式显示更详细的信息 (事实上是 PCI 设备能给出的所有东西)。这些数据的确切意义没有在此手册页中解释,如果你想知道更多,请参照 /usr/include/linux/pci.h 或者 PCI 规范。 |
-vvv |
|
-k |
显示内核加载了哪些驱动程序模块。注意,此选项仅适用于 Kernel 2.6 及更高版本。 |
-x |
以十六进制显示 PCI 配置空间 (configuration space ) 的前 64 个字节映像 (标准头部信息)。此参数对调试驱动和 lspci 本身很有用。 |
-xxx |
以十六进制显示所有 PCI 配置空间的映像。此选项只有 root 可用,并且很多 PCI 设备在你试图读取配置空间的未定义部分时会崩溃 (此操作可能不违反 PCI 标准,但是它至少非常愚蠢)。 |
-xxxx |
|
-b |
以总线为中心进行查看。显示所有 IRQ 号和记忆体地址,就像 PCI 总线上的卡看到的一样,而不是核心看到的内容。 |
-D |
总是显示 PCI 域值。默认情况下,当只有 0 域时,lspci 会略过显示域值。 |
选项 | 含义 |
---|---|
-n |
以数字形式显示 PCI 生产厂商和设备号,而不是在 PCI ID 数据库中查找它们。 |
-nn |
显示供应商和设备 ID 号。设备名称后的方括号内有用冒号分隔的数字,即供应商和设备 ID 。 |
-q |
|
-qq |
|
-Q |
新设备和供应商总是在不断迭代。如果看到显示为 unknown 的设备,说明你的 PCI 设备 ID 数据库可能已过时。有两种方法可以检查更新。-Q 选项会使用 DNS 查询中央数据库,当然,这需要联网。还可以通过运行命令 update-pciids 来更新本地 PCI ID 数据库。 |
选项 | 含义 |
---|---|
-s [[ |
仅显示指定总线、插槽上的设备或设备上的功能块信息。设备地址的任何部分都可以忽略,或以 「*」 代替 (意味著所有值)。所有数字都是十六进制。例如:「0:」 指的是在 0 号总线上的所有设备;「0」 指的是在任意总线上 0 号设备的所有功能块;「0.3」 选择 了所有总线上 0 号设备的第 3 个功能块;「.4」 则是只列出每一设备上的第四个功能块。 |
-d [ |
只显示指定生产厂商和设备 ID 的设备。这两个 ID 都以十六进制表示,可以忽略或者以 「*」 代替 (意味著所有值)。 |
选项 | 含义 |
---|---|
-i |
使用 作为 PCI ID 数据库而不是使用预设的 /usr/share/hwdata/pci.ids 。 |
-p |
使用 作为包含 PCI 总线信息的目录而不是使用预设的目录 /proc/bus/pci 。 |
-M |
使用总线映射模式,这种模式对总线进行全面地扫描以查明总线上的所有设备,包括配置错误的桥之后的设备。请注意,此操作只应在调试时使 用,并可能造成系统崩溃 (只在设备有错误的时候,但是不幸的是它们存在),此命令只有 root 可以使用。同时,在不直接接触硬体的 PCI 访问模式中使用 -M 参数没有意义,因为显示的结果 (排除 lspci 中的 bug 的影响) 与普通的列表模式相同。 |
--version |
显示 lspci 的版本。这个选项应当单独使用。 |
PCI utilities
使用 PCI
lib来和 PCI
设备(更多细节看 pcilib(7)
)交互。
你可以使用下面的选项来影响它的行为:
选项 | 含义 |
---|---|
-A |
支持多种访问 PCI 硬件的方式。默认情况下,使用第一种可用方式,但是你可以用这个选项来覆盖这个默认方式。使用 -A help 可以查看可用方法的列表以及各自的描述。linux-sysfs ,linux-proc ,intel-conf1 ,intel-conf2 和 dump 。 |
-O = |
|
-G |
增加库的调试等级。(可用於所有系统) |
-H1 |
通过 Intel 架构 1 来实现直接硬体访问。(只能用於 i386 及其相容机) |
-H2 |
通过 Intel 架构 2 来实现直接硬体访问。警告:此模式只能寻址任何总线上的前 16 个设备,并且在很多情况下相当不可靠。(只能用於 i386 及其相容机) |
-F |
从所给的包含 lspci -x 命令输出的档案中获取相关信息。这在分析使用者提交的错误报告时很有用,因为你可以用任何方式来显示硬体配置信息而无需为了获取更多信息打扰使用者。(可用於所有系统) |
你可能会需要缩小搜索范围,那么可以使用以下命令:
lspci | grep -e keyword
还有一种无需 grep
的方法可以使用。假设我想确认一下此计算机是否有其他的 Nvidia
设备,在此之前我们还需要一些额外信息,使用 -nn
选项显示的供应商和设备 ID
号。利用此选项给出我的 VGA
卡、供应商 ID
和设备 ID
:
$ sudo lspci -nn | grep -e VGA
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK107 [GeForce GTX 650] [10de:0fc6] (rev a1)
设备名称后的方括号内有用冒号分隔的数字,即供应商和设备 ID
。输出表明 Nvidia Corporation
制造的设备的供应商 ID
为 10de
。
-d
选项用于指定供应商、设备或类 ID
的所有设备。以下是我系统中的所有 Nvidia
设备(保留 -nn
以解析供应商 ID
):
$ sudo lspci -nn -d 10de:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK107 [GeForce GTX 650] [10de:0fc6] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation GK107 HDMI Audio Controller [10de:0e1b] (rev a1)
从输出中可以看到,除了显卡之外,我还有一个 Nvidia
音频设备。实际上它们都属于同一张 Nvidia GeForce GTX 650
卡。
$ sudo lspci -nn | grep -e VGA
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK107 [GeForce GTX 650] [10de:0fc6] (rev a1)
$ sudo lspci -nn -k -d 10de:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK107 [GeForce GTX 650] [10de:0fc6] (rev a1)
Subsystem: eVga.com. Corp. GK107 [GeForce GTX 650] [3842:2650]
Kernel driver in use: nvidia
Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia
01:00.1 Audio device [0403]: NVIDIA Corporation GK107 HDMI Audio Controller [10de:0e1b] (rev a1)
Subsystem: eVga.com. Corp. GK107 HDMI Audio Controller [3842:2650]
Kernel driver in use: snd_hda_intel
Kernel modules: snd_hda_intel
-nn
选项显示的供应商和设备 ID
号。设备名称后的方括号内有用冒号分隔的数字,即供应商和设备 ID
。输出表明 Nvidia Corporation
制造的设备的供应商 ID
为 10de
。
-k
选项显示内核加载了哪些驱动程序模块。
-d
选项用于指定供应商、设备或类 ID
的所有设备。
从命令的输出结果可以看到额外显示了两行:正在使用的内核驱动程序 Kernel driver in use
和 内核模块 Kernel modules
,其中后者列出了可用于支持该设备的模块。
lspci
用到的文件 29:
/usr/share/hwdata/pci.ids
PCI ID
的清单 (厂商,设备名,类,子类)/proc/bus/pci
linux 2.1.82
之后版本核心提供的 PCI
总线配置空间的接口。包含每个总线 ( per-bus
) 的子目录以及每个设备卡 ( per-card
) 的配置空间档案,还有一个 devices
档案,包含所有 PCI
设备的列表。新设备和供应商总是在不断迭代。如果看到显示为 unknown
的设备,说明你的 PCI
设备 ID
数据库可能已过时。有两种方法可以检查更新 24。
-Q
选项会使用 DNS
查询中央数据库,当然,这需要联网。
$ lspci -Q
还可以通过运行命令 update-pciids
来更新本地 PCI ID
数据库。
$ update-pciids
Downloaded daily snapshot dated 2021-08-22 03:15:01
下图是一个演示样例,图中是一个基于 AMD Phenom CPU
的系统,所以它有一个 AMD
芯片组,以及 Atheros
无线适配器(Network Controller
)和 Nvidia
显卡(VGA compatible controller
)。
默认情况下,它将显示所有设备的详细信息,例如供应商、名称和型号等。
第一个字段是槽信息,格式如下 [domain:]bus:device.function
。
在这个例子中,由于所有的域都是 0
,所以 lspci
不会显示域。
$ sudo lspci
00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] RS880 Host Bridge
00:02.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780 PCI to PCI bridge (ext gfx port 0)
00:04.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780/RS880 PCI to PCI bridge (PCIE port 0)
00:05.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780/RS880 PCI to PCI bridge (PCIE port 1)
00:11.0 SATA controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode]
00:12.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:12.1 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0 USB OHCI1 Controller
00:12.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:13.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:13.1 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0 USB OHCI1 Controller
00:13.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 SMBus Controller (rev 3c)
00:14.1 IDE interface: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 IDE Controller
00:14.3 ISA bridge: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 LPC host controller
00:14.4 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 PCI to PCI Bridge
00:14.5 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
00:18.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor HyperTransport Configuration
00:18.1 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor Address Map
00:18.2 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor DRAM Controller
00:18.3 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor Miscellaneous Control
00:18.4 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor Link Control
01:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GK107 HDMI Audio Controller (rev a1)
02:00.0 Network controller: Qualcomm Atheros AR9287 Wireless Network Adapter (PCI-Express) (rev 01)
另一个示例如下,
$ lspci
00:00.0 Host bridge: Intel Corporation 3200/3210 Chipset DRAM Controller //主板芯片
00:19.0 Ethernet controller: Intel Corporation 82566DM-2 Gigabit Network Connection (rev 02)
00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 02)
00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 02)
00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 02)
00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 02) //USB控制器
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 02) //接口插槽
00:1c.4 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 5 (rev 02)
00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 92)
00:1f.0 ISA bridge: Intel Corporation 82801IR (ICH9R) LPC Interface Controller (rev 02)
00:1f.2 IDE interface: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 4 port SATA IDE Controller (rev 02)
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 02)
00:1f.5 IDE interface: Intel Corporation 82801I (ICH9 Family) 2 port SATA IDE Controller (rev 02)
02:00.0 VGA compatible controller: Matrox Graphics, Inc. MGA G200e [Pilot] ServerEngines (SEP1) (rev 02) //显卡
03:02.0 Ethernet controller: Intel Corporation 82541GI Gigabit Ethernet Controller (rev 05) //网卡
例如,RPM Fusion
网站有安装 Nvidia
图形驱动程序的说明,里面就首先使用了 grep
命令来定位显卡信息。
$ sudo lspci | grep -e VGA
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07)
$ sudo lspci | grep -e 3D
01:00.0 3D controller: NVIDIA Corporation GM108M [GeForce MX130] (rev a2)
参考这里 26
当您知道 domain:bus:slot.func
格式中的插槽号时,您可以查询特定设备,如下所示。在下面的示例中,我们没有指定域号,因为它是 0
,可以省略。
$ lspci -s 03:00.0
03:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator] (rev 05)
当您知道 vendor:device
格式的设备编号时,您可以查询特定设备,如下所示。
$ lspci -d 1000:0079
03:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator] (rev 05)
如果您只知道供应商 ID
或设备 ID
,则可以省略另一个 ID
。
例如,以下两个命令都将返回与上述相同的输出。
lspci -d:0079
lspci -d 1000:
在已知目标设备的 BDF
信息后,可使用以下命令来查询更加详细地信息
-s
后面接的是每个设备的总线、插槽与相关函数功能
$ lspci -s 03:02.0 -vv
03:02.0 Ethernet controller: Intel Corporation 82541GI Gigabit Ethernet Controller (rev 05)
Subsystem: Intel Corporation Unknown device 34d0
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr+ Stepping- SERR+ FastB2B-
Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <tabort- <mabort- >SERR- <perr-
Latency: 32 (63750ns min), Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 209
Region 0: Memory at e1920000 (32-bit, non-prefetchable) [size=128K]
Region 1: Memory at e1900000 (32-bit, non-prefetchable) [size=128K]
Region 2: I/O ports at 1000 [size=64]
Expansion ROM at fffe0000 [disabled] [size=128K]
Capabilities: [dc] Power Management version 2
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 PME-Enable- DSel=0 DScale=1 PME-
Capabilities: [e4] PCI-X non-bridge device
Command: DPERE- ERO+ RBC=512 OST=1
Status: Dev=00:00.0 64bit- 133MHz- SCD- USC- DC=simple DMMRBC=2048 DMOST=1 DMCRS=8 RSCEM- 266MHz- 533MHz-
参考这里 30
smartcl
是磁盘管理工具 Smart
提供的命令,使用这个命令来获取磁盘的一些状态信息。
只能用 root
去执行,是不能用普通用户执行的。
比如下面这样:
[root@Erdong-TEST ~]# smartctl -A /dev/nvme0n1
smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-693.el7.x86_64] (local build)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF SMART DATA SECTION ===
SMART/Health Information (NVMe Log 0x02)
Critical Warning: 0x00
Temperature: 29 Celsius
Available Spare: 100%
Available Spare Threshold: 10%
Percentage Used: 0%
Data Units Read: 80 [40.9 MB]
Data Units Written: 0
Host Read Commands: 1,897
Host Write Commands: 10
Controller Busy Time: 0
Power Cycles: 10
Power On Hours: 923
Unsafe Shutdowns: 7
Media and Data Integrity Errors: 0
Error Information Log Entries: 0
Warning Comp. Temperature Time: 0
Critical Comp. Temperature Time: 0
[zabbix@Erdong-TEST ~]$ smartctl -A /dev/nvme0n1
smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-693.el7.x86_64] (local build)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org
Smartctl open device: /dev/nvme0n1 failed: Permission denied
参考这里 31
该命令用来列出目前与过去登录系统的用户相关信息。
指令英文原义 show listing of last logged in users
。
指令所在路径 /usr/bin/last
,可以使用 which last
查询 last
所在路径。
执行权限,有些需要特殊权限
执行 last
指令时,默认情况下它会读取位于 /var/log
目录下名称为 wtmp
的文件,该文件保存的是登陆过本系统的用户信息,并把该文件记录的登录系统的用户名单全部显示出来。
默认是显示 wtmp
的记录,但 btmp
能显示的更详细,可以显示远程登录,例如 ssh
登录,因为 utmp
文件中保存的是当前正在本系统中的用户的信息。
使用 last
命令的输出结果,比如,如下所示:
$ last
root pts/0 10.5.10.51 Thu Sep 2 00:59 still logged in
root pts/2 10.5.10.60 Wed Sep 1 16:11 - 17:47 (01:35)
root pts/2 10.5.10.60 Wed Sep 1 16:08 - 16:10 (00:02)
root pts/0 10.5.10.61 Wed Sep 1 14:16 - 23:02 (08:46)
root pts/3 10.5.10.59 Wed Sep 1 11:28 - 19:38 (08:10)
root pts/2 10.5.10.60 Wed Sep 1 11:18 - 16:07 (04:49)
root pts/1 10.5.10.191 Wed Sep 1 11:17 - 19:12 (07:55)
输出结果的各个字段的含义如下,
用户名 | 终端位置 | 登陆 ip 或内核 |
开始时间 | 结束时间 | 持续时间 |
---|---|---|---|---|---|
终端位置。pts/0 (伪终端)意味着从诸如 SSH 或 telenet 的远程连接用户 .tty ( teletypewriter ) 意味着直接连接到计算机或者本地连接的用户 |
登陆 ip 或内核。如果你看见 :0.0 或者什么都没有,这意味着用户通过本地终端连接。除了重启活动,内核版本会显示在状态中。 |
开始时间 | 结束时间(still log in ,还未退出;down ,直到正常关机;crash ,直到强制关机 ) |
持续时间 |
last
命令的语法如下,
last [-adRx][-f <记录文件>][-n <显示列数>][帐号名称...][终端机编号...]
last
命令可搭配使用的参数有,
参数 | 说明 |
---|---|
-a |
把从何处登入系统的主机名或 IP 地址,显示在最后一行。 |
-d |
将 IP 地址转换成主机名称 |
-f <记录文件> |
指定记录文件 |
-n <显示列数> 或 <显示列数> |
设置列出名单的显示列数 |
-R |
不显示登入系统的主机名称或 IP 地址 |
last -n 10
或者 last -10
last -10 -f /var/log/btmp
参考这里 32
选项 | 描述 |
---|---|
:w |
保存文件,不退出 vim |
:w file |
将修改另外保存到 file 中,不退出 vim |
:w! |
强制保存,不退出 vim |
:wq |
保存文件,退出 vim |
:wq! . |
强制保存文件,退出 vim |
:q |
保存文件,退出 vim |
:q! |
不保存文件,强制退出 vim |
:e! . |
放弃所有修改,从上次保存文件开始再编辑 |
参考这里 33,后续补上。
参考这里 34
rfkill
命令来自于英文词组 radio frequency kill
的缩写,其功能是管理系统中的蓝牙和 WIFI
设备。
rfkill
命令是一个内核级别的管理工具,可以打开或关闭系统中的蓝牙和WIFI功能。
语法格式:rfkill [参数] 设备名
选项 | 含义 |
---|---|
list |
列出可用设备 |
block |
关闭设备 |
unblock |
打开设备 |
$ rfkill list
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
2: hci0: Bluetooth
Soft blocked: yes
Hard blocked: no
$ rfkill block 0
$ rfkill unblock 0
参考这里 35
mv
命令来为文件或目录改名或将文件由一个目录移入另一个目录中。该命令等同于 DOS
系统下的 ren
和 move
命令的组合。它的使用权限是所有用户。
mv [options] 源文件或目 目标文件或目录
参数 | 说明 | |
---|---|---|
options |
i |
交互方式操作。如果 mv 操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答 y 或 n ,这样可以避免误覆盖文件。 |
f |
禁止交互操作。mv 操作要覆盖某个已有的目标文件时不给任何指示,指定此参数后i参数将不再起作用。 |
|
目标文件或目录 | 当第二个参数类型是文件时 | mv 命令完成文件重命名,它将所给的源文件或目录重命名为给定的目标文件名。 |
当第二个参数是已存在的目录名称时 | 源文件或目录参数可以有多个,mv 命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv 先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。 |
/usr/udt
中的所有文件移到当前目录 (用 .
表示) 中:$ mv /usr/udt/* .
test.txt
重命名为 wbk.txt
$ mv test.txt wbk.txt
mv 文件名/* 另一个目录
mv * ../
参考这里 35
cp
命令是用于复制的,复制文件或目录。
cp 参数
参数 | 说明 |
---|---|
-a 或 –archive |
此参数的效果和同时指定 -dpR 参数相同。 |
-b 或 –backup |
删除,覆盖目标文件之前的备份,备份文件会在字尾加上一个备份字符串。 |
-d |
或 –no-dereference |
-f 或 –force |
强行复制文件或目录,不论目标文件或目录是否已存在。 |
-i 或 –interactive |
覆盖既有文件之前先询问用户。 |
-l 或 –link |
对源文件建立硬连接,而非复制文件。 |
-p 或 –preserve |
保留源文件或目录的属性。 |
-P 或 –parents |
保留源文件或目录的路径。 |
-r |
递归处理,将指定目录下的文件与子目录一并处理。 |
-R 或 –recursive |
递归处理,将指定目录下的所有文件与子目录一并处理。 |
-s 或 –symbolic-link |
对源文件建立符号连接,而非复制文件。 |
-S <备份字尾字符串> 或 –suffix= <备份字尾字符串> |
用 -b 参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字尾字符串是符号 ~ 。 |
-u 或 –update |
使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在,才复制文件。 |
-v 或 –verbose |
显示指令执行过程。 |
-V <备份方式> 或 –version-control= <备份方式> |
用 -b 参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这字符串不仅可用 -S 参数变更,当使用 -V 参数指定不同备份方式时,也会产生不同字尾的备份字串。 |
-x 或 –one-file-system |
复制的文件或目录存放的文件系统,必须与 cp 指令执行时所处的文件系统相同,否则不予复制。 |
–help |
在线帮助。 |
–sparse= <使用时机> |
设置保存稀疏文件的时机。 |
–version |
显示版本信息。 |
参考这里 36
可以使用 smartctl
命令来查询一些跟 ssd
相关的信息。
smartctl -i /dev/nvme0
identify
设备所得出的信息sudo smartctl -i /dev/nvme0
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-42-generic] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Number: KINGSTON SA2000M8500G
Serial Number: 50026B7683BC98CE
Firmware Version: S5Z42105
PCI Vendor/Subsystem ID: 0x2646
IEEE OUI Identifier: 0x0026b7
Controller ID: 1
Number of Namespaces: 1
Namespace 1 Size/Capacity: 500.107.862.016 [500 GB]
Namespace 1 Utilization: 142.133.460.992 [142 GB]
Namespace 1 Formatted LBA Size: 512
Namespace 1 IEEE EUI-64: 0026b7 683bc98ce5
Local Time is: Wed Aug 26 23:49:45 2020 CEST
smartctl -a /dev/nvme0
SMART
信息sudo smartctl -a /dev/nvme0
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-42-generic] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Number: KINGSTON SA2000M8500G
Serial Number: 50026B7683BC98CE
Firmware Version: S5Z42105
PCI Vendor/Subsystem ID: 0x2646
IEEE OUI Identifier: 0x0026b7
Controller ID: 1
Number of Namespaces: 1
Namespace 1 Size/Capacity: 500.107.862.016 [500 GB]
Namespace 1 Utilization: 142.114.676.736 [142 GB]
Namespace 1 Formatted LBA Size: 512
Namespace 1 IEEE EUI-64: 0026b7 683bc98ce5
Local Time is: Wed Aug 26 23:51:50 2020 CEST
Firmware Updates (0x14): 2 Slots, no Reset required
Optional Admin Commands (0x0017): Security Format Frmw_DL Self_Test
Optional NVM Commands (0x005f): Comp Wr_Unc DS_Mngmt Wr_Zero Sav/Sel_Feat Timestmp
Maximum Data Transfer Size: 32 Pages
Warning Comp. Temp. Threshold: 75 Celsius
Critical Comp. Temp. Threshold: 80 Celsius
Supported Power States
St Op Max Active Idle RL RT WL WT Ent_Lat Ex_Lat
0 + 9.00W - - 0 0 0 0 0 0
1 + 4.60W - - 1 1 1 1 0 0
2 + 3.80W - - 2 2 2 2 0 0
3 - 0.0450W - - 3 3 3 3 2000 2000
4 - 0.0040W - - 4 4 4 4 15000 15000
Supported LBA Sizes (NSID 0x1)
Id Fmt Data Metadt Rel_Perf
0 + 512 0 0
=== START OF SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
SMART/Health Information (NVMe Log 0x02)
Critical Warning: 0x00
Temperature: 30 Celsius
Available Spare: 100%
Available Spare Threshold: 10%
Percentage Used: 0%
Data Units Read: 3.966.522 [2,03 TB]
Data Units Written: 6.036.943 [3,09 TB]
Host Read Commands: 38.899.250
Host Write Commands: 46.064.389
Controller Busy Time: 601
Power Cycles: 390
Power On Hours: 241
Unsafe Shutdowns: 160
Media and Data Integrity Errors: 0
Error Information Log Entries: 0
Warning Comp. Temperature Time: 0
Critical Comp. Temperature Time: 0
Thermal Temp. 1 Transition Count: 7
Thermal Temp. 1 Total Time: 24
Error Information (NVMe Log 0x01, max 256 entries)
No Errors Logged
使用 tree
命令可以输出你的树层目录结构。在 macOS
系统上安装 tree
的方式参考这里 37。
主要用法是 cd
目标文件夹路径,然后 tree
一下,会将该层级下所有文件都遍历了输出,不管层级多深。如下所示:
亦可以指定层级输出内容,方式方法参考这里 37。
可以使用 sed
命令对 shell
脚本进行替换操作 38。
:
、井号 #
、正斜杠 /
来作为分隔符sed - i 's#abc#def#g' filename
来将 filename
文件中的 abc
替换成 def
。$ cat test.txt
123abc456 $ sed -i 's#abc#789#g' test.txt $ cat test.txt
123789456
$ sed -i 's:789:XYZ:g' test.txt $ cat test.txt
123XYZ456
$ sed -i 's/XYZ/O1Z/g' test.txt $ cat test.txt
123O1Z456
对于变量做替换
Ignore
特殊字符替换、反斜杠( \
)、正斜杠( /
)、双引号( \
)、美元符( $
)
\\
)、正斜杠( \/
)、双引号( \
)实现目标 | 方法 | 能否用单引号或双引号括起来 | |||
---|---|---|---|---|---|
单引号 | 双引号 | 为什么 | |||
\ → \\ | `sed -i 's#\\#\\\\#g' file` `sed -i 's:\\:\\\\:g' file` |
√ | × | 反斜杠用双引号括起来会报错 | |
\ → / | `sed -i 's#\\#\/#g' file` | √ | × | 反斜杠用双引号括起来会报错 | |
`''` → `""` | `sed -i 's#\"#\"\"#g' file` `sed -i "s#\"#\"\"#g" file` |
√ | √ | ||
`'` → `““` | `sed -i "s#'#''#g" file` | × | √ | 不能用单引号括起来,分不清了 | |
`$` → `\$` | `sed -i 's:\$:\\\$:g' file` | √ | × | 不能用双引号,否则会认为是$(正则匹配结尾位置)行的结果追加字符 |
正斜杠 ( /
) 可以用单引号、双引号括起来进行替换;但是涉及到反斜杠 ( \
) 不行,不能用双引号,只能用单引号括起来替换,不然报错 sed: -e expression #1,char 8: unterminated 's' command
。
curl
时用的变量,sed
转化curl -H 'Content-Type: application/json' -X POST -d
参数(参数中涉及到特殊字符都得转义,而且要多转一层,即 $
得转成 \\$
,才能原封不动的供后续使用)grep
命令支持三种正则表达式语法,Basic
、Extended
和 Perl-compatible
39。
当没有指定正则表达式类型时,grep
命令将搜索模式默认为基本正则表达式。
参考这里 39
要搜索多个匹配模式,可以使用 OR
( alternation
)运算符。我们可以用 OR
运算符 |
指定不同的匹配项,这些匹配项可以是文本字符串,也可以是表达式集。
值得注意的是,在所有正则表达式运算符中,这个运算符的优先级是最低的。
使用 grep
命令搜索多个匹配模式的语法如下:
$ grep 'pattern1\|pattern2' filename
这里需要注意的是,始终要用单引号将正则表达式括起来,因为单引号内的内容原样输出,被单引号括起的内容不管是常量还是变量不会发生替换。
使用基本正则表达式时,元字符被解释为字面字符。要保留元字符的特殊含义,必须用反斜杠 ( \
)对它们进行转义。这就是为什么我们要转义 OR
运算符 ( |
)。
要将模式解释为扩展正则表达式,请调用 grep -E
( 或 --extended-regexp
)选项。
使用扩展正则表达式时,不需要对 OR
运算符 ( |
) 进行转义:
$ grep -E 'pattern1|pattern2' filename
grep
命令搜索多个字符串fatal
、error
和 critical
字符串为例。$ grep 'fatal\|error\|critical' /var/log/nginx/error.log
使用扩展模式的语法如下:
$ grep -E `fatal|error|critical` /var/log/nginx/error.log
默认情况下,grep
命令时区分大小写的。如果要在搜索时忽略大小写,再在前面加 i
( --ignore-case
) 选项,如下:
$ grep -i 'fatal\|error\|critical' /var/log/nginx/error.log
在 linux 下使用 find
结合 sed
、xargs
可以实现批量替换多个文件中的同一个字符 40。
比如,
.c
和 .h
文件中的 waf
字符全部替换为 tamper
,可以使用以下命令:find . -name '*.[ch]' | xargs sed -i 's/waf/tamper/g'
/opt/test/
目录下所有含有 linux
字符的文件全部替换为 windows
find /opt/test/ -type f | awk -F ':' '{print $1}' | xargs sed -i 's/linux/windows/g'
scp
- secure copy(remote file copy program),意思是安全拷贝、安全复制的意思,是一个远程文件复制程序。准确地来说,就是不同服务器之间进行文件(包括目录)进行安全复制的命令。scp
基于加州大学 Regents 的 BSD
源代码中的 rcp
程序。
如何安全的呢?
通过 SSH
协议安全地将文件复制到远程系统和从远程系统复制文件到本地的命令。使用 SSH
意味着它享有与 SSH
相同级别的数据加密,因此被认为是跨两个远程主机传输文件的安全方式。
scp [-346BCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file] [-J destination] [-l limit] [-o ssh_option] [-P port] [-S program] source ... target
其中常用的几个参数的含义如下:
参数 | 含义 |
---|---|
-P |
指定端口,默认是 22 ,不需要指定。如果不是 22 ,则用大写 P 指定端口。 |
-p |
保留原始文件的修改时间、访问时间和模式。 |
-r |
递归复制整个目录。复制目录是必不可少。 |
-C |
压缩文件 |
scp redis.conf root@
Linux 教程 ↩︎
每天一个linux命令-uname,输出操作系统信息(内核版本、硬件架构32位/64位等) ↩︎
如何在命令行中检查Linux内核版本的3种方法 ↩︎
dmesg 命令详解 ↩︎
Linux dmesg显示可读时间方式 ↩︎
dmesg日志中加入时间戳 ↩︎
Linux系统删除文件夹命令 ↩︎ ↩︎
Linux rm 命令 ↩︎
Centos7 Failed to start crond.service: Unit not found ↩︎
Linux ls命令参数详解 ↩︎
linux root用户无法删除文件,提示permission denied ↩︎
Linux lsattr命令:查看文件系统属性 ↩︎
Linux系统使用Fuser命令的方法 ↩︎
linux里挂载(mount)和取消挂载(umount)命令的使用 ↩︎
Linux文件系统的的挂载与卸载(mount、umount) ↩︎
Linux系统挂载SMB文件系统 ↩︎
解决类似umount target is busy挂载盘卸载不掉问题 ↩︎
linux里挂载(mount)和取消挂载(umount)命令的使用 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
echo -e 命令详解 ↩︎
What is the difference between Ctrl-C and SIGINT? ↩︎
date command in Linux with examples ↩︎
rpm安装和卸载软件 ↩︎
Linux关机和重启命令总结 ↩︎ ↩︎
在 Linux 上使用 lspci 命令查看硬件情况 ↩︎ ↩︎
lspci命令详解 ↩︎
获取 PCI 总线硬件设备信息的 7 个 Linux lspci 命令示例 ↩︎ ↩︎
Ubuntu lspci ↩︎
pciutils ↩︎
Linux硬件管理命令–lspci命令详解 ↩︎
Smartctl 打开设备遇到 Permission denied 问题排查过程记录 ↩︎
LInux last命令详解 ↩︎
vim 退出命令(保存、放弃保存) ↩︎
Recognize more devices on Linux with this USB ID Repository ↩︎
rfkill命令 – 管理蓝牙和WIFI设备 ↩︎
linux怎么将一个文件移动到另一个目录下 ↩︎ ↩︎
Random Freezes in Kubuntu 20.04 ↩︎
Mac下的 tree 命令 输出目录树层结构 ↩︎ ↩︎
sed替换特殊字符 ↩︎
Grep命令查找多个字符串(grep同时匹配多个关键字或任意关键字) ↩︎ ↩︎
find+xargs+sed批量替换 ↩︎