冬季实战营第二期:Linux操作系统实战入门 (aliyun.com)
1月24日 动手实战-Linux文本处理入门深入解析动手实操
- 开始体验
- 创建资源
文本编辑工具Vim
vim有三种操作模式,分别是命令模式(Command mode)、输入模式(Insert mode)和底线命令模式(Last line mode)。
三种模式切换快捷键:
模式 | 快捷键 |
---|---|
命令模式 | ESC |
输入模式 | i或a |
底线命令模式 | : |
- 命令模式
在命令模式中控制光标移动和输入命令,可对文本进行复制、粘贴、删除和查找等工作。
使用命令vim filename后进入编辑器视图后,默认模式就是命令模式,此时敲击键盘字母会被识别为一个命令,例如在键盘上连续敲击两次d,就会删除光标所在行。
以下是在命令模式中常用的快捷操作:
操作 | 快捷键 |
---|---|
光标左移 | h |
光标右移 | l(小写L) |
光标上移 | k |
光标下移 | j |
光标移动到下一个单词 | w |
光标移动到上一个单词 | b |
移动游标到第n行 | nG |
移动游标到第一行 | gg |
移动游标到最后一行 | G |
快速回到上一次光标所在位置 | Ctrl+o |
删除当前字符 | x |
删除前一个字符 | X |
删除整行 | dd |
删除一个单词 | dw或daw |
删除至行尾 | d$或D |
删除至行首 | d^ |
删除到文档末尾 | dG |
删除至文档首部 | d1G |
删除n行 | ndd |
删除n个连续字符 | nx |
将光标所在位置字母变成大写或小写 | ~ |
复制游标所在的整行 | yy(3yy表示复制3行) |
粘贴至光标后(下) | p |
粘贴至光标前(上) | P |
剪切 | dd |
交换上下行 | ddp |
替换整行,即删除游标所在行并进入插入模式 | cc |
撤销一次或n次操作 | u{n} |
撤销当前行的所有修改 | U |
恢复撤销操作 | Ctrl+r |
整行将向右缩进 | >> |
整行将向左退回 | << |
若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开 | ZZ |
- 输入模式
在命令模式下按i或a键就进入了输入模式,在输入模式下,您可以正常的使用键盘按键对文本进行插入和删除等操作。
- 底线命令模式
在命令模式下按:键就进入了底线命令模式,在底线命令模式中可以输入单个或多个字符的命令。
操作 | 命令 |
---|---|
保存 | :w |
退出 | :q |
保存并退出 | :wq(:wq!表示强制保存退出) |
将文件另存为其他文件名 | :w new_filename |
显示行号 | :set nu |
取消行号 | :set nonu |
使本行内容居中 | :ce |
使本行文本靠右 | :ri |
使本行内容靠左 | :le |
向光标之下寻找一个名称为word的字符串 | :/word |
向光标之上寻找一个字符串名称为word的字符串 | :?word |
重复前一个搜寻的动作 | :n |
从第一行到最后一行寻找word1字符串,并将该字符串取代为word2 | :1,$s/word1/word2/g或 :%s/word1/word2/g |
使用示例
在本示例将使用vim在文本文件中写入一首唐诗。
vim
1、 新建一个文件并进入vim命令模式(因为涉及中文需要您自行点击右下角进行中英文切换)。
2、按下i进入输入模式,输入《静夜思》的诗名。
3、按下ECS键回到命令模式,并输入底线命令:ce,使诗名居中。
4、按下o键换行并进入输入模式,输入第一行诗。
5、按下ECS键回到命令模式,并输入底线命令:ce,使第一行诗居中。
6、在命令模式中执行底线命令:wq离开vim。
文本文件查看命令
文本文件查看命令
cat
命令描述:cat命令用于查看内容较少的纯文本文件。
命令格式:cat [选项] [文件]。
命令参数说明:
参数 | 说明 |
---|---|
-n或--number | 显示行号 |
-b或--number-nonblank | 显示行号,但是不对空白行进行编号 |
-s或--squeeze-blank | 当遇到有连续两行以上的空白行,只显示一行的空白行 |
命令使用示例:
1、将一个自增序列写入test.txt文件中。并查看文件内容。
2、将文件内容清空。并查看文件内容。
more
命令描述:more命令从前向后分页显示文件内容。
常用操作命令:
操作 | 作用 |
---|---|
Enter | 向下n行,n需要定义,默认为1行 |
Ctrl+F或空格键(Space) | 向下滚动一页 |
Ctrl+B | 向上滚动一页 |
= | 输出当前行的行号 |
!命令 | 调用Shell执行命令 |
q | 退出more |
命令使用示例:
从第20行开始分页查看系统日志文件/var/log/messages。
less
命令描述:less命令可以对文件或其它输出进行分页显示,与moe命令相似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动。
命令格式:less [参数] 文件
。
命令参数说明:
参数 | 说明 |
---|---|
-e | 当文件显示结束后,自动离开 |
-m | 显示类似more命令的百分比 |
-N | 显示每行的行号 |
-s | 显示连续空行为一行 |
命令常用操作:
快捷键 | 说明 |
---|---|
/字符串 | 向下搜索字符串 |
?字符串 | 向上搜索字符串 |
n | 重复前一个搜索 |
N | 反向重复前一个搜索 |
b或pageup 键 |
向上翻一页 |
空格键或pagedown 键 |
向下翻一页 |
u | 向前翻半页 |
d | 向后翻半页 |
y | 向前滚动一行 |
回车键 | 向后滚动一行 |
q | 退出less命令 |
命令使用示例:
查看命令历史使用记录并通过less分页显示。
history | less
head
命令描述:head命令用于查看文件开头指定行数的内容。
命令格式:head [参数] [文件]
。
命令参数说明:
参数 | 说明 |
---|---|
-n [行数] | 显示开头指定行的文件内容,默认为10 |
-c [字符数] | 显示开头指定个数的字符数 |
-q | 不显示文件名字信息,适用于多个文件,多文件时默认会显示文件名 |
命令使用示例:
查看/etc/passwd文件的前5行内容。
tail
命令描述:tail命令用于查看文档的后N行或持续刷新内容。
命令格式:tail [参数] [文件]
。
命令参数说明:
参数 | 说明 |
---|---|
-f | 显示文件最新追加的内容 |
-q | 当有多个文件参数时,不输出各个文件名 |
-v | 当有多个文件参数时,总是输出各个文件名 |
-c [字节数] | 显示文件的尾部n个字节内容 |
-n [行数] | 显示文件的尾部n行内容 |
命令使用示例:
查看/var/log/messages系统日志文件的最新10行,并保持实时刷新。
按ctrl+c
键退出文本实时查看界面。
stat
命令描述:用来显示文件的详细信息,包括inode、atime、mtime、ctime等。
命令使用示例:
查看/etc/passwd文件的详细信息。
wc
命令描述:wc命令用于统计指定文本的行数、字数、字节数。
命令格式:wc [参数] [文件]
。
命令参数说明:
参数 | 说明 |
---|---|
-l | 只显示行数 |
-w | 只显示单词数 |
-c | 只显示字节数 |
命令使用示例:
统计/etc/passwd文件的行数。
file
命令描述: file命令用于辨识文件类型。
命令格式:file [参数] [文件]
。
命令参数说明:
参数 | 说明 |
---|---|
-b | 列出辨识结果时,不显示文件名称 |
-c | 详细显示指令执行过程,便于排错或分析程序执行的情形 |
-f [文件] | 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称 |
-L | 直接显示符号连接所指向的文件类别 |
命令使用示例:
查看/var/log/messages文件的文件类型。
diff
命令描述:diff命令用于比较文件的差异。
命令使用示例:
\1. 构造两个相似的文件
使用diff查看两个文件的差异
对比结果中的3c3表示两个文件在第3行有不同,5,6d4表示2.log文件相比1.log文件在第4行处开始少了1.log文件的第5和第6行。
文本文件处理命令
文本文件处理命令
grep
命令描述:grep命令用于查找文件里符合条件的字符串。
grep全称是Global Regular Expression Print,表示全局正则表达式版本,它能使用正则表达式搜索文本,并把匹配的行打印出来。
在Shell脚本中,grep通过返回一个状态值来表示搜索的状态:
- 0:匹配成功。
- 1:匹配失败。
- 2:搜索的文件不存在。
命令格式:grep [参数] [正则表达式] [文件]
。
命令常用参数说明:
参数 | 说明 |
---|---|
-c或--count | 计算符合样式的列数 |
-d recurse或-r | 指定要查找的是目录而非文件 |
-e [范本样式] | 指定字符串做为查找文件内容的样式 |
-E 或 --extended-regexp | 将样式为延伸的正则表达式来使用 |
-F 或 --fixed-regexp | 将样式视为固定字符串的列表 |
-G 或 --basic-regexp | 将样式视为普通的表示法来使用 |
-i 或 --ignore-case | 忽略字符大小写的差别 |
-n 或 --line-number | 在显示符合样式的那一行之前,标示出该行的列数编号 |
-v 或 --revert-match | 显示不包含匹配文本的所有行 |
命令使用示例:
- 查看sshd服务配置文件中监听端口配置所在行编号。
ot@iZuf6alhzbs7zplaazxrhxZ ~]# grep -n Port /etc/ssh/ssh_config
41:# Port 22
[root@iZuf6alhzbs7zplaazxrhxZ ~]#
- 查询字符串在文本中出现的列数。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# grep -c localhost /etc/hosts
2
[root@iZuf6alhzbs7zplaazxrhxZ ~]#
- 反向查找,不显示符合条件的行。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# ps -ef | grep sshd
root 1100 1 0 09:28 ? 00:00:00 /usr/sbin/sshd -D
root 1452 1100 0 09:29 ? 00:00:00 sshd: root@pts/0
root 11868 1454 0 10:58 pts/0 00:00:00 grep --color=auto sshd
[root@iZuf6alhzbs7zplaazxrhxZ ~]# ps -ef | grep -v grep | grep sshd
root 1100 1 0 09:28 ? 00:00:00 /usr/sbin/sshd -D
root 1452 1100 0 09:29 ? 00:00:00 sshd: root@pts/0
[root@iZuf6alhzbs7zplaazxrhxZ ~]#
- 以递归的方式查找目录下含有关键字的文件。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# grep -r *.sh /etc
Binary file /etc/udev/hwdb.bin matches
/etc/NetworkManager/dispatcher.d/11-dhclient: for f in $ETCDIR/dhclient.d/*.sh; do
/etc/bashrc: for i in /etc/profile.d/*.sh; do
/etc/profile:for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
[root@iZuf6alhzbs7zplaazxrhxZ ~]#
- 使用正则表达式匹配httpd配置文件中异常状态码响应的相关配置。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# grep 'ntp[0-9].aliyun.com' /etc/ntp.conf
restrict ntp1.aliyun.com nomodify notrap nopeer noquery
restrict ntp2.aliyun.com nomodify notrap nopeer noquery
restrict ntp3.aliyun.com nomodify notrap nopeer noquery
restrict ntp4.aliyun.com nomodify notrap nopeer noquery
restrict ntp5.aliyun.com nomodify notrap nopeer noquery
restrict ntp6.aliyun.com nomodify notrap nopeer noquery
server ntp1.aliyun.com iburst minpoll 4 maxpoll 10
server ntp2.aliyun.com iburst minpoll 4 maxpoll 10
server ntp3.aliyun.com iburst minpoll 4 maxpoll 10
server ntp4.aliyun.com iburst minpoll 4 maxpoll 10
server ntp5.aliyun.com iburst minpoll 4 maxpoll 10
server ntp6.aliyun.com iburst minpoll 4 maxpoll 10
[root@iZuf6alhzbs7zplaazxrhxZ ~]#
sed
命令描述:sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用。
\1. 处理时,把当前处理的行存储在临时缓冲区中,称为模式空间(pattern space)。
\2. 接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
\3. 接着处理下一行,这样不断重复,直到文件末尾。
注意:
- sed命令不会修改原文件,例如删除命令只表示某些行不打印输出,而不是从原文件中删去。
- 如果要改变源文件,需要使用-i选项。
命令格式:sed [参数] [动作] [文件]
。
参数说明:
参数 | 说明 |
---|---|
-e [script] | 执行多个script |
-f [script文件] | 执行指定script文件 |
-n | 仅显示script处理后的结果 |
-i | 输出到原文件,静默执行(修改原文件) |
动作说明:
动作 | 说明 |
---|---|
a | 在行后面增加内容 |
c | 替换行 |
d | 删除行 |
i | 在行前面插入 |
p | 打印相关的行 |
s | 替换内容 |
命令使用示例:
- 删除第3行到最后一行内容。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# sed '3,$d' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
- 在最后一行新增行。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# sed '$a admin:x:1000:1000:admin:/home/admin:/bin/bash' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
admin:x:1000:1000:admin:/home/admin:/bin/bash
- 替换内容。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# sed 's/SELINUX=disabled/SELINUX=enforcing/' /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@iZuf6alhzbs7zplaazxrhxZ ~]#
- 替换行。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# sed '1c abcdefg' /etc/passwd
abcdefg
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
[root@iZuf6alhzbs7zplaazxrhxZ ~]#
awk
命令描述:和 sed 命令类似,awk 命令也是逐行扫描文件(从第 1 行到最后一行),寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作;反之,则不对行做任何处理。
命令格式:awk [参数] [脚本] [文件]
。
参数说明:
参数 | 说明 |
---|---|
-F fs | 指定以fs作为输入行的分隔符,awk 命令默认分隔符为空格或制表符 |
-f file | 读取awk脚本 |
-v val=val | 在执行处理过程之前,设置一个变量var,并给其设置初始值为val |
内置变量:
变量 | 用途 |
---|---|
FS | 字段分隔符 |
$n | 指定分隔的第n个字段,如$1、$3分别表示第1、第三列 |
$0 | 当前读入的整行文本内容 |
NF | 记录当前处理行的字段个数(列数) |
NR | 记录当前已读入的行数 |
FNR | 当前行在源文件中的行号 |
awk中还可以指定脚本命令的运行时机。默认情况下,awk会从输入中读取一行文本,然后针对该行的数据执行程序脚本,但有时可能需要在处理数据前运行一些脚本命令,这就需要使用BEGIN关键字,BEGIN会在awsk读取数据前强制执行该关键字后指定的脚本命令。
和BEGIN关键字相对应,END关键字允许我们指定一些脚本命令,awk会在读完数据后执行它们。
命令使用示例:
- 查看本机IP地址。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# ifconfig eth0 |awk '/inet/{print $2}'
172.16.2.57
[root@iZuf6alhzbs7zplaazxrhxZ ~]#
- 查看本机剩余磁盘容量。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# df -h |awk '/\/$/{print $4}'
36G
[root@iZuf6alhzbs7zplaazxrhxZ ~]#
- 统计系统用户个数。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# awk -F: '$3<1000{x++} END{print x}' /etc/passwd
21
[root@iZuf6alhzbs7zplaazxrhxZ ~]#
- 输出其中登录Shell不以nologin结尾(对第7个字段做!~反向匹配)的用户名、登录Shell信息。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# awk -F: '$7!~/nologin$/{print $1,$7}' /etc/passwd
root /bin/bash
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
- 输出/etc/passwd文件中前三行记录的用户名和用户uid。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# head -3 /etc/passwd | awk 'BEGIN{FS=":";print "name\tuid"}{print $1,"\t"$3}END{print "sum lines "NR}'
name uid
root 0
bin 1
daemon 2
sum lines 3
[root@iZuf6alhzbs7zplaazxrhxZ ~]#
- 查看tcp连接数。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# netstat -na | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LISTEN 1
ESTABLISHED 2
TIME_WAIT 1
[root@iZuf6alhzbs7zplaazxrhxZ ~]#
- 关闭指定服务的所有的进程。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# ps -ef | grep httpd | awk {'print $2'} | xargs kill -9
kill: sending signal to 12171 failed: No such process
[root@iZuf6alhzbs7zplaazxrhxZ ~]#
cut
命令描述:cut命令主要用来切割字符串,可以对输入的数据进行切割然后输出。
命令格式:cut [参数] [文件]
。
参数说明:
参数 | 说明 |
---|---|
-b | 以字节为单位进行分割 |
-c | 以字符为单位进行分割 |
-d | 自定义分隔符,默认为制表符 |
命令使用示例:
- 按字节进行切割。
- 按字符进行切割。
- 按指定字符进行切割。
tr
命令描述:tr命令用于对来自标准输入的字符进行替换、压缩和删除。
命令格式:tr [参数] [文本]
。
参数说明:
参数 | 说明 |
---|---|
-c | 反选指定字符 |
-d | 删除指定字符 |
-s | 将重复的字符缩减成一个字符 |
-t [第一字符集] [第二字符集] | 删除第一字符集较第二字符集多出的字符,使两个字符集长度相等 |
命令使用示例:
- 将输入字符由大写转换为小写。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# echo "HELLO WORLD" | tr 'A-Z' 'a-z'
hello world
[root@iZuf6alhzbs7zplaazxrhxZ ~]#
- 删除字符。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# echo "hello 123 world 456" | tr -d '0-9'
hello world
[root@iZuf6alhzbs7zplaazxrhxZ ~]#
- 压缩字符。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# echo "thissss is a text linnnnnnne." | tr -s ' sn'
this is a text line.
- 产生随机密码。
[root@iZuf6alhzbs7zplaazxrhxZ ~]# cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c 13
EYHZ2wTtyC2VT
[root@iZuf6alhzbs7zplaazxrhxZ ~]#
1月25日 动手实战-Linux系统管理入门深入解析动手实操
常用系统工作命令
echo
命令描述:echo命令用于在终端输出字符串或变量提取后的值。
命令格式:echo [字符串 | $变量]
命令用法示例:
- 显示普通字符串
- 显示变量
首先在shell环境中定义一个临时变量name。
使用echo命令将变量name的值显示到终端。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# export name="Tom"
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# echo $name
Tom
[root@iZuf6cfxk8k2c6scbypr2yZ ~]#
- 显示结果定向至文件
以下命令会将文本This is a test text.输出重定向到文件test.txt中,如果文件已存在,将会覆盖文件内容,如果不存在则创建。其中>符号表示输出重定向。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# echo "This is a test text." > test.txt
如果您希望将文本追加到文件内容最后,而不是覆盖它,请使用>>输出追加重定向符号。
- 显示命令执行结果
以下命令将会在终端显示当前的工作路径。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# echo `pwd`
/root
使用$(command)形式可以达到相同效果。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# echo $(pwd)
/root
date
命令描述:date命令用于显示和设置系统的时间和日期。
命令格式:date [选项] [+格式]
其中,时间格式的部分控制字符解释如下:
字符 | 说明 |
---|---|
%a | 当地时间的星期名缩写(例如: 日,代表星期日) |
%A | 当地时间的星期名全称 (例如:星期日) |
%b | 当地时间的月名缩写 (例如:一,代表一月) |
%B | 当地时间的月名全称 (例如:一月) |
%c | 当地时间的日期和时间 (例如:2005年3月3日 星期四 23:05:25) |
%C | 世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20) |
%d | 按月计的日期(例如:01) |
%D | 按月计的日期;等于%m/%d/%y |
%F | 完整日期格式,等价于 %Y-%m-%d |
%j | 按年计的日期(001-366) |
%p | 按年计的日期(001-366) |
%r | 当地时间下的 12 小时时钟时间 (例如:11:11:04 下午) |
%R | 24 小时时间的时和分,等价于 %H:%M |
%s | 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数 |
%T | 时间,等于%H:%M:%S |
%U | 一年中的第几周,以周日为每星期第一天(00-53) |
%x | 当地时间下的日期描述 (例如:12/31/99) |
%X | 当地时间下的时间描述 (例如:23:13:48) |
%w | 一星期中的第几日(0-6),0 代表周一 |
%W | 一年中的第几周,以周一为每星期第一天(00-53) |
命令用法示例:
- 按照默认格式查看当前系统时间
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# date
Tue Jan 25 22:29:13 CST 2022
- 按照指定格式查看当前系统时间
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# date "+%Y-%m-%d %H:%M:%S"
2022-01-25 22:29:32
- 查看今天是当年中的第几天
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# date "+%j"
025
- 将系统的当前时间设置为2020年02月20日20点20分20秒
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# date -s "20200220 20:20:20"
Thu Feb 20 20:20:20 CST 2020
- 校正系统时间,与网络时间同步
a. 安装ntp校时工具
yum -y install ntp
b. 用ntpdate从时间服务器更新时间
ntpdate time.nist.gov
wget
命令描述:在终端中下载文件。
命令格式:wget [参数] 下载地址
参数说明:
参数 | 作用 |
---|---|
-b | 后台下载 |
-P | 下载到指定目录 |
-t | 最大重试次数 |
-c | 断点续传 |
-p | 下载页面内所有资源,包括图片、视频等 |
-r | 递归下载 |
命令使用示例:
下载一张图片到路径/root/static/img/中,-p参数默认值为当前路径,如果指定路径不存在会自动创建。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# wget -P /root/static/img/ http://img.alicdn.com/tfs/TB1.R._t7L0gK0jSZFxXXXWHVXa-2666-1500.png
--2022-01-25 22:32:27-- http://img.alicdn.com/tfs/TB1.R._t7L0gK0jSZFxXXXWHVXa-2666-1500.png
Resolving img.alicdn.com (img.alicdn.com)... 101.37.183.186, 101.37.183.187, 240e:978:1403:0:3::3fb, ...
Connecting to img.alicdn.com (img.alicdn.com)|101.37.183.186|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5483908 (5.2M) [image/png]
Saving to: ‘/root/static/img/TB1.R._t7L0gK0jSZFxXXXWHVXa-2666-1500.png’
100%[============================================================================================>] 5,483,908 --.-K/s in 0.1s
2022-01-25 22:32:27 (47.0 MB/s) - ‘/root/static/img/TB1.R._t7L0gK0jSZFxXXXWHVXa-2666-1500.png’ saved [5483908/5483908]
[root@iZuf6cfxk8k2c6scbypr2yZ ~]#
ps
命令描述:ps命令用于查看系统中的进程状态。
命令格式:ps [参数]。
命令参数说明:
参数 | 作用 |
---|---|
-a | 显示现行终端机下的所有程序,包括其他用户的程序 |
-u | 以用户为主的格式来显示程序状况 |
-x | 显示没有控制终端的进程,同时显示各个命令的具体路径 |
-e | 列出程序时,显示每个程序所使用的环境变量 |
-f | 显示当前所有的进程 |
-t | 指定终端机编号,并列出属于该终端机的程序的状况 |
命令使用示例:
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# ps -ef | grep sshd
root 1098 1 0 22:25 ? 00:00:00 /usr/sbin/sshd -D
root 1338 1098 0 22:25 ? 00:00:00 sshd: root@pts/0
root 1806 1340 0 22:33 pts/0 00:00:00 grep --color=auto sshd
top
命令描述:top命令动态地监视进程活动与系统负载等信息。
命令使用示例:
top
命令输出参数解释:
以上命令输出视图中分为两个区域,一个统计信息区,一个进程信息区。
-
统计信息区
- 第一行信息依次为:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。
- 第二行信息依次为:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
- 第三行信息依次为:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。
- 第四行信息依次为:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
- 第五行信息依次为:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、预加载内存量。
- 进程信息区
列名 | 含义 |
---|---|
PID | 进程ID |
USER | 进程所有者的用户名 |
PR | 进程优先级 |
NI | nice值。负值表示高优先级,正值表示低优先级 |
VIRT | 进程使用的虚拟内存总量,单位kb |
RES | 进程使用的、未被换出的物理内存大小,单位kb |
SHR | 共享内存大小,单位kb |
S | 进程状态D:不可中断的睡眠状态R:正在运行S:睡眠T:停止Z:僵尸进程 |
%CPU | 上次更新到现在的CPU时间占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
COMMAND | 命令名 |
按 q 键退出监控页面。
pidof
命令描述:pidof命令用于查询指定服务进程的PID值。
命令格式:pidof [服务名称]。
命令参数说明:
参数 | 说明 |
---|---|
-s | 仅返回一个进程号 |
-c | 只显示运行在root目录下的进程,这个选项只对root用户有效 |
-o | 忽略指定进程号的进程 |
-x | 显示由脚本开启的进程 |
命令使用示例:
查询出crond服务下的所有进程ID。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# pidof crond
997
kill
命令描述:kill命令用于终止指定PID的服务进程。
kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。
命令格式:kill [参数] [进程PID]。
命令使用示例:
删除pid为1247的进程。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# kill -9 1247
-bash: kill: (1247) - No such process
killall
命令描述:killall命令用于终止指定名称的服务对应的全部进程。
命令格式:killall [进程名称]。
命令使用示例:
删除crond服务下的所有进程。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# killall crond
系统状态检测命令
ifconfig
命令描述:ifconfig命令用于获取网卡配置与网络状态等信息。
命令使用示例:
- 获取网卡配置与网络状态等信息。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.85.130 netmask 255.255.0.0 broadcast 172.16.255.255
ether 00:16:3e:1c:c3:2f txqueuelen 1000 (Ethernet)
RX packets 71914 bytes 101569893 (96.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 12954 bytes 1548528 (1.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@iZuf6cfxk8k2c6scbypr2yZ ~]#
命令输出说明:
-
第一部分的第一行显示网卡状态信息。
- eth0表示第一块网卡。
- UP代表网卡开启状态。
- RUNNING代表网卡的网线被接上。
- MULTICAST表示支持组播。
-
第二行显示网卡的网络信息。
- inet(IP地址):172.16.132.195。
- broadcast(广播地址):172.16.143.255。
- netmask(掩码地址):255.255.240.0。
- RX表示接收数据包的情况,TX表示发送数据包的情况。
- lo表示主机的回环网卡,是一种特殊的网络接口,不与任何实际设备连接,而是完全由软件实现。与回环地址(127.0.0.0/8 或 ::1/128)不同,回环网卡对系统显示为一块硬件。任何发送到该网卡上的数据都将立刻被同一网卡接收到。
uname
命令描述:uname命令用于查看系统内核与系统版本等信息。
命令语法:uname -amnrsv[--version]
命令使用示例:
- 显示系统信息。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# uname -a
Linux iZuf6cfxk8k2c6scbypr2yZ 3.10.0-1062.18.1.el7.x86_64 #1 SMP Tue Mar 17 23:49:17 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@iZuf6cfxk8k2c6scbypr2yZ ~]#
- 显示当前系统的硬件架构。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# uname -i
x86_64
- 显示操作系统发行编号。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# uname -r
3.10.0-1062.18.1.el7.x86_64
- 显示操作系统名称。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# uname -s
Linux
- 显示主机名称。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# uname -n
iZuf6cfxk8k2c6scbypr2yZ
uptime
命令描述:uptime 用于查看系统的负载信息。
命令使用示例:
- 查看系统的负载信息。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# uptime
22:39:51 up 14 min, 1 user, load average: 0.00, 0.05, 0.05
[root@iZuf6cfxk8k2c6scbypr2yZ ~]#
命令输出说明:
负载信息 | 命令输出值 |
---|---|
当前服务器时间 | 14:20:27 |
当前服务器运行时长 | 2 min |
当前用户数 | 2 users |
当前负载情况 | load average: 0.03, 0.04, 0.02(分别取1min,5min,15min的均值) |
free
命令描述:free用于显示当前系统中内存的使用量信息。
命令语法:free -bkmotV
命令参数说明:
参数 | 说明 |
---|---|
-b | 以Byte为单位显示内存使用情况 |
-k | 以KB为单位显示内存使用情况 |
-m | 以MB为单位显示内存使用情况 |
-h | 以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。 |
命令使用示例:
- 显示当前系统中内存的使用量信息。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# free -h
total used free shared buff/cache available
Mem: 990M 103M 280M 452K 607M 744M
Swap: 0B 0B 0B
[root@iZuf6cfxk8k2c6scbypr2yZ ~]#
命令输出说明:
参数 | 说明 |
---|---|
total | 物理内存总数 |
used | 已经使用的内存数 |
free | 空间的内存数 |
share | 多个进程共享的内存总额 |
buff/cache | 应用使用内存数 |
available | 可用的内存数 |
Swap | 虚拟内存(阿里云ECS服务器默认不开启虚拟内存) |
who
命令描述:who 命令显示关于当前在本地系统上的所有用户的信息。
命令使用示例:
- 显示当前登录系统的用户
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# who
root pts/0 2022-01-25 22:25 (118.31.243.99)
[root@iZuf6cfxk8k2c6scbypr2yZ ~]#
- 显示用户登录来源
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# who -l -H
NAME LINE TIME IDLE PID COMMENT
LOGIN tty1 2022-01-25 22:25 1007 id=tty1
LOGIN ttyS0 2022-01-25 22:25 1008 id=tyS0
[root@iZuf6cfxk8k2c6scbypr2yZ ~]#
- 只显示当前用户
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# who -m -H
NAME LINE TIME COMMENT
root pts/0 2022-01-25 22:25 (118.31.243.99)
- 精简模式显示
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# who -q
root
# users=1
last
命令描述: last 命令用于显示用户最近登录信息。
命令使用示例:
- 显示用户最近登录信息。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# last
root pts/0 118.31.243.99 Tue Jan 25 22:25 still logged in
root pts/0 118.31.243.111 Tue Jan 25 22:25 - 22:25 (00:00)
reboot system boot 3.10.0-1062.18.1 Wed Jan 26 06:24 - 22:42 (-7:-42)
wtmp begins Tue Nov 30 15:31:43 2021
[root@iZuf6cfxk8k2c6scbypr2yZ ~]#
由于这些信息都是以日志文件的形式保存在系统中,黑客可以很容易地对内容进行篡改,所以该命令输出的信息并不能作为服务器是否被入侵的依据。
history
命令描述:history命令用于显示历史执行过的命令。
bash默认记录1000条执行过的历史命令,被记录在~/.bash_history文件中。
命令使用示例:
- 显示最新10条执行过的命令。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# history 10
24 uname -s
25 uname -n
26 uptime
27 free -h
28 who
29 who -l -H
30 who -m -H
31 who -q
32 last
33 history 10
- 清除历史记录。
[root@iZuf6cfxk8k2c6scbypr2yZ ~]# history -c
1月26日 动手实战-Linux磁盘管理入门深入解析动手实操
磁盘管理命令
df命令
df命令描述:该命令检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
df命令语法:
df [参数] [目录或文件名]
参数说明:
参数 | 说明 |
---|---|
-a | 列出所有的文件系统,包括系统特有的/proc等文件系统。 |
-k | 以KBytes为单位,返回各文件系统容量。 |
-m | 以MBytes为单位,返回各文件系统容量。 |
-h | 以GBytes、MBytes、KBytes为单位,返回各文件系统容量。 |
-H | 以M=1000K取代M=1024K的进位方式显示各文件系统容量。 |
-T | 显示文件系统类型。 |
-i | 显示inode信息。 |
df命令使用示例:
示例一:显示磁盘使用情况。
执行如下命令,显示磁盘使用情况。
[root@iZuf66sqqurhamk8gweattZ ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 496768 0 496768 0% /dev
tmpfs 507280 0 507280 0% /dev/shm
tmpfs 507280 456 506824 1% /run
tmpfs 507280 0 507280 0% /sys/fs/cgroup
/dev/vda1 41152812 1971352 37277752 6% /
tmpfs 101456 0 101456 0% /run/user/0
示例二:以inode模式来显示磁盘使用情况。
执行如下命令,以inode模式来显示磁盘使用情况。
[root@iZuf66sqqurhamk8gweattZ ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 124192 327 123865 1% /dev
tmpfs 126820 2 126818 1% /dev/shm
tmpfs 126820 388 126432 1% /run
tmpfs 126820 16 126804 1% /sys/fs/cgroup
/dev/vda1 2621440 60246 2561194 3% /
tmpfs 126820 1 126819 1% /run/user/0
示例三:显示系统内的所有特殊文件格式、名称及磁盘使用情况。
执行如下命令,显示系统内的所有特殊文件格式、名称及磁盘使用情况。
[root@iZuf66sqqurhamk8gweattZ ~]# df -aT
Filesystem Type 1K-blocks Used Available Use% Mounted on
sysfs sysfs 0 0 0 - /sys
proc proc 0 0 0 - /proc
devtmpfs devtmpfs 496768 0 496768 0% /dev
securityfs securityfs 0 0 0 - /sys/kernel/security
tmpfs tmpfs 507280 0 507280 0% /dev/shm
devpts devpts 0 0 0 - /dev/pts
tmpfs tmpfs 507280 456 506824 1% /run
tmpfs tmpfs 507280 0 507280 0% /sys/fs/cgroup
cgroup cgroup 0 0 0 - /sys/fs/cgroup/systemd
pstore pstore 0 0 0 - /sys/fs/pstore
cgroup cgroup 0 0 0 - /sys/fs/cgroup/devices
cgroup cgroup 0 0 0 - /sys/fs/cgroup/net_cls,net_prio
cgroup cgroup 0 0 0 - /sys/fs/cgroup/hugetlb
cgroup cgroup 0 0 0 - /sys/fs/cgroup/cpuset
cgroup cgroup 0 0 0 - /sys/fs/cgroup/freezer
cgroup cgroup 0 0 0 - /sys/fs/cgroup/memory
cgroup cgroup 0 0 0 - /sys/fs/cgroup/cpu,cpuacct
cgroup cgroup 0 0 0 - /sys/fs/cgroup/blkio
cgroup cgroup 0 0 0 - /sys/fs/cgroup/perf_event
cgroup cgroup 0 0 0 - /sys/fs/cgroup/pids
configfs configfs 0 0 0 - /sys/kernel/config
/dev/vda1 ext4 41152812 1971388 37277716 6% /
systemd-1 autofs 0 0 0 - /proc/sys/fs/binfmt_misc
debugfs debugfs 0 0 0 - /sys/kernel/debug
mqueue mqueue 0 0 0 - /dev/mqueue
hugetlbfs hugetlbfs 0 0 0 - /dev/hugepages
tmpfs tmpfs 101456 0 101456 0% /run/user/0
示例四:以GBytes、MBytes、KBytes等格式显示各文件系统容量。
执行如下命令,以GBytes、MBytes、KBytes等格式显示各文件系统容量。
[root@iZuf66sqqurhamk8gweattZ ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 486M 0 486M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 456K 495M 1% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda1 40G 1.9G 36G 6% /
tmpfs 100M 0 100M 0% /run/user/0
du命令
du命令描述:查看磁盘使用空间。du与df命令不同点在于,du命令用于查看文件和目录磁盘的使用空间。
du命令语法:
du [参数] [文件或目录名称]
参数说明:
参数 | 说明 |
---|---|
-a | 列出所有的文件与目录容量。 |
-h | 以G、M、K为单位,返回容量。 |
-s | 列出总量。 |
-S | 列出不包括子目录下的总量。 |
-k | 以KBytes为单位,返回容量。 |
-m | 以MBytes为单位,返回容量。 |
du命令使用示例:
示例一:列出当前目录下的所有文件夹的容量。
执行如下命令,列出当前目录下的所有文件夹的容量。
[root@iZuf66sqqurhamk8gweattZ ~]# du
4 ./.ssh
8 ./.pip
44 .
示例二:列出当前目录下的所有文件夹和文件的容量。
执行如下命令,列出当前目录下的所有文件夹和文件的容量。
[root@iZuf66sqqurhamk8gweattZ ~]# du -a
0 ./.ssh/authorized_keys
4 ./.ssh
4 ./.pydistutils.cfg
4 ./.bash_logout
4 ./.tcshrc
4 ./.bash_profile
4 ./.bash_history
4 ./.bashrc
4 ./.pip/pip.conf
8 ./.pip
4 ./.cshrc
44 .
示例三:列出当前目录下的所有文件夹和文件的容量,并以G、M、K格式显示容量。
执行如下命令,列出当前目录下的所有文件夹和文件的容量。
[root@iZuf66sqqurhamk8gweattZ ~]# du -ah
0 ./.ssh/authorized_keys
4.0K ./.ssh
4.0K ./.pydistutils.cfg
4.0K ./.bash_logout
4.0K ./.tcshrc
4.0K ./.bash_profile
4.0K ./.bash_history
4.0K ./.bashrc
4.0K ./.pip/pip.conf
8.0K ./.pip
4.0K ./.cshrc
44K .
示例四:列出根目录底下每个目录所占用的容量,并以MBytes单位显示容量。
执行如下命令,列出根目录底下每个目录所占用的容量,并以MBytes单位显示容量。
[root@iZuf66sqqurhamk8gweattZ ~]# du -sm /*
0 /bin
146 /boot
0 /dev
34 /etc
1 /home
0 /lib
0 /lib64
1 /lost+found
1 /media
1 /mnt
1 /opt
du: cannot access ‘/proc/1834/task/1834/fd/4’: No such file or directory
du: cannot access ‘/proc/1834/task/1834/fdinfo/4’: No such file or directory
du: cannot access ‘/proc/1834/fd/4’: No such file or directory
du: cannot access ‘/proc/1834/fdinfo/4’: No such file or directory
0 /proc
1 /root
1 /run
0 /sbin
1 /srv
0 /sys
1 /tmp
1573 /usr
126 /var
fdisk命令
fdisk命令描述:该命令用于磁盘分区。
fdisk命令语法:fdisk [-l] 装置名称
参数说明:
参数 | 说明 |
---|---|
-l | 输出后面装置名称的所有的分区内容。若仅有 fdisk -l时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。 |
fdisk命令使用示例:
示例一:列出系统所有装置的分区信息。
执行如下命令,列出系统所有装置的分区信息。
fdisk -l
示例二:列出系统中的根目录所在磁盘,并查阅该硬盘内的相关信息。
a. 执行如下命令,找出根目录所在磁盘名。
[root@iZuf66sqqurhamk8gweattZ ~]# df /
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 41152812 1971460 37277644 6% /
b. 执行如下命令,对磁盘/dev/vda进行分区操作。
[root@iZuf66sqqurhamk8gweattZ ~]# fdisk /dev/vda
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help):
注意:
对磁盘进行分区操作时,磁盘名不包含数字。
c. 执行如下命令,获取帮助。
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Command (m for help)
执行如下命令,查看磁盘状态。
Command (m for help): p
Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0002b49c
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 83886046 41941999+ 83 Linux
Command (m for help):
d. 执行如下命令,不存储任何操作并离开。
Command (m for help): q
[root@iZuf66sqqurhamk8gweattZ ~]#
1月27日 动手实战-Linux文件与权限入门深入解析动手实操
文件目录管理命令
ls
命令描述: ls命令用于显示指定工作目录下的内容。
命令格式:ls [参数] [目录名]。
参数说明:
参数 | 说明 |
---|---|
-a | 显示所有文件及目录(包括隐藏文件) |
-l | 将文件的权限、拥有者、文件大小等详细信息列出(ll等同于ls -l) |
-r | 将文件反序列出(默认按英文字母正序) |
-t | 将文件按创建时间正序列出 |
-R | 递归遍历目录下文件 |
命令使用示例:
查看当前目录下的所有文件(包括隐藏文件)。
[root@iZuf61blsdoksjgrr149fbZ ~]# ll -a
total 44
dr-xr-x---. 4 root root 4096 Jan 27 09:58 .
dr-xr-xr-x. 18 root root 4096 Jan 27 09:57 ..
-rw------- 1 root root 95 Jan 27 09:58 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
drwxr-xr-x 2 root root 4096 Apr 26 2020 .pip
-rw-r--r-- 1 root root 206 Jan 27 09:57 .pydistutils.cfg
drwx------ 2 root root 4096 Apr 26 2020 .ssh
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
[root@iZuf61blsdoksjgrr149fbZ ~]#
pwd
命令描述:获取当前工作目录的绝对路径。
命令使用示例:
[root@iZuf61blsdoksjgrr149fbZ ~]# pwd
/root
cd
命令描述:cd命令用于切换工作目录。
命令使用示例:
[root@iZuf61blsdoksjgrr149fbZ ~]# cd /usr/local/etc/
[root@iZuf61blsdoksjgrr149fbZ etc]# pwd
/usr/local/etc
[root@iZuf61blsdoksjgrr149fbZ etc]# cd ../..
[root@iZuf61blsdoksjgrr149fbZ usr]# pwd
/usr
[root@iZuf61blsdoksjgrr149fbZ usr]# cd
[root@iZuf61blsdoksjgrr149fbZ ~]# pwd
/root
[root@iZuf61blsdoksjgrr149fbZ ~]#
在路径表示中:
- 一个半角句号(.)表示当前目录,例如路径./app/log等同于app/log。
- 两个半角句号(..)表示上级目录,例如路径/usr/local/../src等同于/usr/src,其中local和src目录同级。
cd命令的默认参数为~,符号~表示当前用户的家目录,即在root用户登录时,命令cd、cd ~和cd /root执行效果相同。
touch
命令描述:touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
命令格式:touch [参数] [文件]。
参数说明:
参数 | 说明 |
---|---|
-c | 如果指定文件不存在,不会建立新文件 |
-r | 使用参考文件的时间记录 |
-t | 设置文件的时间记录 |
命令使用示例:
- 创建两个空文件。
[root@iZuf61blsdoksjgrr149fbZ ~]# touch demo1.txt demo2.txt
[root@iZuf61blsdoksjgrr149fbZ ~]# ll
total 0
-rw-r--r-- 1 root root 0 Jan 27 10:04 demo1.txt
-rw-r--r-- 1 root root 0 Jan 27 10:04 demo2.txt
[root@iZuf61blsdoksjgrr149fbZ ~]#
- 修改demo1.txt的时间记录为当前系统时间。
[root@iZuf61blsdoksjgrr149fbZ ~]# touch demo1.txt
[root@iZuf61blsdoksjgrr149fbZ ~]# ll
total 0
-rw-r--r-- 1 root root 0 Jan 27 10:05 demo1.txt
-rw-r--r-- 1 root root 0 Jan 27 10:04 demo2.txt
- 更新demo2.txt的时间记录,使其和demo1.txt的时间记录相同。
[root@iZuf61blsdoksjgrr149fbZ ~]# touch -r demo1.txt demo2.txt
[root@iZuf61blsdoksjgrr149fbZ ~]# ll
total 0
-rw-r--r-- 1 root root 0 Jan 27 10:05 demo1.txt
-rw-r--r-- 1 root root 0 Jan 27 10:05 demo2.txt
mkdir
命令描述:mkdir命令用于新建子目录。-p参数确保目录名称存在,不存在的就新建一个。
[root@iZuf61blsdoksjgrr149fbZ ~]# mkdir -p a/b/c/d
命令使用示例:
新建目录a/b/c/d,并使用tree命令查看创建后的目录结构。
[root@iZuf61blsdoksjgrr149fbZ ~]# tree
.
├── a
│ └── b
│ └── c
│ └── d
├── demo1.txt
└── demo2.txt
4 directories, 2 files
[root@iZuf61blsdoksjgrr149fbZ ~]#
rm
命令描述:rm命令用于删除一个文件或者目录。
命令格式:rm [参数] [文件]。
参数说明:
参数 | 说明 |
---|---|
-i | 删除前逐一询问确认 |
-f | 无需确认,直接删除 |
-r | 删除目录下所有文件 |
命令使用示例:
无需确认直接删除文件。
[root@iZuf61blsdoksjgrr149fbZ ~]# rm -rf demo*
[root@iZuf61blsdoksjgrr149fbZ ~]# ll
total 4
drwxr-xr-x 3 root root 4096 Jan 27 10:06 a
[root@iZuf61blsdoksjgrr149fbZ ~]#
无需确认直接删除目录a及其目录下所有子目录和文件。
[root@iZuf61blsdoksjgrr149fbZ ~]# rm -rf a
[root@iZuf61blsdoksjgrr149fbZ ~]# ll
total 0
[root@iZuf61blsdoksjgrr149fbZ ~]#
cp
命令描述: cp命令主要用于复制文件或目录。
命令格式:cp [参数] [源文件] [目标文件]。
参数说明:
参数 | 说明 |
---|---|
-d | 复制时保留链接 |
-f | 覆盖已经存在的目标文件而不给出提示 |
-i | 覆盖前询问 |
-p | 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中 |
-r | 复制目录及目录内的所有项目 |
命令使用示例:
将目录c/d中的所有内容复制到目录a/b下。
[root@iZuf61blsdoksjgrr149fbZ ~]# mkdir -p a/b
[root@iZuf61blsdoksjgrr149fbZ ~]# mkdir -p c/b
[root@iZuf61blsdoksjgrr149fbZ ~]# tree
.
├── a
│ └── b
└── c
└── b
4 directories, 0 files
[root@iZuf61blsdoksjgrr149fbZ ~]# cp -r c a/b/
[root@iZuf61blsdoksjgrr149fbZ ~]# tree
.
├── a
│ └── b
│ └── c
│ └── b
└── c
└── b
6 directories, 0 files
[root@iZuf61blsdoksjgrr149fbZ ~]#
mv
命令描述: mv命令用来为文件或目录改名、或将文件或目录移入其它位置。
命令格式:mv [参数] [源文件] [目标文件]
参数说明:
参数 | 说明 |
---|---|
-i | 若指定目录已有同名文件,则先询问是否覆盖旧文件 |
-f | 如果目标文件已经存在,不会询问而直接覆盖 |
命令使用示例:
- 将文件名a.txt改为b.txt。
[root@iZuf61blsdoksjgrr149fbZ ~]# touch a.txt
[root@iZuf61blsdoksjgrr149fbZ ~]# ls
a a.txt c
[root@iZuf61blsdoksjgrr149fbZ ~]# mv a.txt b.txt
[root@iZuf61blsdoksjgrr149fbZ ~]# ls
a b.txt c
- 将c目录移动到a/b/c/d/下。
[root@iZuf61blsdoksjgrr149fbZ ~]# mv c a/b/c/d/
[root@iZuf61blsdoksjgrr149fbZ ~]# tree
.
├── a
│ └── b
│ └── c
│ ├── b
│ └── d
│ └── b
└── b.txt
6 directories, 1 file
[root@iZuf61blsdoksjgrr149fbZ ~]#
- 将当前目录内容全部移动到/tmp目录中。
[root@iZuf61blsdoksjgrr149fbZ ~]# mv ./* /tmp
rename
命令描述:rename命令用字符串替换的方式批量改变文件名。rename命令有C语言和Perl语言两个版本,这里介绍C语言版本的rename命令,不支持正则表达式。
命令使用示例:
- 将当前目录下所有文件名中的字符串demo改为大写的字符串DEMO。
[root@iZuf61blsdoksjgrr149fbZ ~]# touch demo1.txt demo2.txt
[root@iZuf61blsdoksjgrr149fbZ ~]# ls
demo1.txt demo2.txt
[root@iZuf61blsdoksjgrr149fbZ ~]# rename demo DEMO *
[root@iZuf61blsdoksjgrr149fbZ ~]# ls
DEMO1.txt DEMO2.txt
- 将当前目录下所有.txt文件后缀都改为text。
[root@iZuf61blsdoksjgrr149fbZ ~]# rename .txt .text *
[root@iZuf61blsdoksjgrr149fbZ ~]# ls
DEMO1.text DEMO2.text
[root@iZuf61blsdoksjgrr149fbZ ~]#
文件权限
ls命令可以查看Linux系统上的文件、目录和设备的权限。
[root@iZuf61blsdoksjgrr149fbZ ~]# ls -l /boot/
total 140804
-rw-r--r-- 1 root root 153187 Mar 18 2020 config-3.10.0-1062.18.1.el7.x86_64
-rw-r--r--. 1 root root 152976 Aug 8 2019 config-3.10.0-1062.el7.x86_64
drwxr-xr-x. 3 root root 4096 Apr 26 2020 efi
drwxr-xr-x. 2 root root 4096 Apr 26 2020 grub
drwx------. 5 root root 4096 Apr 26 2020 grub2
-rw-------. 1 root root 57931787 Apr 26 2020 initramfs-0-rescue-20200426154603174201708213343640.img
-rw------- 1 root root 18197454 Apr 26 2020 initramfs-3.10.0-1062.18.1.el7.x86_64.img
-rw------- 1 root root 10734218 Apr 26 2020 initramfs-3.10.0-1062.18.1.el7.x86_64kdump.img
-rw------- 1 root root 18198855 Apr 26 2020 initramfs-3.10.0-1062.el7.x86_64.img
-rw------- 1 root root 10732204 Apr 26 2020 initramfs-3.10.0-1062.el7.x86_64kdump.img
-rw-r--r-- 1 root root 318991 Mar 18 2020 symvers-3.10.0-1062.18.1.el7.x86_64.gz
-rw-r--r--. 1 root root 318717 Aug 8 2019 symvers-3.10.0-1062.el7.x86_64.gz
-rw------- 1 root root 3600165 Mar 18 2020 System.map-3.10.0-1062.18.1.el7.x86_64
-rw-------. 1 root root 3594971 Aug 8 2019 System.map-3.10.0-1062.el7.x86_64
-rwxr-xr-x. 1 root root 6734016 Apr 26 2020 vmlinuz-0-rescue-20200426154603174201708213343640
-rwxr-xr-x 1 root root 6738112 Mar 18 2020 vmlinuz-3.10.0-1062.18.1.el7.x86_64
-rwxr-xr-x. 1 root root 6734016 Aug 8 2019 vmlinuz-3.10.0-1062.el7.x86_64
上述ls -l命令中显示的第一列就是文件权限信息,共11位字符,分5部分。
- 第1位表示存档类型,d表示目录,-表示一般文件。
- 第2~4位表示当前用户的权限(属主权限)。
- 第5~7位表示同用户组的用户权限(属组权限)。
- 第8~10位表示不同用户组的用户权限(其他用户权限)。
- 第11位是一个半角句号.,表示SELinux安全标签。
上述ls -l命令中显示的第一列就是文件权限信息,共11位字符,分5部分。
- 第1位表示存档类型,d表示目录,-表示一般文件。
- 第2~4位表示当前用户的权限(属主权限)。
- 第5~7位表示同用户组的用户权限(属组权限)。
- 第8~10位表示不同用户组的用户权限(其他用户权限)。
- 第11位是一个半角句号.,表示SELinux安全标签。
chmod命令
chmod命令用于修改文件权限mode,-R参数以递归方式对子目录和文件进行修改。
命令使用示例:
- 新建名为hello.sh的Shell脚本,该脚本将会输出Hello World。用ll命令可以看到新建的脚本没有执行权限,其权限用八进制表示为644。
[root@iZuf61blsdoksjgrr149fbZ ~]# echo "echo 'Hello World'" > hello.sh
[root@iZuf61blsdoksjgrr149fbZ ~]# ll
total 4
-rw-r--r-- 1 root root 0 Jan 27 10:12 DEMO1.text
-rw-r--r-- 1 root root 0 Jan 27 10:12 DEMO2.text
-rw-r--r-- 1 root root 19 Jan 27 10:16 hello.sh
[root@iZuf61blsdoksjgrr149fbZ ~]#
- 将hello.sh文件增加属主的执行权限。
[root@iZuf61blsdoksjgrr149fbZ ~]# chmod u+x hello.sh
[root@iZuf61blsdoksjgrr149fbZ ~]# ll
total 4
-rw-r--r-- 1 root root 0 Jan 27 10:12 DEMO1.text
-rw-r--r-- 1 root root 0 Jan 27 10:12 DEMO2.text
-rwxr--r-- 1 root root 19 Jan 27 10:16 hello.sh
[root@iZuf61blsdoksjgrr149fbZ ~]#
- 将hello.sh文件撤销属主的执行权限。
[root@iZuf61blsdoksjgrr149fbZ ~]# chmod u-x hello.sh
[root@iZuf61blsdoksjgrr149fbZ ~]# ll
total 4
-rw-r--r-- 1 root root 0 Jan 27 10:12 DEMO1.text
-rw-r--r-- 1 root root 0 Jan 27 10:12 DEMO2.text
-rw-r--r-- 1 root root 19 Jan 27 10:16 hello.sh
[root@iZuf61blsdoksjgrr149fbZ ~]#
- 将hello.sh文件权限修改为八进制表示的744权限。
[root@iZuf61blsdoksjgrr149fbZ ~]# chmod 744 hello.sh
[root@iZuf61blsdoksjgrr149fbZ ~]# ll
total 4
-rw-r--r-- 1 root root 0 Jan 27 10:12 DEMO1.text
-rw-r--r-- 1 root root 0 Jan 27 10:12 DEMO2.text
-rwxr--r-- 1 root root 19 Jan 27 10:16 hello.sh
[root@iZuf61blsdoksjgrr149fbZ ~]#
- 使用bash命令解释器执行hello.sh脚本文件。
[root@iZuf61blsdoksjgrr149fbZ ~]# /bin/bash hello.sh
Hello World
[root@iZuf61blsdoksjgrr149fbZ ~]#
其中,u+x表示增加属主的执行权限,u表示属主,g表示属组,o表示其他,a表示所有用户。
chown命令
chown命令修改文件的属主和属组;-R参数以递归方式对子目录和文件进行修改;ls -l命令显示的第三列和第四列就是文件的属主和属组信息。
命令使用示例:
-
新建一个文本文件test.txt,用ll命令可以看到该文件的属主和属组是root。whoami命令可以查看当前Shell环境登录的用户名。
[root@iZuf61blsdoksjgrr149fbZ ~]# whoami root [root@iZuf61blsdoksjgrr149fbZ ~]# touch test.txt [root@iZuf61blsdoksjgrr149fbZ ~]# ll total 4 -rw-r--r-- 1 root root 0 Jan 27 10:12 DEMO1.text -rw-r--r-- 1 root root 0 Jan 27 10:12 DEMO2.text -rwxr--r-- 1 root root 19 Jan 27 10:16 hello.sh -rw-r--r-- 1 root root 0 Jan 27 10:19 test.txt [root@iZuf61blsdoksjgrr149fbZ ~]#
-
创建两个用户。
[root@iZuf61blsdoksjgrr149fbZ ~]# adduser test [root@iZuf61blsdoksjgrr149fbZ ~]# passwd test Changing password for user test. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. [root@iZuf61blsdoksjgrr149fbZ ~]#
-
修改test.txt文件的属主用户为test。
[root@iZuf61blsdoksjgrr149fbZ ~]# chown test test.txt [root@iZuf61blsdoksjgrr149fbZ ~]# ll total 4 -rw-r--r-- 1 root root 0 Jan 27 10:12 DEMO1.text -rw-r--r-- 1 root root 0 Jan 27 10:12 DEMO2.text -rwxr--r-- 1 root root 19 Jan 27 10:16 hello.sh -rw-r--r-- 1 test root 0 Jan 27 10:19 test.txt [root@iZuf61blsdoksjgrr149fbZ ~]#
-
修改test.txt文件的属主和属组为root。
[root@iZuf61blsdoksjgrr149fbZ ~]# chown root:root test.txt [root@iZuf61blsdoksjgrr149fbZ ~]# ll total 4 -rw-r--r-- 1 root root 0 Jan 27 10:12 DEMO1.text -rw-r--r-- 1 root root 0 Jan 27 10:12 DEMO2.text -rwxr--r-- 1 root root 19 Jan 27 10:16 hello.sh -rw-r--r-- 1 root root 0 Jan 27 10:19 test.txt [root@iZuf61blsdoksjgrr149fbZ ~]#
chgrp命令
chgrp命令用于修改文件的属组。
命令使用示例:
将test.txt文件的属组改为root。
[root@iZuf61blsdoksjgrr149fbZ ~]# chgrp root test.txt
[root@iZuf61blsdoksjgrr149fbZ ~]# ll
total 4
-rw-r--r-- 1 root root 0 Jan 27 10:12 DEMO1.text
-rw-r--r-- 1 root root 0 Jan 27 10:12 DEMO2.text
-rwxr--r-- 1 root root 19 Jan 27 10:16 hello.sh
-rw-r--r-- 1 root root 0 Jan 27 10:19 test.txt
1月28日 动手实战-Linux文件管理入门深入解析动手实操
磁盘管理命令
- cat命令。
cat命令描述:该命令用于连接文件并打印到标准输出设备上。
cat命令语法:
cat [参数] [文件名]
参数说明:
参数 | 说明 |
---|---|
-n | 由1开始对所有输出的行数进行编号。 |
-b | 由1开始对所有输出的行数进行编号,对于空白行不编号。 |
-s | 当遇到有连续两行以上的空白行,就替换为一行的空白行。 |
-E | 在每行结束处显示$。 |
-T | 将 TAB 字符显示为^I。 |
cat命令使用示例:
a. 执行如下命令,将一个自增序列写入test1.txt文件中。
b. 执行如下命令,查看文件test1.txt内容。
[root@iZuf686a5zkkp1wwl53xjqZ ~]# for i in $(seq 1 10); do echo $i >> test1.txt ; done
[root@iZuf686a5zkkp1wwl53xjqZ ~]# cat test1.txt
1
2
3
4
5
6
7
8
9
10
[root@iZuf686a5zkkp1wwl53xjqZ ~]#
c. 执行如下命令,将test1.txt的文件内容加上行号后输入到test2.txt文件。
d. 执行如下命令,查看文件test2.txt内容。
[root@iZuf686a5zkkp1wwl53xjqZ ~]# cat -n test1.txt > test2.txt
[root@iZuf686a5zkkp1wwl53xjqZ ~]# cat test2.txt
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
e. 执行如下命令,将test1.txt文件内容清空。
f. 执行如下命令,查看文件test1.txt内容。
返回结果如下所示,您可以看到test1.txt文件没有任何内容。
[root@iZuf686a5zkkp1wwl53xjqZ ~]# cat /dev/null > test1.txt
[root@iZuf686a5zkkp1wwl53xjqZ ~]# cat test1.txt
- cmp命令。
cmp命令描述:该命令用于比较两个文件是否有差异。当相互比较的两个文件完全一样时,该指令不会显示任何信息。否则会标示出第一个不同之处的字符和列数编号。当不指定任何文件名称,或文件名为"-",则cmp指令会从标准输入设备读取数据。
cmp命令语法:
cmp [-clsv][-i <字符数目>][--help][第一个文件][第二个文件]
参数说明:
参数 | 说明 |
---|---|
-c | 除了标明差异处的十进制字码之外,一并显示该字符所对应字符。 |
-i <字符数目> | 指定一个数目。 |
-l | 标示出所有不一样的地方。 |
-s | 不显示错误信息。 |
-v | 显示版本信息。 |
--help | 在线帮助。 |
cmp命令使用示例:
a. 执行如下命令,将一个自增序列1-5写入test1.txt文件中。
b. 执行如下命令,比较test1.txt文件和test2.txt文件是否相同。
返回结果如下所示,您可以看到test1.txt文件和test2.txt文件第一行就有不同之处。
[root@iZuf686a5zkkp1wwl53xjqZ ~]# for i in $(seq 1 5); do echo $i >> test1.txt ; done
[root@iZuf686a5zkkp1wwl53xjqZ ~]# cmp test1.txt test2.txt
test1.txt test2.txt differ: byte 1, line 1
[root@iZuf686a5zkkp1wwl53xjqZ ~]#
\3. diff命令。
diff命令描述:该命令用于比较文件的差异。diff命令以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。
diff命令语法:
diff [参数] [文件或目录1] [文件或目录2]
参数说明:
参数 | 说明 |
---|---|
-<行数> | 指定要显示多少行的文本。此参数必须与-c或-u参数一并使用。 |
-c | 显示全部内文,并标出不同之处。 |
-u | 以合并的方式来显示文件内容的不同。 |
-a | diff预设只会逐行比较文本文件。 |
-b | 不检查空格字符的不同。 |
-d | 使用不同的演算法,以较小的单位来做比较。 |
-i | 不检查大小写的不同。 |
-y | 以并列的方式显示文件的异同之处。 |
-W<宽度> | 在使用-y参数时,指定栏宽。 |
diff命令使用示例:
执行如下命令,比较test1.txt文件和test2.txt文件,以并排格式输出。
diff test1.txt test2.txt -y -W 50
返回结果如下所示,您可以看到test1.txt文件和test2.txt文件的不同之处。
[root@iZuf686a5zkkp1wwl53xjqZ ~]# diff test1.txt test2.txt -y -W 50
1 | 1 1
2 | 2 2
3 | 3 3
4 | 4 4
5 | 5 5
> 6 6
> 7 7
> 8 8
> 9 9
> 10 10
[root@iZuf686a5zkkp1wwl53xjqZ ~]#
- file命令。
file命令描述:该命令用于辨识文件类型。
file命令语法:
file [参数] [文件]
参数说明:
参数 | 说明 |
---|---|
-b | 列出辨识结果时,不显示文件名称。 |
-c | 详细显示指令执行过程,便于排错或分析程序执行的情形。 |
-f<名称文件> | 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。 |
-L | 直接显示符号连接所指向的文件的类别。 |
-v | 显示版本信息。 |
-z | 解读压缩文件的内容。 |
file命令使用示例:
a. 执行如下命令,显示test1.txt文件类型。
返回结果如下所示,您可以看到test1.txt文件类型是ASCII text。
[root@iZuf686a5zkkp1wwl53xjqZ ~]# file test1.txt
test1.txt: ASCII text
b. 执行如下命令,显示test2.txt文件类型并不显示文件名称。
[root@iZuf686a5zkkp1wwl53xjqZ ~]# file -b test2.txt
ASCII text
- find命令。
find命令描述:该命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
find命令语法:
find [参数] [文件]
参数说明:
参数 | 说明 |
---|---|
-mount | 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件。 |
-amin n | 在过去n分钟内被读取过文件。 |
-type c | 文件类型是c的文件。 |
-cmin n | 在过去n分钟内被修改过。 |
-name name | 查找文件名称为name的文件。 |
find命令使用示例:
a. 执行如下命令,将当前目录及其子目录下所有文件后缀为.txt的文件列出来。
[root@iZuf686a5zkkp1wwl53xjqZ ~]# find . -name "*.txt"
./test1.txt
./test2.txt
b. 执行如下命令,查找系统中所有文件长度为0的普通文件,并列出它们的完整路径。
find / -type f -size 0 -exec ls -l {} \;