Linux 1 —— 基本介绍与常用指令

Linux 目录结构

不同于 Windows 下的磁盘分区,Linux 以目录的方式组织系统中的所有文件。

以根目录为起点,用 / 表示

1
2
[root@localhost ~]# ls /
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
系统目录 作用
/bin 常用系统程序目录
/boot 开机设定目录,存放 vimlinuz 核心
/dev 系统设备装置文件(device)
/etc 系统配置文件
/etc/rc.d/init.d 存放系统开机时载入服务的脚本
/home 系统用户目录
/lib Linux 执行或编译程序函数库目录
/mnt 软驱、光驱挂载目录
/proc 系统核心与执行程序信息
/root 管理员目录
/usr/bin 一般执行文件存放的地方
/var 系统日志文件
/lost+found 系统产生错误时遗失的片段

Linux 文件存储

文件结构

  • 名字

  • 索引节点(iNode),又称 I 节点,存放文件的状态信息的一个数据结构。包含文件的长度、创建及修改时间、权限、所属关系、磁盘位置等

    一个 inode 节点表示一个文件,不同的文件具有不同的 inode 节点值。

  • 磁盘数据

文件存储

image-20220525160104759

系统结构

image-20220524122914895

主要组件

image-20220524123004697

关机/重启

Linux 只允许管理员关机和重启设备

关机指令(选择其一)

1
2
3
4
shutdown -h now
init 0
halt -p
poweroff -p

重启指令(选择其一)

1
2
3
shutdown -r now
init 6
reboot

重定向

输入重定向

1
< filename
1
2
# 计算 list.txt 的行数
wc -l < list.txt

输出重定向

1
> filename
1
echo abc > list.txt

追加重定向:输出在文件末尾

1
>> filename
1
echo abc >> list.txt

重定向标准输出流和错误流

1
1>stdout.txt 2>stderr.txt
1
ls /usr /err 1>stdout.txt 2>stderr.txt

结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost ~]# cat stderr.txt 
ls: cannot access /err: No such file or directory
[root@localhost ~]# cat stdout.txt
/usr:
bin
etc
games
include
lib
lib64
libexec
local
sbin
share
src
tmp

将错误流输出到标准输出流中

1
2
2>&1
# 取标准输出流的地址,将错误流输出到标准输出流中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost ~]# ls /usr /err 1>stdout.txt 2>&1
[root@localhost ~]# cat stdout.txt
ls: cannot access /err: No such file or directory
/usr:
bin
etc
games
include
lib
lib64
libexec
local
sbin
share
src
tmp

丢弃错误信息

1
ls /usr /err 2>/dev/null

将错误流重定向到 /dev/null 中进行丢弃,即不展示错误信息。

管道

把前一个命令的输出作为下一个命令的输入

格式:Command 1 | Command 2 | Command 3

例子:

1
cat /etc/passwd | grep root | wc -l

文件类型

普通文件( regular file ) :[ - ]

  • 纯文字文件(ascii)
  • 二进制文件(binary)

目录 (directory): [ d ]

链接文件 (link):[ l ]

设备文件 (device):

  • 区块 (block) 设备文件:[ b ]

  • 字符(character) 设备文件:[ c ]

管道文件(Pipe): [ p ]

Socket文件(Socket): [ s ]

Command: shutdown

用处:关机

格式:shutdown [选项] 时间 [消息]

时间:关机的时间

消息:发给正在使用的用户消息

选项 描述
-t seconds 设定在几秒钟之后进行关机程序
-k 并不会真的关机,只是将警告讯息传送给所有使用者
-r 关机后重新开机
-h 关机后停机
-n 不采用正常程序来关机,用强迫的方式杀掉所有执行中的程序后自行关机
-c 取消目前已经进行中的关机动作
1
2
3
4
5
6
[root@localhost ~]# shutdown -t seconds 3 
Shutdown scheduled for Tue 2022-05-24 12:46:57 CST, use 'shutdown -c' to cancel.
[root@localhost ~]#
Broadcast message from root@localhost.localdomain (Tue 2022-05-24 12:43:57 CST):

The system is going down for power-off at Tue 2022-05-24 12:46:57 CST!

立即关机

1
shutdown -h now

十分钟后关机

1
shutdown -h 10

重启

1
shutdown -r now

Comman: init

作用:切换运行模式

格式:init 代码

代码(runlevel) 描述
0 关机
1 单用户运行级别
2 多用户,字符模式,但系统不会启动NFS
3 多用户,字符模式,系统启动具有网络功能,常用运行级别
4 用户自定义级别
5 图形界面模式
6 重启

Command: halt

作用:关机。先检测系统的runlevel,若runlevel为0或6,则关闭系统,否则即调用shutdown -h 来关闭系统

格式:halt [选项]

选项 描述
-d 不留下日志记录
-f 不论目前的runlevel为何,不调用shutdown即强制关闭系统
-i 在halt之前,关闭全部的网络界面
-n halt前,不用先执行sync
-p halt之后,执行poweroff关闭电源
-w 取消目前已经进行中的关机动作

Command: reboot

作用:重新启动计算机。若系统的 runlevel 为 0 或 6 ,则重新开机,否则以 shutdown -r 取代

格式: reboot [选项]

选项 描述
-d 不把记录写到 /var/log/wtmp 档案里
-f 强迫重开机,不呼叫 shutdown 这个指令
-i 在重开机之前,关闭全部的网络界面
-n 在重开机前不做将记忆体资料写回硬盘的动作
-w 并不会真的重开机,只是把记录写到 /var/log/wtmp 档案里

Command: Clear

清空屏幕

1
clear

Command: echo

打印内容

格式:echo [-n] 字符串

-n:最后不换行

1
2
echo Hello World
echo -n Hello World

Command: ls

显示详细信息

1
ls -l
1
-rw-r--r--  1 root          root            54 May 25 10:40 1.txt
- rw- r– r– 1 root root 54 May 25 10:40 1.txt
- 普通文件、d目录 所有者权限 组用户权限 其他用户权限 普通文件链接数/目录文件第一级目录数(包含隐藏的目录 . …) 用户名 组名 文件大小(byte) 修改时间 文件名

显示所有文件包括隐藏文件(包括...

1
ls -a

显示所有文件(不包括 ...

1
ls -A

按照文件大小排序

1
ls -S

显示文件 inode 序号

1
ls -i

递归显示子目录

1
ls -R

Command: pwd

显示当前路径(完整绝对路径)

1
2
[root@localhost testdir]# pwd
/root/testdir

Home Directory

用户主目录

普通用户在 /home/username

root 用户在 /root

1
2
[root@localhost testdir]# ls /home
a201925310321 centos test

快速切换到 home

1
cd ~

. & …

. 目录代表当前目前本身

.. 目录代表父目录

对于 /... 都代表 /

直接使用 ls 无法查看,必须使用 ls -a

Command: mkdir

创建目录

格式:mkdir [参数] <目录名>

使用 -p 会自动补齐所有中间目录

1
mkdir -p a/b/c

Command: rmdir

删除空目录

格式:rmdir [参数] <目录名>

使用 -p 会自动删除过程中产生的所有空目录

1
2
rmdir -p a/b/c
# 会把 a b c 都删除

Command: rm

删除文件或目录

格式:rm [参数] <路径>

使用 -r 递归删除目录中所有的内容,使用 -f 跳过确认

Command: touch

改变文件的时间记录或创建一个空文件

格式:touch [参数] <文件名>

参数 作用
-a 改变文件的读取时间记录
-m 改变文件的修改时间记录
-r 使用目标文件的时间记录 touch -r sourceFile targetFile
-d 设定时间与日期,可以使用各种不同的格式

Command: cat

打开文件并打印到标准输出设备上

格式:cat [选项] <文件>

使用 -n 给每行编号,使用 -b 给除了空白行之外的每行进行编号

1
2
3
4
cat -n file1 file2

1 file1
2 file2

Command: more

分页显示文件内容

格式: more [选项] <文件>…

  • 一次性加载

  • 只能往下翻

基本操作

  • q 退出

  • 空格 下一页

  • 回车 下一行

Command: less

分页显示文件内容

格式: less [选项] <文件>…

  • 支持上下翻

  • 按需加载

基本操作

  • q 退出

  • 空格 下一页

  • 回车 下一行

  • 上下移动键 上下移动

参数 作用
-e 当文件显示结束后,自动退出
-f 强迫打开特殊文件
-i 忽略搜索时的大小写
-N 显示每行的行号
-s 显示连续空行为一行

Command: head

显示文件的开头的内容。默认显示文件的前 10 行。

格式: head [选项] <文件>

参数 作用
-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数
-n<行数> 显示的行数

Command: tail

显示文件的结尾的内容。默认显示文件的最后 10 行内容

格式: tail [选项] <文件>

参数 作用
-f 当文件变化时输出文件新增内容
-c<数目> 显示的字节数
-n<行数> 显示的行数
-v 显示文件名

Command: cp

复制文件或目录

格式:cp [选项] 原路径 目标路径

参数 作用
-a 复制目录时,保留链接、文件属性,并复制目录下的所有内容
-f 覆盖已存在的目标文件而不进行提示
-p 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中
-r 递归复制目录中的所有内容,包括子目录

Command: mv

移动文件或目录(重命名)

格式: mv [选项] 原路径… 目标路径

参数 选项
-i 目标路径如果同名,先询问是否覆盖
-f 覆盖已经存在的目标文件而不给提示
-n 不要覆盖任何已存在的文件或目录

Command: ln

创建文件的快捷方式

格式: ln [-s] 源路径 目标路径

硬链接(hard link):给文件一个副本(别名),同时建立两者之间的连接关系,修改其中一个,与其连接的文件同时被修改,如果删除其中一个,其余的文件不受影响磁盘上只有一份数据。硬链接是存在同一个文件系统中

软链接(symbolic link):软链接的方式则是产生一个特殊的文件,该文件的内容是指向另一个文件的位置。它只是一个快捷方式删除了源文件,连接文件全部失效软链接可以跨越不同的文件系统

硬链接是在某个目录项下新增一个元数据链接到某个 inode 的关联记录。如果将任何一个元数据删除,文件的 inode 与 block 都还存在,依然还可以通过另一个文件名来读取正确的档案数据。此外,不论用哪一个文件名来编辑,最终的结果都会写入相同的 inode 和 block 中,因此均能进行数据的修改尽管硬链接节省空间。

Command: tar

备份(压缩)文件

格式:tar [选项] 压缩文件名 路径

参数 作用
-c 创建备份
-C path 切换到指定目录
-f 指定备份文件的名称
-t 测试备份文件
-v 显示指令执行过程
-x 从备份中还原文件
-z 通过gzip指令处理备份文件
1
2
3
4
5
6
# 压缩
tar -zcvf dir1.tar.gz dir1
# 解压 解压到指定路径
tar -zxvf dir1.tar.gz -C /dir1
# 解压 解压到 test/ 目录(若不存在则报错),只解压 only 文件夹,解压结果删除最顶的 N 层目录
tar -zxvf test.tar.gz -C test/ only/ --strip-components N

打包后 .tar -> 使用 gzip 压缩后 .tar.gz

Command: gzip

压缩文件

格式:gzip [选项] 文件…

参数 作用
-d 解开压缩文件
-l 列出压缩文件的相关信息
-r 递归处理指定目录
-v 显示指令执行过程
-t 测试压缩文件是否有误
1
2
gzip dir1
gzip -drv dir1

Command: unzip

用于解压缩zip文件

格式:unzip [选项] 路径

参数 作用
-n 解压时不要覆盖原有文件
-l 列出压缩文件的相关信息
-d dir 指定解压时存放的目录
-v 显示指令执行过程
-t 测试压缩文件是否有误

Command: awk

文本数据处理工具

格式:

awk [选项] '脚本命令' 文件名

cat 文件名 | awk [选项] '脚本命令’

参数 作用
-F fs 指定分隔符fs,fs可以是字符串或正则表达式
-v 赋值一个用户定义变量
-f scriptfile 从脚本文件中读取awk命令
1
2
# -va=1新建一个a变量赋值为1,-F:按照:分割数据,'{print $1,$4+a}' 打印第一个和第五个
cat /etc/passwd | awk -va=1 -F: '{print $1,$4+a}'

Command: sed

编辑一个或多个文件

格式:sed [选项] '处理格式' 路径

参数 作用
a 在指定行号之后插入
c 整行替换
s 匹配替换
i 在指定行号位置插入
d 删除
1
2
sed '1a Hello Unix' test.txt
sed 's/l/L/' test.txt

Command: cut

从指定文件中过滤或提取特定内容,并显示在当前屏幕上

格式:cut [选项] 路径

参数 作用
-b 以字节为单位进行分割
-c 以字符为单位进行分割
-d 自定义分隔符,默认为制表符
-f 与-d一起使用,指定显示哪个区域
1
2
3
4
5
# 指定分隔符和显示范围
cut -d: -f1,3,5 /etc/passwd
# 指定字符范围
cut -c2-5 /etc/passwd
cut -c2,5,7 /etc/passwd

Command: tr

用于转换或删除文件中的字符并输出

格式:tr [-d] 字符串1 字符串2

例子

1
2
3
cat /etc/passwd | tr 'a-z' 'A-Z'
tr 'a-z' 'A-Z' < /etc/passwd
tr -d 'a-c' < test.txt

Command: find

查找文件或者目录

格式:find 路径 [选项] 表达式

参数 作用
-amin n 在过去n分钟内被读取过的文件
-atime n 在过去n内被读取过的文件
-cmin n 在过去n分钟内被修改过的文件
-ctime n 在过去n内被修改过的文件
-type c 文件类型是c的文件
-perm p 文件权限为p的文件
-name n 文件名为n的文件
1
find . -name "*.conf"

Command: grep

查找文件里符合条件的字符串

格式:

grep [选项] pattern 文件…

cat 文件… | grep [选项] pattern

Command: cal

打印日期

格式:cal [选项]

参数 作用
-3 显示最近三个月的日历(只能显示第三个月)
-s 将星期天作为月的第一天
-m 将星期一作为月的第一天
-y 显示当年日历

Command: date

显示或设定系统的日期与时间

格式:date [选项] 时间格式

时间格式 作用
%H 小时(00…23)
%M 分钟(2位)
%S 秒(2位)
%Y 完整年份(4位)
%m 月份(2位)
%d 日(2位)
1
date '+%Y-%m-%d %H:%M:%S'

Command: wc

默认统计文件内的 行/字/字节 数

格式:wc [选项] 文件路径

参数 作用
-c 按字节统计
-l 按行数统计
-m 按字符统计
-w 按单词统计
1
2
3
wc /etc/passwd
cat /etc/passwd | wc -l
wc -l < 1.txt

Command: sort

对内容排序

格式:sort [选项] 文件路径

参数 作用
-f 排序时,将小写字母视为大写字母
-n 按照数值大小排序
-u 去重排序
-o file 将排序后的结果存入指定的文件
-r 以相反的顺序来排序
1
2
sort -r /etc/passwd
sort -o out.txt -n /etc/passwd

Command: which & whereis

从下列文件夹中搜索指定文件,并输出完整路径

1
2
3
4
5
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin
1
which useradd

Command: sudo