新手必须掌握的Linux命令学习笔记

本文是Linux就该这么学第二章学习过程中的笔记,仅作为日后回顾查阅用,侵删。

一、帮助命令man

首先介绍一下常见Linux命令的格式,如下:

命令名称 [命令参数] [命令对象]

注意:命令名称、命令参数、命令对象之间有空格作为分隔。

命令参数的形式可分为长格式与短格式:

格式 示例
长格式 man –help
短格式 man -h

注意:短格式与短格式的参数之间可以合并,合并后仅保留一个-(减号)即可。

当执行一个命令后想立即停止,可以使用Ctrl+C快捷键,当命令在执行时不断在屏幕上输出信息,可以在命令末尾加上&符号,这样命令将进入系统后台来执行。

现在,我们开始学习万能的帮助命令man

在man命令帮助信息界面中,常用操作快捷键如下:

按键 用处
空格键 向下翻一页
PaGe down 向下翻一页
PaGe up 向上翻一页
home 直接前往首页
end 直接前往尾页
/ 从上至下搜索某个关键词,如“/linux”
? 从下至上搜索某个关键词,如“?linux”
n 定位到下一个搜索到的关键词
N 定位到上一个搜索到的关键词
q 退出帮助文档

man命令帮助信息的结构及意义如下:

结构名称 代表意义
NAME 命令的名称
SYNOPSIS 参数的大致使用方法
DESCRIPTION 介绍说明
EXAMPLES 演示(附带简单说明)
OVERVIEW 概述
DEFAULTS 默认的功能
OPTIONS 具体的可用选项(带介绍)
ENVIRONMENT 环境变量
FILES 用到的文件
SEE ALSO 相关的资料
HISTORY 维护历史与联系方式

二、常用系统工作命令

2.1)echo命令

echo命令用于在终端输出字符串或变量提取后的值,格式为:

echo [字符串|$变量]

例如,输出字符串与输出变量:

megumi]# echo techotaku.me
1
2
3
4
[root@linuxprobe megumi]# echo techotaku.me
techotaku.me
[root@linuxprobe megumi]# echo $SHELL
/bin/bash

2.2)date命令

date命令用于显示及设置系统的时间或日期,格式为:

date [选项] ["+指定的格式"]

可以指定的格式如下:

参数 作用
%t 跳格[Tab键]
%Y
%m
%d
%F 完整日期,同%Y-%m-%d
%H 小时(00~23)
%M 分钟(00~59)
%S 秒(00~59)
%T 完整时间,同%H:%M:%S
%j 今年中的第几天

例如输出完整日期及时间:

1
2
[root@linuxprobe megumi]# date "+%F %T"
2018-07-13 10:34:15

2.3)reboot命令

reboot命令用于重启系统,默认只能使用root管理员来执行,格式为:

reboot

1
[root@linuxprobe megumi]# reboot

2.4)poweroff命令

poweroff命令用于关闭系统,同样只能使用root管理员来执行,格式为:

poweroff

1
[root@linuxprobe megumi]# poweroff

2.5)wget命令

wget用于在终端中下载网络文件,格式为:

wget [参数] 下载地址

常用参数如下表:

参数 作用
-b 后台下载模式
-P 下载到指定目录
-t 最大尝试次数
-c 断点续传
-p 下载页面内所有资源,包括图片、视频等
-r 递归下载

例如下载某个文件:

1
[root@linuxprobe megumi]# wget https://vscode-update.azurewebsites.net/latest/win32-x64/stable

例如递归下载某个页面,下载完成后会自动保存到当前路径下一个名为www.linuxprobe.com的目录中:

1
[root@linuxprobe megumi]# wget -r -p test https://www.linuxprobe.com

2.6)ps命令

ps命令用于查看系统中的进程状态,格式为:

ps [参数]

ps命令的常见参数及作用如下:

参数 作用
-a 显示所有进程(包括其他用户的进程)
-u 用户以及其他详细信息
-x 显示没有控制终端的进程

Linux中,有五种常见的进程状态,分别为运行、中断、不可中断、僵尸、停止,其含义如下

状态 描述
R(运行) 进程正在运行或在运行队列中等待。
S(中断) 进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
D(不可中断) 进程不响应系统异步信号,即便用kill命令也不能将其中断。
Z(僵死) 进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。
T(停止) 进程收到停止信号后停止运行。

当执行ps aux之后通常会看到如下状态(截取部分,且不包括中文注释):

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
进程的所有者 进程ID号 运算器占用率 内存占用率 虚拟内存使用量(单位是KB) 占用的固定内存量(单位是KB) 所在终端 进程状态 被启动的时间 实际使用CPU的时间 命令名称与参数
root 1 0.0 0.4 53684 7628 ? Ss 07:22 0:02 /usr/lib/systemd/systemd
root 2 0.0 0.0 0 0 ? S 07:22 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 07:22 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 07:22 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 07:22 0:00 [migration/0]

注意:ps格式特殊,短格式参数合并之后可以不带-(减号)

2.7)top命令

top命令用于动态地监视进程活动与系统负载信息,格式为:

top

top命令可以看做“强化版windows任务管理器”,它的运行界面如图所示

top命令执行结果的前5行为系统整体的统计信息,其代表含义如下:

  • 第1行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、五分钟、15分钟内的平均值,数值越小意味着负载越低)。
  • 第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
  • 第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。其中数据均为CPU数据并以百分比格式显示,例如“97.1 id”意味着有97.1%的CPU处理器资源处于空闲。
  • 第4行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
  • 第5行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。

2.8)pidof命令

pidof命令用于查询某个指定服务进程的pid值,格式为:

pidof [参数] [服务名称]

每个进程的PID值是唯一的,因此可以通过PID来区分不同进程,例如查询本机上sshd服务进程的PID:

1
2
[root@linuxprobe megumi]# pidof sshd
19008 19004 1692

2.9)kill命令

kill命令用于终止某个指定PID的服务进程,格式为:

kill [参数] [进程PID]

1
[root@linuxprobe megumi]# kill 19008

2.10)killall命令

killall命令用于终止某个指定名称的服务所对应的全部进程,格式为:

killall [参数] [服务名称]

通常复杂程序会有多个进程,利用kill逐个结束进程比较麻烦,因此使用killall来批量结束某个服务带有的全部进程,例如:

1
2
3
4
5
[root@linuxprobe megumi]# pidof httpd
13581 13580 13579 13578 13577 13576
[root@linuxprobe megumi]# killall httpd
[root@linuxprobe megumi]# pidof httpd
[root@linuxprobe megumi]#

三、系统状态检测命令

3.1)ifconfig命令

ifconfig命令用于获取网卡配置与网络状态等信息,格式为:

ifconfig [网络设备] [参数]

使用ifconfig命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就是网卡名称、inet参数后面的IP地址、ether参数后面的网卡物理地址(又称为MAC地址),以及RX、TX的接收数据包与发送数据包的个数及累计流量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@linuxprobe megumi]# ifconfig
eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.18.140 netmask 255.255.255.0 broadcast 192.168.18.255
inet6 fe80::20c:29ff:fe3e:eeba prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:3e:ee:ba txqueuelen 1000 (Ethernet)
RX packets 93476 bytes 57683407 (55.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 22012 bytes 3472618 (3.3 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
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 14 bytes 1400 (1.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14 bytes 1400 (1.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

3.2)uname命令

uname命令用于查看系统内核与系统版本等信息,格式为:

uname [-a]

在使用uname命令时,一般会固定搭配上-a参数来完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息。

1
Linux linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux

3.3)uptime命令

uptime用于查看系统的负载信息,格式为:

uptime

uptime显示当前系统时间、系统已运行时间、启用终端数量以及平均负载等信息。平均负载值指的是系统在最近1分钟、5分钟、15分钟内的压力情况(下面加粗的信息部分);负载值越低越好,尽量不要长期超过1,在生产环境中不要超过5。

1
2
[root@linuxprobe megumi]# uptime
10:25:05 up 3 days, 18:03, 2 users, load average: 0.00, 0.01, 0.05

3.4)free命令

free用于显示当前系统中内存的使用量信息,格式为:

free [-h]

查看内存使用信息比较常见,一般使用-h参数以更可读的形式返回结果(不包括中文注释),例如:

内存总量 已用量 可用量 进程共享的内存量 磁盘缓存的内存量 缓存的内存量
total used free shared buffers cached
Mem: 1.8G 1.3G 542M 9.8M 1.6M 413M
-/+ buffers/cache: 869M 957M
Swap: 2.0G 0B 2.0G

3.5)who命令

who用于查看当前登入主机的用户终端信息,格式为:

who [参数]

who可以快速显示出所有正在登陆本机的用户的名称以及他们正在开启的终端信息(不包括中文注释)。例如:

登陆的用户名 终端设备 登陆到系统的时间
root :0 2017-08-24 17:52 (:0)
root pts/0 2017-08-24 17:52 (:0)

3.6)last命令

last命令用于查看所有系统的登陆记录,格式为:

last [参数]

使用last命令可以查看本机的登陆记录,但很容易被篡改,因此不要单纯以该命令的输出信息而判断有无被恶意入侵,用法示例:

1
2
3
4
5
6
7
[root@linuxprobe megumi]# last
megumi pts/0 192.168.18.1 Mon Jul 16 10:16 still logged in
megumi pts/0 192.168.18.1 Fri Jul 13 16:16 - 20:18 (04:01)
megumi pts/0 192.168.18.1 Fri Jul 13 11:31 - 15:40 (04:09
megumi pts/0 192.168.18.1 Fri Jul 13 11:30 - 11:31 (00:00)
megumi pts/1 192.168.18.1 Fri Jul 13 10:32 - 11:30 (00:58)
………………省略部分登录信息………………

3.7)history命令

history命令用于显示历史执行过的命令,格式为:

history [-c]

history命令能显示出当前用户在本地计算机中执行过的最近1000条命令记录,还可以自定义/etc/profile文件中的HISTSIZE变量值更改记录数量,使用-c参数会清空所有命令历史记录,还可以使用“!编码数字”的方式来重复执行某一次的命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@linuxprobe megumi]# history
1 exit
2 man man
3 man
4 man man
5 echo $SHELL
6 ls -l /bin/bash
7 file /bin/bash
8 data
9 date
10 date "+%Y-%m-%d %H:%M:%S"
………………省略部分命令信息………………
[root@linuxprobe megumi]# !10
date "+%Y-%m-%d %H:%M:%S"
2018-07-16 10:38:09

历史命令会被保存到用户家目录中的.bash_history文件中。Linux系统中以点(.)开头的文件均代表隐藏文件,这些文件大多数为系统服务文件,可以用cat命令查看其文件内容。

1
[root@linuxprobe megumi]# cat ~/.bash_history

使用-c参数清空命令记录:

1
[root@linuxprobe megumi]# history -c

3.8)sosreport命令

sosreport命令用于收集系统配置及架构信息并输出诊断文档,格式为:

sosreport

执行命令之后,会生成诊断资料压缩包以及校检码。

四、工作目录切换命令

4.1)pwd命令

pwd命令用于显示用户当前所处的工作目录,格式为:

pwd [选项]

用法示例:

1
2
[root@linuxprobe megumi]# pwd
/home/megumi

4.2)cd命令

cd命令用于切换工作路径,格式为:

cd [目录名称]

这个命令应该是最常用的一个Linux命令了。可以通过cd命令迅速、灵活地切换到不同的工作目录。除了常见的切换目录方式,还可以使用“cd -”命令返回到上一次所处的目录,使用“cd..”命令进入上级目录,以及使用“cd ~”命令切换到当前用户的家目录,亦或使用“cd ~username”切换到其他用户的家目录。例如,可以使用“cd 路径”的方式切换进/etc目录中:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@linuxprobe ~]# pwd
/root
[root@linuxprobe ~]# cd -
/home/megumi
[root@linuxprobe megumi]# cd ..
[root@linuxprobe home]# pwd
/home
[root@linuxprobe home]# cd ~
[root@linuxprobe ~]# pwd
/root
[root@linuxprobe ~]# cd ~megumi
[root@linuxprobe megumi]# pwd
/home/megumi

4.3)ls命令

ls命令用于显示目录中的文件信息,格式为:

ls [选项] [文件]

使用ls命令的“-a”参数看到全部文件(包括隐藏文件),使用“-l”参数可以查看文件的属性、大小等详细信息。将这两个参数整合之后,再执行ls命令即可查看当前目录中的所有文件并输出这些文件的属性信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@linuxprobe megumi]# ls -al
total 40
drwx------. 14 megumi megumi 4096 Jul 13 10:55 .
drwxr-xr-x. 3 root root 19 Feb 26 17:52 ..
-rw-------. 1 megumi megumi 136 Jul 13 15:40 .bash_history
-rw-r--r--. 1 megumi megumi 18 Jan 29 2014 .bash_logout
-rw-r--r--. 1 megumi megumi 193 Jan 29 2014 .bash_profile
-rw-r--r--. 1 megumi megumi 231 Jan 29 2014 .bashrc
drwx------. 9 megumi megumi 4096 Jul 12 16:17 .cache
drwxr-xr-x. 15 megumi megumi 4096 Feb 26 17:53 .config
drwxr-xr-x. 2 megumi megumi 6 Feb 26 17:53 Desktop
drwxr-xr-x. 2 megumi megumi 6 Feb 26 17:53 Documents
drwxr-xr-x. 2 megumi megumi 6 Feb 26 17:53 Downloads
-rw-------. 1 megumi megumi 16 Feb 26 17:53 .esd_auth
-rw-------. 1 megumi megumi 934 Jul 12 16:17 .ICEauthority
-rw-------. 1 megumi megumi 49 Jul 13 09:57 .lesshst
drwx------. 3 megumi megumi 18 Feb 26 17:53 .local
drwxr-xr-x. 4 megumi megumi 37 Feb 26 22:54 .mozilla
drwxr-xr-x. 2 megumi megumi 6 Feb 26 17:53 Music
drwxr-xr-x. 2 megumi megumi 6 Feb 26 17:53 Pictures
drwxr-xr-x. 2 megumi megumi 6 Feb 26 17:53 Public
drwxr-xr-x. 2 megumi megumi 6 Feb 26 17:53 Templates
drwxr-xr-x. 2 megumi megumi 6 Feb 26 17:53 Videos

如果想要查看目录属性信息,则需要额外添加一个-d参数。例如,可使用如下命令查看/etc目录的权限与属性信息:

1
2
[root@linuxprobe megumi]# ls -ld /etc
drwxr-xr-x. 132 root root 8192 Jul 16 09:55 /etc

五、文本文件编辑命令

5.1)cat命令

cat命令用于查看纯文本文件(内容比较少的),格式为:

cat [选项] 文件

Linux系统中有多个用于查看文本内容的命令,每个命令都有自己的特点,比如这个cat命令就是用于查看内容较少的纯文本文件的。 如果在查看文本内容时还想顺便显示行号的话,不妨在cat命令后面追加一个-n参数:

1
2
3
4
5
6
7
[root@linuxprobe megumi]# cat -n .bash_history 
1 su root
2 ifconfig
3 ifconfig
4 pwd
5 ls
………………省略部分输出信息………………

5.2)more命令

more命令用于查看纯文本文件(内容较多的),格式为:

more [选项] 文件

因此对于长篇的文本内容,推荐使用more命令来查看。more命令会在最下面使用百分比的形式来提示已经阅读了多少内容。还可以使用空格键或回车键向下翻页:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@linuxprobe megumi]# more initial-setup-ks.cfg 
#version=RHEL7
# X Window System configuration information
xconfig --startxonboot

# License agreement
eula --agreed
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Run the Setup Agent on first boot
firstboot --enable
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

ignoredisk --only-use=sda
# Network information
network --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
network --bootproto=dhcp --hostname=linuxprobe.com
--More--(43%)

5.3)head命令

head命令用于查看纯文本文档的前N行,格式为:

head [选项] [文件]

例如查看文本中前20行的内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@linuxprobe megumi]# head -n 20  initial-setup-ks.cfg 
#version=RHEL7
# X Window System configuration information
xconfig --startxonboot

# License agreement
eula --agreed
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Run the Setup Agent on first boot
firstboot --enable
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

ignoredisk --only-use=sda
# Network information
network --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto

5.4)tail命令

tail命令用于查看纯文本文档的后N行或持续刷新内容,格式为:

tail [选项] [文件]

tail命令的操作方法与head命令非常相似,只需要执行“tail -n 20 文件名”命令就可以达到这样的效果。tail命令最强悍的功能是可以持续刷新一个文件的内容,当想要实时查看最新日志文件时,这特别有用,此时的命令格式为“tail -f 文件名”:

1
2
3
4
5
6
7
8
9
10
11
[root@linuxprobe etc]# tail -f /var/log/messages
Jul 16 14:46:25 linuxprobe NetworkManager: bound to 192.168.18.140 -- renewal in 791 seconds.
Jul 16 14:46:25 linuxprobe dbus-daemon: dbus[1044]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service'
Jul 16 14:46:25 linuxprobe dbus[1044]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service'
Jul 16 14:46:25 linuxprobe systemd: Starting Network Manager Script Dispatcher Service...
Jul 16 14:46:25 linuxprobe dbus-daemon: dbus[1044]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Jul 16 14:46:25 linuxprobe dbus[1044]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Jul 16 14:46:25 linuxprobe systemd: Started Network Manager Script Dispatcher Service.
Jul 16 14:50:01 linuxprobe systemd: Created slice user-0.slice.
Jul 16 14:50:01 linuxprobe systemd: Starting Session 674 of user root.
Jul 16 14:50:01 linuxprobe systemd: Started Session 674 of user root.

5.5)tr命令

tr命令用于替换文本文件中的字符,格式为 :

tr [原始字符] [目标字符]

使用场景为快速替换文本中的一些词汇,或者把整个文本内容都进行替换。可以先使用cat命令读取待处理的文本,然后通过管道符(详见第3章)把这些文本内容传递给tr命令进行替换操作即可。例如,把某个文本内容中的英文全部替换为大写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[root@linuxprobe ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z]
#VERSION=RHEL7
# SYSTEM AUTHORIZATION INFORMATION
AUTH --ENABLESHADOW --PASSALGO=SHA512

# USE CDROM INSTALLATION MEDIA
CDROM
# RUN THE SETUP AGENT ON FIRST BOOT
FIRSTBOOT --ENABLE
IGNOREDISK --ONLY-USE=SDA
# KEYBOARD LAYOUTS
KEYBOARD --VCKEYMAP=US --XLAYOUTS='US'
# SYSTEM LANGUAGE
LANG EN_US.UTF-8

# NETWORK INFORMATION
NETWORK --BOOTPROTO=DHCP --DEVICE=ENO16777728 --ONBOOT=OFF --IPV6=AUTO
NETWORK --HOSTNAME=LOCALHOST.LOCALDOMAIN
# ROOT PASSWORD
ROOTPW --ISCRYPTED $6$PDJJF42G8C6PL069$II.PX/YFAQPO0ENW2PA7MOMKJLYOAE2ZJMZ2UZJ7BH3UO4OWTR1.WK/HXZ3XIGMZGJPCS/MGPYSSOI8HPCT8B/
# SYSTEM TIMEZONE
TIMEZONE AMERICA/NEW_YORK --ISUTC
USER --NAME=LINUXPROBE --PASSWORD=$6$A9V3INSTNBWEIR7D$JEGFYWBCDOOOKJ9SODECCDO.ZLF4OSH2AZ2SS2R05B6LZ2A0V2K.RJWSBALL2FEKQVGF640OA/TOK6J.7GUTO/ --ISCRYPTED --GECOS="LINUXPROBE"
# X WINDOW SYSTEM CONFIGURATION INFORMATION
XCONFIG --STARTXONBOOT
# SYSTEM BOOTLOADER CONFIGURATION
BOOTLOADER --LOCATION=MBR --BOOT-DRIVE=SDA
AUTOPART --TYPE=LVM
# PARTITION CLEARING INFORMATION
CLEARPART --NONE --INITLABEL

%PACKAGES
@BASE
@CORE
@DESKTOP-DEBUGGING
@DIAL-UP
@FONTS
@GNOME-DESKTOP
@GUEST-AGENTS
@GUEST-DESKTOP-AGENTS
@INPUT-METHODS
@INTERNET-BROWSER
@MULTIMEDIA
@PRINT-CLIENT
@X11

%END

5.6)wc命令

wc命令用于统计指定文本的行数、字数、字节数,格式为 :

wc [参数] 文本

wc的参数以及相应的作用如下:

参数 作用
-l 只显示行数
-w 只显示单词数
-c 只显示字节数

在Linux系统中,passwd是用于保存系统账户信息的文件,要统计当前系统中有多少个用户,可以使用下面的命令来进行查询 :

1
2
[root@linuxprobe etc]# wc -l /etc/passwd
38 /etc/passwd

5.7)stat命令

stat命令用于查看文件的具体存储信息和时间等信息,格式为 :

stat 文件名称

stat命令可以用于查看文件的存储信息和时间等信息,命令stat anaconda-ks.cfg会显示出文件的三种时间状态(已加粗):Access、Modify、Change。这三种时间的区别将在下面的touch命令中详细详解:

1
2
3
4
5
6
7
8
9
10
[root@linuxprobe etc]# stat passwd
File: ‘passwd’
Size: 1914 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 35950790 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2018-07-15 16:16:01.326125050 +0800
Modify: 2018-02-26 17:52:35.490037776 +0800
Change: 2018-02-26 17:52:35.492037776 +0800
Birth: -

5.8)cut命令

cut命令用于按“列”提取文本字符,格式为:

cut [参数] 文本

在Linux系统中,如何准确地提取出最想要的数据,这也是我们应该重点学习的内容。一般而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是如果按列搜索,不仅要使用-f参数来设置需要看的列数,还需要使用-d参数来设置间隔符号。passwd在保存用户数据信息时,用户信息的每一项值之间是采用冒号来间隔的,接下来我们使用下述命令尝试提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:

1
2
3
4
5
6
7
[root@linuxprobe etc]# cut -f 1 -d : passwd
root
bin
daemon
adm
lp
………………省略部分输出信息………………

5.9)diff命令

diff命令用于比较多个文本文件的差异,格式为:

diff [参数] 文件

在使用diff命令时,不仅可以使用–brief参数来确认两个文件是否不同,还可以使用-c参数来详细比较出多个文件的差异之处,这绝对是判断文件是否被篡改的有力神器。例如,先使用cat命令分别查看diff_A.txt和diff_B.txt文件的内容,然后进行比较:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@linuxprobe ~]# cat diff_A.txt
Welcome to linuxprobe.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
[root@linuxprobe ~]# cat diff_B.txt
Welcome tooo linuxprobe.com

Red Hat certified
Free Linux LeSSonS
////////.....////////
Professional guidance
Linux Course

接下来使用diff –brief命令显示比较后的结果,判断文件是否相同:

1
2
[root@linuxprobe ~]# diff --brief diff_A.txt diff_B.txt
Files diff_A.txt and diff_B.txt differ

最后使用带有-c参数的diff命令来描述文件内容具体的不同:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@linuxprobe ~]# diff -c diff_A.txt diff_B.txt
*** diff_A.txt 2017-08-30 18:07:45.230864626 +0800
--- diff_B.txt 2017-08-30 18:08:52.203860389 +0800
***************
*** 1,5 ****
! Welcome to linuxprobe.com
Red Hat certified
! Free Linux Lessons
Professional guidance
Linux Course
--- 1,7 ----
! Welcome tooo linuxprobe.com
!
Red Hat certified
! Free Linux LeSSonS
! ////////.....////////
Professional guidance
Linux Course

六、文件目录管理命令

6.1)touch命令

touch命令用于创建空白文件或设置文件的时间,格式为:

touch [选项] [文件]

对touch命令来讲,有难度的操作主要是体现在设置文件内容的修改时间(mtime)、文件权限或属性的更改时间(ctime)与文件的读取时间(atime)上面。touch命令的参数及其作用如下:

参数 作用
-a 仅修改“读取时间”(atime)
-m 仅修改“修改时间”(mtime)
-d 同时修改atime与mtime

接下来,我们先使用ls命令查看一个文件的修改时间,然后修改这个文件,最后再通过touch命令把修改后的文件时间设置成修改之前的时间:

1
2
3
4
5
6
7
8
[root@linuxprobe Downloads]# ls -l diff_A.txt 
-rw-r--r--. 1 root root 98 Jul 16 15:18 diff_A.txt
[root@linuxprobe Downloads]# echo "test touch to change time" >> diff_A.txt
[root@linuxprobe Downloads]# ls -l diff_A.txt
-rw-r--r--. 1 root root 124 Jul 16 16:10 diff_A.txt
[root@linuxprobe Downloads]# touch -d "2018-7-16 15:18" diff_A.txt
[root@linuxprobe Downloads]# ls -l diff_A.txt
-rw-r--r--. 1 root root 124 Jul 16 15:18 diff_A.txt

6.2)mkdir命令

mkdir命令用于创建空白的目录,格式为:

mkdir [选项] 目录

在Linux系统中,文件夹是最常见的文件类型之一。除了能创建单个空白目录外,mkdir命令还可以结合-p参数来递归创建出具有嵌套叠层关系的文件目录。

1
2
3
4
5
[root@linuxprobe Downloads]# mkdir katomegumi
[root@linuxprobe Downloads]# cd katomegumi/
[root@linuxprobe katomegumi]# mkdir -p a/b/c/d/e
[root@linuxprobe katomegumi]# cd a
[root@linuxprobe a]# cd b

6.3)cp命令

cp命令用于复制文件或目录,格式为:

cp [选项] 源文件 目标文件

在Linux系统中,复制操作具体分为3种情况:

  • 如果目标文件是目录,则会把源文件复制到该目录中
  • 如果目标文件也是普通文件,则会询问是否要覆盖它
  • 如果目标文件不存在,则执行正常的复制操作

cp命令的参数及其作用如下:

参数 作用
-p 保留原始文件的属性
-d 若对象为“链接文件”,则保留该“链接文件”的属性
-r 递归持续复制(用于目录)
-i 若目标文件存在则询问是否覆盖
-a 相当于-pdr(p、d、r为上述参数)

接下来,使用touch创建一个名为source.txt的普通空白文件,然后将其复制为一份名为source-copy.txt的备份文件,最后再使用ls命令查看目录中的文件:

1
2
3
4
[root@linuxprobe b]# touch source.txt
[root@linuxprobe b]# cp source.txt source-copy.txt
[root@linuxprobe b]# ls
source-copy.txt source.txt

6.4)mv命令

mv命令用于剪切文件或将文件重命名,格式为:

mv [选项] 源文件 [目标路径|目标文件名]

剪切操作不同于复制操作,因为它会默认把源文件删除掉,只保留剪切后的文件。如果在同一个目录中对一个文件进行剪切操作,其实也就是对其进行重命名:

1
2
3
[root@linuxprobe b]# mv source.txt source-mv.txt
[root@linuxprobe b]# ls
source-copy.txt source-mv.txt

6.5)rm命令

rm命令用于删除文件或目录,格式为:

rm [选项] 文件

在Linux系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在rm命令后跟上-f参数来强制删除。另外,想要删除一个目录,需要在rm命令后面一个-r参数才可以,否则删除不掉。我们来尝试删除前面创建的文件:

1
2
3
4
5
6
7
[root@linuxprobe b]# ls
source-copy.txt source-mv.txt
[root@linuxprobe b]# rm source-copy.txt
rm: remove regular empty file ‘source-copy.txt’? y
[root@linuxprobe b]# rm -f source-mv.txt
[root@linuxprobe b]# ls
[root@linuxprobe b]#

6.6)dd命令

dd命令用于按照指定大小和个数的数据块来复制文件或转换文件,格式为:

dd [参数]

dd命令是一个比较重要而且比较有特色的一个命令,它能够让用户按照指定大小和个数的数据块来复制文件的内容。当然如果愿意的话,还可以在复制过程中转换其中的数据。Linux系统中有一个名为/dev/zero的设备文件,这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此可以使用它作为dd命令的输入文件,来生成一个指定大小的文件。dd命令的参数及其作用如下:

参数 作用
if 输入的文件名称
of 输出的文件名称
bs 设置每个“块”的大小
count 设置要复制“块”的个数
1
2
3
4
[root@linuxprobe b]# dd if=/dev/zero of=560_file count=1 bs=560M
1+0 records in
1+0 records out
587202560 bytes (587 MB) copied, 3.30766 s, 178 MB/s

在Linux系统中可以直接使用dd命令来压制出光盘镜像文件,将它变成一个可立即使用的iso镜像:

1
2
3
4
[root@linuxprobe ~]# dd if=/dev/cdrom of=RHEL-server-7.0-x86_64-LinuxProbe.Com.iso
7311360+0 records in
7311360+0 records out
3743416320 bytes (3.7 GB) copied, 370.758 s, 10.1 MB/s

6.7)file命令

file命令用于查看文件的类型,格式为:

file 文件名

在Linux系统中,由于文本、目录、设备等所有这些一切都统称为文件,而我们又不能单凭后缀就知道具体的文件类型,这时就需要使用file命令来查看文件类型了。

1
2
3
4
[root@linuxprobe ~]# file anaconda-ks.cfg 
anaconda-ks.cfg: ASCII text
[root@linuxprobe ~]# file /dev/sda
/dev/sda: block special

七、打包压缩与搜索命令

7.1)tar命令

tar命令用于对文件进行打包压缩或解压,格式为:

tar [选项] [文件]

在Linux系统中,常见的文件格式比较多,其中主要使用的是.tar或.tar.gz或.tar.bz2格式,这些格式大部分都是由tar命令来生成的。 tar命令的参数及其作用如下:

参数 作用
-c 创建压缩文件
-x 解开压缩文件
-t 查看压缩包内有哪些文件
-z 用Gzip压缩或解压
-j 用bzip2压缩或解压
-v 显示压缩或解压的过程
-f 目标文件名
-p 保留原始的权限与属性
-P 使用绝对路径来压缩
-C 指定解压到的目录

首先,

  • -c参数用于创建压缩文件,-x参数用于解压文件,因此这两个参数不能同时使用。
  • 其次,-z参数指定使用Gzip格式来压缩或解压文件,-j参数指定使用bzip2格式来压缩或解压文件。用户使用时则是根据文件的后缀来决定应使用何种格式参数进行解压。
  • 在执行某些压缩或解压操作时,可能需要花费数个小时,如果屏幕一直没有输出,您一方面不好判断打包的进度情况,另一方面也会怀疑电脑死机了,因此非常推荐使用-v参数向用户不断显示压缩或解压的过程。
  • -C参数用于指定要解压到哪个指定的目录。
  • -f参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称。
  • 一般使用tar -czvf 压缩包名称.tar.gz 要打包的目录命令把指定的文件进行打包压缩;相应的解压命令为tar -xzvf 压缩包名称.tar.gz
  • 下面我们来逐个演示下打包压缩与解压的操作。先使用tar命令把/etc目录通过gzip格式进行打包压缩,并把文件命名为etc.tar.gz:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@linuxprobe ~]# tar czvf etc.tar.gz /etc
tar: Removing leading `/' from member names
/etc/
/etc/fstab
/etc/crypttab
/etc/mtab
/etc/fonts/
/etc/fonts/conf.d/
/etc/fonts/conf.d/65-0-madan.conf
/etc/fonts/conf.d/59-liberation-sans.conf
/etc/fonts/conf.d/90-ttf-arphic-uming-embolden.conf
/etc/fonts/conf.d/59-liberation-mono.conf
/etc/fonts/conf.d/66-sil-nuosu.conf
………………省略部分压缩过程信息………………

接下来将打包后的压缩包文件指定解压到/root/etc目录中(先使用mkdir命令来创建/root/etc目录):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@linuxprobe ~]# mkdir /root/etc
[root@linuxprobe ~]# tar xzvf etc.tar.gz -C /root/etc
etc/
etc/fstab
etc/crypttab
etc/mtab
etc/fonts/
etc/fonts/conf.d/
etc/fonts/conf.d/65-0-madan.conf
etc/fonts/conf.d/59-liberation-sans.conf
etc/fonts/conf.d/90-ttf-arphic-uming-embolden.conf
etc/fonts/conf.d/59-liberation-mono.conf
etc/fonts/conf.d/66-sil-nuosu.conf
etc/fonts/conf.d/65-1-vlgothic-gothic.conf
etc/fonts/conf.d/65-0-lohit-bengali.conf
etc/fonts/conf.d/20-unhint-small-dejavu-sans.conf
………………省略部分解压过程信息………………

7.2)grep命令

grep命令用于在文本中执行关键词搜索,并显示匹配的结果,格式为:

grep [选项] [文件]

grep命令的参数及其作用如下:

参数 作用
-b 将可执行文件(binary)当作文本文件(text)来搜索
-c 仅显示找到的行数
-i 忽略大小写
-n 显示行号
-v 反向选择——仅列出没有“关键词”的行。

grep命令是用途最广泛的文本搜索匹配工具,虽然有很多参数,但是大多数基本上都用不到。 在这里只讲两个最最常用的参数:

  • -n参数用来显示搜索到信息的行号;
  • -v参数用于反选信息(即没有包含关键词的所有信息行)。

在Linux系统中,/etc/passwd文件是保存着所有的用户信息,而一旦用户的登录终端被设置成/sbin/nologin,则不再允许登录系统,因此可以使用grep命令来查找出当前系统中不允许登录系统的所有用户信息:

1
2
3
4
5
6
7
[root@linuxprobe megumi]# grep /sbin/nologin /etc/passwd
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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
………………省略部分输出过程信息………………

7.3)find命令

find命令用于按照指定条件来查找文件,格式为:

find [查找路径] 寻找条件 操作

在Linux系统中,搜索工作一般都是通过find命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到屏幕上。find命令的参数以及作用如下:

参数 作用
-name 匹配名称
-perm 匹配权限(mode为完全匹配,-mode为包含即可)
-user 匹配所有者
-group 匹配所有组
-mtime -n +n 匹配修改内容的时间(-n指n天以内,+n指n天以前)
-atime -n +n 匹配访问文件的时间(-n指n天以内,+n指n天以前)
-ctime -n +n 匹配修改文件权限的时间(-n指n天以内,+n指n天以前)
-nouser 匹配无所有者的文件
-nogroup 匹配无所有组的文件
-newer f1 !f2 匹配比文件f1新但比f2旧的文件
–type b/d/c/p/l/f 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
-size 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
-prune 忽略某个目录
-exec …… {}\; 后面可跟用于进一步处理搜索结果的命令(下文会有演示)

这里需要重点讲解一下-exec参数重要的作用。这个参数用于把find命令搜索到的结果交由紧随其后的命令作进一步处理,它十分类似于第3章将要讲解的管道符技术,并且由于find命令对参数的特殊要求,因此虽然exec是长格式形式,但依然只需要一个减号(-)。

根据文件系统层次标准(Filesystem Hierarchy Standard)协议,Linux系统中的配置文件会保存到/etc目录中(详见第6章)。如果要想获取到该目录中所有以host开头的文件列表,可以执行如下命令:

1
2
3
4
5
6
7
8
[root@linuxprobe megumi]# find /etc -name "host*" -print
/etc/avahi/hosts
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/selinux/targeted/modules/active/modules/hostname.pp
/etc/hostname

又例如要在整个系统中搜索权限中包括SUID权限的所有文件(详见第5章),只需使用-4000即可:

1
2
3
4
5
6
7
8
[root@linuxprobe ~]# find / -perm -4000 -print
/usr/bin/fusermount
/usr/bin/su
/usr/bin/umount
/usr/bin/passwd
/usr/sbin/userhelper
/usr/sbin/usernetctl
………………省略部分输出信息………………

进阶实验:在整个文件系统中找出所有归属于linuxprobe用户的文件并复制到/root/findresults目录。

该实验的重点是-exec {} \;参数,其中的{}表示find命令搜索出的每一个文件,并且命令的结尾必须是“\;”。完成该实验的具体命令如下:

1
[root@linuxprobe ~]# find / -user linuxprobe -exec cp -a {} /root/findresults/ \;
文章作者: TechOtaku
文章链接: http://techotaku.me/2018/07/11/新手必须掌握的Linux命令学习笔记/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 徒然の博客