第一章:linux目录结构
第一节:基本介绍
1. 文件系统根目录(/)
在 Linux 系统中,所有文件和目录都是从根目录 /
开始的。根目录是整个文件系统的起点,所有其他目录和文件都位于根目录下或其子目录中。
2. 目录结构
Linux 目录结构是层次化的,采用树状结构来组织文件和目录。每个目录可以包含子目录和文件,每个子目录又可以包含更多的子目录和文件。这样的结构便于管理和维护系统文件。
3. 磁盘挂载
在 Linux 系统中,除了根目录外,其他磁盘分区、设备和网络挂载点都被视为目录,并且它们都被挂载到某个目录下。例如,/mnt
和 /media
目录常用于挂载外部设备(如 USB 驱动器、CD-ROM 等)。
第二节:linux具体目录结构
-
/
(根目录)- 根目录是文件系统的起点。所有其他目录和文件都在这个目录下。
-
/bin
- 存放系统启动和运行所需的基本命令(如
ls
,cp
,mv
,cat
)。这些命令在系统启动时必须可用,因此存放在/bin
。
- 存放系统启动和运行所需的基本命令(如
-
/boot
- 包含启动加载程序(如 GRUB)的文件和内核映像。这个目录用于系统引导过程。
-
/dev
- 包含设备文件。这些文件代表系统中的各种硬件设备(如磁盘、终端、打印机)。例如,
/dev/sda1
代表第一块硬盘的第一个分区。
- 包含设备文件。这些文件代表系统中的各种硬件设备(如磁盘、终端、打印机)。例如,
-
/etc
- 存放系统配置文件和全局配置脚本。此目录下的文件通常控制系统和应用程序的配置,如
/etc/fstab
和/etc/passwd
。
- 存放系统配置文件和全局配置脚本。此目录下的文件通常控制系统和应用程序的配置,如
-
/home
- 用户主目录的默认位置。每个用户在
/home
下有一个子目录,例如/home/user1
。用户的个人文件、配置和数据通常存储在这个目录下。
- 用户主目录的默认位置。每个用户在
-
/lib
- 包含系统库文件,这些文件是系统和应用程序运行时所需的共享库。通常与
/bin
和/sbin
中的程序一起使用。
- 包含系统库文件,这些文件是系统和应用程序运行时所需的共享库。通常与
-
/media
- 用于自动挂载可移动媒体(如 USB 驱动器、CD-ROM 等)。系统插入设备时,这些设备会被挂载到
/media
下的子目录中。
- 用于自动挂载可移动媒体(如 USB 驱动器、CD-ROM 等)。系统插入设备时,这些设备会被挂载到
-
/mnt
- 通常用于临时挂载文件系统。系统管理员可以在这个目录下挂载不同的文件系统进行临时访问。
-
/opt
- 用于安装附加应用程序包。这个目录常用于存放第三方软件包和应用程序。
-
/proc
- 虚拟文件系统,提供系统内核和进程信息。
/proc
下的文件和目录不实际存在于硬盘上,而是由内核动态生成的。
- 虚拟文件系统,提供系统内核和进程信息。
-
/root
- 系统管理员(root 用户)的主目录。这个目录与普通用户的主目录(
/home/username
)不同,通常只有 root 用户可以访问。
- 系统管理员(root 用户)的主目录。这个目录与普通用户的主目录(
-
/sbin
- 存放系统管理命令和工具(如
fsck
,ifconfig
,reboot
)。这些命令通常需要系统管理员权限才能运行。
- 存放系统管理命令和工具(如
-
/srv
- 包含由系统提供的服务的数据。这个目录用于存放网站、FTP 服务器等服务的数据。
-
/tmp
- 用于存放临时文件。系统和应用程序在运行时可能需要创建临时文件,这些文件通常会在系统重启时删除。
-
/usr
- 包含用户程序和数据。这个目录通常包含系统中安装的大多数应用程序和库文件。例如,
/usr/bin
包含大多数用户命令,/usr/lib
包含库文件。
- 包含用户程序和数据。这个目录通常包含系统中安装的大多数应用程序和库文件。例如,
-
/var
- 包含变化的文件,如日志文件、邮件、缓存和其他经常变化的数据。常见目录有
/var/log
(日志文件)、/var/mail
(邮件)等。
- 包含变化的文件,如日志文件、邮件、缓存和其他经常变化的数据。常见目录有
第二章:linux常用命令
早知道:命令格式
在 Linux 中,命令通常有以下基本格式:
command [options] [arguments]
command
: 要执行的命令名称。[options]
: 可选的参数,用于修改命令的行为。例如,-l
、-a
等。[arguments]
: 命令的操作对象,例如文件或目录的名称。
例如,ls -l /home
命令中,ls
是命令,-l
是选项,/home
是参数。
第一节:目录处理命令
-
cd:切换目录
- 语法:cd 【目录】
- 参数:
- 目录:切换到对应目录
- ..:切换到上一级
- /:切换到下一级
-
pwd:显示当前目录
- 语法:pwd
- 功能:显示当前工作目录的绝对路径
-
ls:显示目录中的文件
- 语法:ls 【选项】【目录】
- 参数:
-l
: 以长格式显示文件信息,包括权限、所有者、大小和修改时间。(简化为ll)-a
: 显示所有文件,包括隐藏文件(以.
开头的文件)。-h
: 以人类可读的格式显示文件大小(与-l
一起使用)。-R
: 递归显示子目录中的内容。-t
: 按时间排序显示文件(最新的文件在前面)。
-
mkdir:创建目录
- 语法:mkdir 【选项】目录
- 常用参数:
-p
: 创建多级目录(即使中间目录不存在)。-v
: 显示每个目录创建的详细信息。
-
rmdir:删除目录
- 语法:rmdir 空目录
- 功能:删除指定空目录,如果目录不为空,将会报错
-
rm -r:递归删除目录及其内容
- 语法:rm 【选项】目录
- 常用参数:
-r
: 递归删除目录及其内容。-f
: 强制删除文件或目录,不提示确认。
-
lsblk:列出块设备
- 语法:lsblk 【选项】
- 常用参数:
-f
: 显示文件系统类型。-o
: 自定义输出列。
第二节:文件处理命令
-
cat:连接并查看文件内容
- 语法:cat 【选项】【文件】
- 常用参数:
-n
: 显示行号。-b
: 显示行号,但不为空行。-E
: 在行尾显示$
。
-
cp:复制文件或目录
- 语法:cp 【选项】源文件 目标文件
- 常用参数:
-r
: 递归复制目录及其内容。-i
: 提示确认覆盖文件。-u
: 仅在源文件比目标文件新时复制。
-
mv:移动或者重命名文件和目录
- 语法:mv 【选项】源文件 目标文件
- 常用参数:
-i
: 提示确认覆盖文件。-u
: 仅在源文件比目标文件新时移动。
-
rm:删除文件
- 语法:rm 【选项】文件
- 常用选项:
-r
: 递归删除目录及其内容。-f
: 强制删除文件,不提示确认。-i
: 删除前提示确认。
-
touch:创建新文件或更新文件的时间戳
- 语法:touch 【选项】文件
- 常用选项:
-c
: 不创建新文件,只更新文件的时间戳。
-
find:查找文件
- find 【路径】【选项】【条件】
- 路径:就是在对应目录内查找
- 条件:就是查找的特点
- 创建参数:
-name
: 根据名称查找文件。-type
: 根据文件类型查找(例如f
为普通文件,d
为目录)。-size
: 根据文件大小查找。(-、+数字单位表示小于或大于多少字节的文件)
- find 【路径】【选项】【条件】
-
head:显示文件的开头部分
- 语法:head 【选项】【文件】
- 常用参数:
-n
: 显示前 N 行。
-
tail:显示文件的结尾部分
- 语法:tail 【选项】【文件】
- 常用参数:
-n
: 显示最后 N 行。-f
: 实时跟踪文件内容的变化(常用于日志文件)。
-
chmod:修改文件权限
- 语法:chmod 【选项】模式 文件
- 模式:
- ugo表示对应用户,个人,组,其他,后跟+、-表示添加或删除权限
- all表示所有,就是ugo,后跟+、-表示添加或删除权限
- rwx表示文件权限,r读-4,w写-2,x执行-1。可以用数字替换
- 模式:
- 常用选项:
-R
: 递归更改目录及其内容的权限。
- 语法:chmod 【选项】模式 文件
第三节:链接命令
-
ln:创建连接
- 语法:ln 【选项】源文件 目标连接
- 常用参数:
-s
: 创建符号链接(软链接)。如果不指定此选项,将创建硬链接。-f
: 强制创建链接,覆盖已存在的目标链接。-i
: 提示确认覆盖目标链接。
-
ls -l:查看文件连接
- 语法:ls -l 【目录】
- 功能:
- 显示文件的详细信息,包括文件类型、权限、所有者、文件大小和修改时间。符号链接会显示为
->
后跟目标文件的路径。软连接才有。
- 显示文件的详细信息,包括文件类型、权限、所有者、文件大小和修改时间。符号链接会显示为
-
find:查找连接
- 语法:find 【路径】【选项】【条件】
- 常用参数:
-type l
: 查找符号链接(软链接)。-type f
: 查找普通文件。-type d
: 查找目录。
-
连接的区别
- 硬链接
- 硬链接是文件系统级别的链接,它直接指向文件的 inode(文件的存储结构),不同的硬链接实际上是相同文件的不同路径。
- 硬链接不能跨文件系统创建。
- 删除原文件不会影响硬链接,因为它们共享相同的 inode。
- 软链接(符号链接)
- 符号链接是一个特殊类型的文件,它包含对另一个文件或目录的路径引用。
- 符号链接可以跨文件系统创建。
- 如果原文件被删除,符号链接将成为一个无效的“悬挂链接”。
- 硬链接
第四节:权限管理命令
-
chmod:修改文件或目录权限
- 语法:chmod 【选项】模式 文件
- 模式:
u
: 文件所有者(user)。g
: 文件所在组(group)。o
: 其他用户(others)。a
: 所有用户(all)。r
: 读取权限(read)。w
: 写入权限(write)。x
: 执行权限(execute)。+
: 添加权限。-
: 移除权限。=
: 赋予权限(覆盖现有权限)。
- 模式:
- 常用参数:
-R
: 递归更改目录及其内容的权限。--reference=文件
: 使用指定文件的权限作为参考。
- 语法:chmod 【选项】模式 文件
-
chown:修改文件或目录拥有者
- 语法:chown 【选项】用户:组 文件
- 常用参数:
-R
: 递归更改目录及其内容的所有者和组。建议:root用户
-
chgrp:修改文件或目录拥有组
- 语法:chgrp 【选项】组 文件
- 常用参数:
-R
: 递归更改目录及其内容的组。建议:root用户
-
umask:设置与查看文件或目录默认权限
- 语法:umask 【掩码】
- 功能:
- 设置默认文件权限掩码,用于控制新创建文件和目录的默认权限。掩码是一个八进制数,指定了要从默认权限中去除的权限。不写掩码就是查看。
-
ls -l:查看文件或目录权限
- 语法:ls -l 【目录】
- 功能:
- 显示文件的详细信息,包括权限、所有者、组、大小和修改时间。
ls -l
命令的输出格式- 比如:-rwxr-xr-- 1 owner group size date time filename
- 文件权限(
-rwxr-xr--
)- 第一个字符表示文件类型:
-
:普通文件d
:目录l
:符号链接- 其他类型(例如,
c
代表字符设备,b
代表块设备)
- 接下来的九个字符表示权限:
- 前三位(
rwx
):文件所有者的权限r
:读权限(Read)w
:写权限(Write)x
:执行权限(Execute)
- 中间三位(
r-x
):文件所在组的权限r
:读权限-
:没有写权限x
:执行权限
- 最后三位(
r--
):其他用户的权限r
:读权限-
:没有写权限-
:没有执行权限
- 前三位(
- 第一个字符表示文件类型:
- 硬链接数(
1
)- 文件的硬链接数量。对于目录,表示该目录下的子目录数量(包括
.
和..
)。
- 文件的硬链接数量。对于目录,表示该目录下的子目录数量(包括
- 文件所有者(
owner
)- 文件的所有者用户名。
- 文件所属组(
group
)- 文件所在组的组名。
- 文件大小(
size
)- 文件的大小,单位为字节(bytes)。对于目录,这表示目录的大小(通常较小,因为它只存储目录项)。
- 修改日期(
date
)- 文件的最后修改日期,格式通常为
月 日 年
。
- 文件的最后修改日期,格式通常为
- 修改时间(
time
)- 文件的最后修改时间,格式通常为
小时:分钟
。
- 文件的最后修改时间,格式通常为
- 文件名(
filename
)- 文件的名称。对于目录,显示目录名称。对于符号链接,显示链接的目标。
第五节:文件搜索命令
-
find:查找文件与目录
- 语法:find 【路径】【选项】【条件】
- 常用参数:
-name
: 按文件名搜索,支持通配符。-iname
: 忽略大小写的文件名搜索。-type
: 按文件类型搜索。f
:普通文件d
:目录l
:符号链接
-size
: 按文件大小搜索。+100M
:大于 100 MB-10k
:小于 10 KB500
:等于 500 字节
-mtime
: 按文件修改时间搜索。+7
:修改时间超过 7 天-30
:修改时间在过去 30 天内0
:今天
-exec
: 对查找到的文件执行命令。-print
: 默认行为,输出找到的文件路径。
-
locate:快速查找文件
- 语法:locate 【选项】模式
- 常用参数:
-i
: 忽略大小写。-r
: 使用正则表达式。- 注意:
locate
依赖于预建的数据库,因此速度快,但可能不是最新的。可以使用updatedb
命令更新数据库。
-
grep:查找文件内容
- 语法:grep 【选项】 模式 【文件】
- 常用参数:
-r
: 递归搜索目录及其子目录。-i
: 忽略大小写。-l
: 仅输出包含匹配模式的文件名。-n
: 显示匹配的行号。
第六节:帮助命令
-
man:查看手册页
- 语法:man 【选项】【命令】
- 常见参数:
-k
: 搜索手册页中的关键字。-f
: 显示命令的简要说明。-a
: 显示所有匹配的手册页(通常按顺序显示)。
-
info:查看info文档
- 语法:info 【选项】【命令】
- 常用参数:
--apropos
: 搜索 Info 文档中的关键字。
-
--help:获取命令的帮助信息
- 语法:命令 --help
- 几乎所有的命令都支持
--help
选项,用于显示该命令的简要使用说明及选项说明
- 几乎所有的命令都支持
- 语法:命令 --help
-
whatis:显示命令的简要说明
- 语法:whatis 【命令】
-
apropos:搜索手册页中的关键字
- 语法:apropos 【关键字】
-
help:获取内置命令的帮助
- help 【内置命令】
第七节:用户管理命令(建议root)
-
useradd:添加用户
- 语法:useradd 【选项】用户名
- 常用参数:
-m
: 创建用户主目录(/home/用户名
),不写默认就有。-d
: 指定用户主目录。-s
: 指定用户的默认 Shell。-G
: 将用户添加到指定的组中(多个组用逗号分隔)。
-
usermod:修改用户属性
- 语法:usermod 【选项】用户名
- 常用参数:
-aG
: 将用户追加到指定的组中。- usermod -aG groupname username
-s
: 修改用户的默认 Shell。- usermod -s /bin/zsh username
-d
: 修改用户的主目录。- usermod -d /new/home/dir username
-
userdel:删除用户
- 语法:userdel 【选项】用户名
- 常用参数:
-r
: 删除用户的主目录及其内容。一定要用,不然不会删除目录
-
passwd:修改密码
- 语法:passwd 【选项】【用户名】
- 常用参数:
-d
: 删除指定用户的密码(使其无法登录)。-
passwd -d username
-
-l
: 锁定用户账户。-
passwd -l username
-
-u
: 解锁用户账户。-
passwd -u username
-
-
不演示了,因为改了密码我怕忘了,passwd不加任何命令就是为新用户添加密码
-
groups:显示用户所属组
- 语法:groups 【用户名】
- 不写用户名就是当前用户
-
id:显示用户uid和gid
- 语法:id 【用户名】
- 不写用户名就是当前用户
-
who:显示当前登录用户
- 语法:who
- 显示当前系统上所有登录用户
-
w:显示系统上当前登录用户及其活动信息
- 语法:w 【选项】【用户名】
- 常用参数:
-h
: 不显示标题行。-s
: 显示简洁的输出,不包括所有列。
- 输出字段说明
USER
: 当前登录的用户名。TTY
: 用户登录的终端设备(如tty1
,pts/0
等)。FROM
: 用户登录的源(IP 地址或主机名)。LOGIN@
: 用户登录的时间。IDLE
: 用户自上次活动以来的空闲时间。JCPU
: 当前终端的所有进程所消耗的 CPU 时间。PCPU
: 当前用户正在运行的进程所消耗的 CPU 时间。WHAT
: 用户当前正在执行的命令或程序。
-
su:用户切换
- 语法:su 【选项】【用户名】
- 常用参数:
-
或--login
: 启动一个登录 shell,模拟用户登录时的环境变量。这是最常用的选项,它会读取目标用户的登录环境设置,例如.profile
、.bash_profile
或.bashrc
文件。- su - 用户名
-c
: 执行指定的命令并退出。例如,使用 root 权限执行ls
命令:- su -c 'ls /root'
-s
: 使用指定的 shell。例如,使用/bin/bash
作为 shell:- su -s /bin/bash 用户名
第八节:用户组管理命令
-
groupadd:添加组
- 语法:groupadd 【选项】 组名
- 常用参数:
-g
: 指定组 ID(GID)。-
groupadd -g 1001 groupname
-
-
groupmod:修改组信息
- 语法:groupdel 【选项】组名
- 常用参数:
-g
: 修改组 ID(GID)。- groupmod -g 1002 groupname
-n
: 修改组名。- groupmod -n newgroupname oldgroupname
-
groupdel:删除组
- 语法:groupdel 组名
-
gpasswd:管理组成员
- 语法:gpasswd 【选项】组名
-
getent:获取组信息
- 语法:getent group 【组名】
- 最好是添加组名,不然一串我不知道的东西出来了
-
id:显示uid与gid
- 语法:id 【用户名】
第九节:压缩与解压
-
tar:归档与解归档
- 语法:tar 选项 【-zcf】 【归档后的文件】【要归档文件的目录】
- tar与gzip命令结合使用实现文件打包、压缩。 tar只负责打包文件,但不压缩,用gzip压缩tar打包后的文件,其扩展名一般用xxxx.tar.gz。
- 常用参数:
- -c:打包
- -v:显示详细信息
- -f:指定文件名
- -z:打包同时压缩,用了z就可以不用gzip了,这是告诉tar调用gzip
- -x:解包,这个时候加z就是解包和解压
- 语法:tar 选项 【-zcf】 【归档后的文件】
-
gzip和gunzip:压缩于解压缩
- gzip:压缩
- 语法:gzip 【文件】
- 压缩后文件格式:.gz,不可以压缩目录、链接
- gunzip:解压
- 语法:gunzip 【文件.gz】
- gunzip=gzip -d用别名替换了
- gzip:压缩
-
zip与unzip:(源文件存在,复制+压缩)
- 语法:zip 【选项】 【压缩后的文件名】【文件或目录】
- 常用参数:
- -r:压缩目录
- unzip 【压缩后的文件名】
-
xz:
- 不写了,够用了
-
bzip2:
- 不写了,够用了
第十节:网络命令
-
ping:测试网络连通性
- 语法:ping 【选项】主机名或ip地址
- 常用参数:
-c
: 指定发送的请求数量。- ping -c 4 example.com
-i
: 设置发送请求的时间间隔(秒)。- ping -i 2 example.com
-
ifconfig:配置网络接口
- 语法:ifconfig 【接口】【地址】【选项】
- 常用参数:
up
::启用网络接口。- ifconfig 接口名 up
- down:禁用网络接口。
- ifconfig 接口名 down
-
ip:现代网络接口配置
- 语法:ip 【选项】【参数】
- 常用参数:
addr
: 显示或配置 IP 地址。- ip addr show
ip addr add 192.168.1.100/24 dev eth0
- ip addr show
link
: 显示或配置网络接口状态。- ip link show
ip link set eth0 up
- ip link show
- a:显示所有内容
-
netstat:网络统计
- 语法:netstat 【选项】
- 常见参数:
-t
: 显示 TCP 连接。-u
: 显示 UDP 连接。-l
: 显示监听的套接字。-a
: 显示所有连接和监听的套接字。
-
ss:更现代的网络统计工具
- 语法:ss 【选项】
- 常用参数:
-t
: 显示 TCP 连接。-u
: 显示 UDP 连接。-l
: 显示监听的套接字。-a
: 显示所有连接和监听的套接字。
-
traceroute:追踪网络路径
- 语法:traceroute 【选项】 主机名或ip地址
- 常用参数:
-m
: 设置最大跳数。- traceroute -m 20 example.com
-
curl:下载或发送数据
- 语法:curl 【选项】【url】
- 常用参数:
-O
: 保存到文件(O泡果奶不是零)。- curl -O http://example.com/file.txt
-I
: 仅获取 HTTP 头信息。- curl -I http://example.com
-
wall:广发消息
- 语法:wall 【文字,建议在双引号内】
- wall=write all
-
write:给用户发信息,ctrl+d保存结束
- 语法:write 用户名【输入文字,建议在双引号内】
第十一节:关机重启命令
-
shutdown:关机或重启
- 语法:shutdown 【选项】【时间】【消息】
- 常用参数:
-h
: 关机。-r
: 重启。-P
: 在关机时关闭电源(通常为默认设置)。-c
: 取消计划的关机或重启。
-
reboot:重启系统
- 语法:reboot [选项]
- 没什么常用选项单独用reboot,不演示了
-
poweroff:
- 语法:poweroff [选项]
- 没什么常用选项单独用poweroff ,不演示了
-
halt:
- 语法:halt [选项]
- 没什么常用选项单独用halt ,不演示了
-
init:重启或关机
- 语法:reboot [选项]
- 语法:init 【级别】
- 常用参数:
0
: 关机。6
: 重启。
第三章:文本编辑器vim
第一节:vim的常用操作(注意是vim)
-
快速入门操作流程
- 打开文件:
vim 文件名
- 进入插入模式:按
i
- 输入文本:编辑你的文件内容
- 退出插入模式:按
Esc
- 保存并退出:输入
:wq
然后按Enter
图没什么好截屏的,简单就是笔记本操作,平时怎么用笔记本,就这么用它,当然要先按i。
- 打开文件:
-
纳尼,vim是vi?
- vi 提供了基础的文本编辑功能,没有现代的编辑器特性。
- vim 提供了多种增强功能,如语法高亮、插件支持、多级撤销等。
- vi 的界面简洁,没有太多提示或辅助信息,适合经验丰富的用户。
- vim 提供了更丰富的界面选项,如状态栏、光标位置信息、搜索提示等,用户体验更加友好。
- vi 几乎在所有 Unix 系统上都可用,是一种通用的文本编辑器。
- vim 在现代 Linux 发行版中很常见,但在一些精简的 Unix 系统中可能没有预装。
- 其实吧就是大杯(vi)和超大杯(vim),嗯~正经的。
-
打开文件:
- 语法:vim/vi 文件名
-
基本模式:
-
普通模式(Normal Mode):启动 Vim 时的默认模式,用于导航和操作文本。按
Esc
键可以进入普通模式。 -
插入模式(Insert Mode):用于插入和编辑文本。按
i
键进入插入模式。 -
命令模式(Command Mode):用于执行保存、退出等命令。按
:(shift不要忘了)
键进入命令模式。 -
可视模式(Visual Mode):用于选择文本。按
v
键进入可视模式。
-
-
关闭与保存文件:
- 保存并退出:
:wq
或:x
或ZZ
- 仅保存:
:w
- 仅退出:
:q
- 强制退出(不保存):
:q!
- 保存为另一个文件名:
:w 新文件名
- 保存并退出:
-
插入模式:
-
进入插入模式:
i
- 在当前字符后插入:
a
- 在行首插入:
I
- 在行末插入:
A
- 在当前行下方插入新行:
o
- 在当前行上方插入新行:
O
- 退出插入模式:
Esc
-
-
文本编辑:
- 删除当前字符:
x
- 删除当前行:
dd
- 删除光标到行末:
D
- 删除一词:
dw
- 撤销操作:
u
- 恢复撤销:
Ctrl + r
- 复制(或剪切)行:
yy
或dd
- 粘贴:
p
(在光标后粘贴) 或P
(在光标前粘贴)
- 删除当前字符:
-
搜索与替换:
- 搜索文本:
/关键词
,按n
跳到下一个匹配项,N
跳到上一个匹配项。 - 向上搜索:
?关键词
- 替换当前行中的第一个匹配项:
:s/旧文本/新文本/
- 替换当前行中的所有匹配项:
:s/旧文本/新文本/g
- 替换整个文件中的所有匹配项:
:%s/旧文本/新文本/g
- 替换整个文件中的所有匹配项,并询问确认:
:%s/旧文本/新文本/gc
- 搜索文本:
-
移动光标:
- 上下左右移动:
h
(左)、j
(下)、k
(上)、l
(右) - 移动到行首:
0
或^
- 移动到行末:
$
- 移动到下一词:
w
- 移动到上一词:
b
- 移动到下一段:
}
- 移动到上一段:
{
- 跳转到指定行:
:行号
或按G
移动到最后一行,gg
移动到第一行。
- 上下左右移动:
-
可视模式操作:
- 进入可视模式:
v
- 可视行模式:
V
- 块可视模式:
Ctrl + v
- 选中后复制:
y
- 选中后删除:
d
- 选中后替换:进入插入模式后,直接输入替换文本,完成后按
Esc
- 进入可视模式:
-
其他常见命令:
- 显示行号:
:set nu
- 取消行号显示:
:set nonu
- 显示文件状态信息:
Ctrl + g
- 查看和编辑多个文件:
:n 文件名
和:e 文件名
- 分屏编辑:
:split 文件名
或:vsplit 文件名
- 切换分屏:
Ctrl + w
然后按h/j/k/l
来切换
- 显示行号:
第四章:软件安装
第一节:软件包管理简介(可以跳过)
-
软件包管理简介:
- Linux 系统中的软件通常以“软件包”的形式发布。软件包包含程序的所有文件,包括二进制可执行文件、配置文件、文档和依赖项信息。软件包管理系统(Package Management System,PMS)用来处理这些包的安装、升级、查询和卸载。
-
常见的软件包格式:
- RPM (Red Hat Package Manager): 由 Red Hat 系列发行版(如 RHEL、CentOS、Fedora)使用的包管理格式。
- DEB (Debian Package): 由 Debian 系列发行版(如 Debian、Ubuntu、Mint)使用的包管理格式。
- TAR.GZ/ TAR.BZ2: 通常是源代码包,用户需要编译后安装。
-
常见的包管理工具:
- RPM: 管理 RPM 软件包。
- YUM/DNF: 基于 RPM 包管理的高级工具,支持在线安装、升级、卸载和解决依赖关系。
- APT (Advanced Package Tool): Debian 系列系统的包管理工具,用于管理 DEB 包。
第二节:rpm命令管理(要先有rpm包)
-
语法:rpm 选项 包名.rpm
- 常用参数:
-i
:安装软件包。-U
:升级软件包,若未安装则安装。(大写)-e
:卸载指定的软件包(使用包名而非文件名)。-q
:查询软件包。跟a
:列出所有已安装的软件包。跟i
:显示详细信息。跟l
:列出软件包安装的文件。
-V
:验证软件包,检查文件是否被修改。(大写)-v
:显示详细信息(可选)。-h
:显示安装进度条(可选)。
第三节:yum在线管理
-
语法:yum 【选项】包名
- 常用参数:
install
:安装指定的软件包。update
:升级指定的软件包,若不指定包名则升级所有包。remove
:卸载指定的软件包。list available
:显示所有可安装的软件包。list installed
:显示所有已安装的软件包。search
:根据关键字搜索软件包。- yum search keyword
- yum clean [all|packages|headers|metadata|dbcache]
clean all
:清理所有缓存。clean packages
:清理已下载的软件包。clean headers
:清理 headers。clean metadata
:清理元数据。clean dbcache
:清理数据库缓存。
- 暂时如此,命令是这样的,至于细节我学到了,就会记录更新。
第五章:shell基础
第一节:shell的入门
-
shell是什么:
- 我认为就是一种编程语言,用来控制linux这个库。简单的说就像是对css编程,好吧,越来越复杂了。
- 就是将一条一条的命令放在文件中,让系统一下子把文件这个命令一下子执行出来。
- 先记好,echo就是打印的意思
-
shell的分类:
- Bourne Shell (sh)
- 简介: Bourne Shell 是最早的 Unix Shell,基本的命令行接口。它提供了脚本编写功能,并允许用户创建简单的自动化脚本。
- 特点: 语法简单,功能基础,适用于大多数 Unix 和 Linux 系统。
- #!/bin/sh
echo "Hello, World!"
- Bourne Again Shell (Bash)(学的这个)
- 简介: Bash 是 Bourne Shell 的增强版,提供了更多的功能,如命令补全、历史记录、别名等。它是大多数 Linux 发行版的默认 Shell。
- 特点: 功能丰富,兼容性好,支持命令补全、命令历史、脚本调试等。
- #!/bin/bash
echo "Hello, World!"
- C Shell (csh)
- 简介: C Shell 的语法类似于 C 语言,提供了类似于编程语言的特性,如更复杂的控制结构和条件语句。
- 特点: 提供了类似 C 语言的语法,支持历史命令编辑,适合编写复杂的脚本。
- #!/bin/csh
echo "Hello, World!"
- Korn Shell (ksh)
- 简介: Korn Shell 结合了 Bourne Shell 和 C Shell 的功能,提供了更多的编程功能和增强的脚本处理能力。
- 特点: 功能强大,兼容 Bourne Shell,支持增强的编程功能和改进的用户界面。
- #!/bin/ksh
echo "Hello, World!"
- Z Shell (zsh)
- 简介: Z Shell 是一种功能丰富的 Shell,提供了比 Bash 更多的功能,如扩展的自动补全、高级的脚本功能和主题支持。
- 特点: 支持高级的命令补全、插件系统、可自定义的主题,适合需要高度自定义的用户。
- #!/bin/zsh
echo "Hello, World!"
- Fish Shell (fish)
- 简介: Fish Shell 是一个用户友好的 Shell,旨在提供易用的命令补全和语法高亮。它与其他 Shell 的语法不完全兼容。
- 特点: 高级命令补全、语法高亮、简化的语法,适合新手用户。
- #!/usr/bin/env fish
echo "Hello, World!"
- Bourne Shell (sh)
-
shell文件的创建与使用
- 创建一个 Shell 文件
- vi 文件名.sh
- 通过vi想sh文件写入命令(i:编辑模式)
- :wq保存退出(普通模式)
- 查看权限并修改
- ls -l 文件名.sh
- 用chmod修改权限
- 使用
- ./文件名.sh(直接执行)
- bash 文件名.sh(bash执行)
- 创建一个 Shell 文件
第二节:shell的变量
-
变量的定义和使用
- 定义
- 语法:变量名=变量值
- 在 Shell 中,定义变量不需要使用
var
或其他关键字,只需要使用=
进行赋值。赋值时,等号两边不能有空格。 - 没有类型这一说法,这一点像py,好评
- 使用
- 语法:$【变量名】
- 定义
-
变量的类型
- 位置参数
- 位置参数用于脚本中接收传递给脚本的参数。
- 比如:
- #!/bin/bash
echo "The first argument is $1"
echo "The second argument is $2" - 运行时传递参数
- ./文件名.sh,使用./执行sh文件,不行就要用chmod改权限
- 在文件开头,#!/bin/bash,表示告诉系统用bash处理
- #!/bin/bash
- 环境变量
- 环境变量是在系统和用户环境中设置的变量,影响系统和应用程序的行为。
- 比如
- export PATH="$PATH:/usr/local/bin"
- 可以通过
printenv
或env
查看所有环境变量。(看不懂,以后在说吧)
-
#Shell常见的变量之二环境变量,主要是在程序运行时需要设置,环境变量详解如下:
-
PATH 命令所示路径,以冒号为分割;
-
HOME 打印用户家目录;
-
SHELL 显示当前Shell类型;
-
USER 打印当前用户名;
-
ID 打印当前用户id信息;
-
PWD 显示当前所在路径;
-
TERM 打印当前终端类型;
-
HOSTNAME 显示当前主机名;
-
PS1 定义主机命令提示符的;
-
HISTSIZE 历史命令大小,可通过 HISTTIMEFORMAT 变量设置命令执行时间;
-
RANDOM 随机生成一个 0 至 32767 的整数;
-
HOSTNAME 主机名
-
- 本地变量(暂时跳过)
- 本地变量只在定义它的 Shell 会话或脚本中有效。
- local LOCAL_VAR="Local Variable"
- 只能在函数中使用
- 特殊变量
$?
:上一个命令的退出状态。$$
:当前 Shell 的进程 ID。$!
:最后运行的后台命令的进程 ID。$0
:脚本的名称。$#
:传递给脚本的参数个数。$@
和$*
:传递给脚本的所有参数。- $-:显示当前 Shell 的选项标志(set 命令设置的选项)
- $_:上一个命令的最后一个参数或脚本中的最后一个命令的最后一个参数。
- shift:将所有位置参数左移一个位置。原来的
$1
被丢弃,$2
变为$1
,依此类推。
- 位置参数
-
变量的操作
- 变量的引用:
- 单引号
'
:引号中的内容会被原样保留,不会解析变量。 - 双引号
"
:引号中的变量会被解析。
- 单引号
- 变量的拼接:
- CONCAT_VAR="${STRING_VAR} and more text"
echo "$CONCAT_VAR"
- CONCAT_VAR="${STRING_VAR} and more text"
- 变量的替换:
- 默认值: 如果变量未设置,可以提供默认值。
- echo "${VAR:-default_value}"
- 替换为空值: 如果变量存在,替换为空值。
- echo "${VAR:?Variable is unset}"
- 默认值: 如果变量未设置,可以提供默认值。
- 变量的引用:
-
变量的命名规则
- 变量名 只能包含字母、数字和下划线,且必须以字母或下划线开头。
-
变量的作用范围
- 全局变量: 在整个 Shell 会话中有效。使用
export
命令使变量成为环境变量。- 变量名=变量值
- 不同文件使用自定义的export变量
- 局部变量: 在当前 Shell 函数或脚本中有效。如果在函数中使用,需用
local
定义。- my_function() {
local 变量名=变量值
echo "$LOCAL_VAR"
}
- my_function() {
- 用户变量呢?
- 来了,用户变量就是我们定义的变量,在 shell脚本中,我们到现在还没有真正搞一个脚本玩。因为用户变量还没说。
- 用户变量就是我们设置的变量,有什么特点吗?回看最开始的知识,就是用户自定义变量的全部特点。
- 来到了作用范围,就可以开始用户变量。
- 用户变量可以放在文件中的任意的地方,添加local表示局部,加export就是全局,什么都不加就是在本文件的全局变量。
- 还是抽象?就是你自己设置的变量,不是你学到的变量(比如PATH)。还是看看例子,看完就知道了。
- 突然发现不同文件使用export还是有点麻烦
- 全局变量: 在整个 Shell 会话中有效。使用
-
变量的删除
- 使用
unset
命令删除变量- unset 变量名
- 使用
第三节:流程控制语句(每个符号都要有空格,最好有,不然你都不知道哪里错了)
-
条件语句
- if语句
- 语法
- if [ 条件 ]
then
命令1
elif [ 另一个条件 ]
then
命令2
else
命令3
fi
- if [ 条件 ]
- 常见逻辑判断运算符
-
文件测试:
-e filename
:测试文件是否存在。-f filename
:测试是否为普通文件。-d filename
:测试是否为目录。-r filename
:测试文件是否可读。-w filename
:测试文件是否可写。-x filename
:测试文件是否可执行。
-
字符串测试:
-z string
:测试字符串是否为空。-n string
:测试字符串是否非空。string1 = string2
:测试两个字符串是否相等。string1 != string2
:测试两个字符串是否不等。
-
数值测试:
num1 -eq num2
:测试两个数是否相等。num1 -ne num2
:测试两个数是否不相等。num1 -lt num2
:测试num1
是否小于num2
。num1 -le num2
:测试num1
是否小于或等于num2
。num1 -gt num2
:测试num1
是否大于num2
。num1 -ge num2
:测试num1
是否大于或等于num2
。
- 逻辑操作符
- 逻辑与 (
&&
):只有当所有条件都为真时,整体条件才为真。 - 逻辑或 (
||
):只要有一个条件为真,整体条件就为真。 - 逻辑非 (
!
):对条件取反。
- 逻辑与 (
-
- 语法
case
语句- 语法:
- case 变量 in
模式1)
命令1;;
模式2)
命令2;;
*)
默认命令;;
esac
- case 变量 in
- 新函数read,从控制台读取
- 语法:
- if语句
-
循环语句
- for循环
- 语法:
- for 变量 in 列表
do
命令
done
- for 变量 in 列表
- 语法:
- while循环
- 语法:
- while [ 条件 ]
do
命令
done
- while [ 条件 ]
- 语法:
until
循环与while
循环相反,条件为假时执行命令。- 语法:
- until [ 条件 ]
do
命令
done
- until [ 条件 ]
- 语法:
- for循环
-
跳出和继续控制
- break跳出循环语句
- continue跳出本次循环语句
- 配合判断使用
第四节:其他补充知识
-
select:用于创建一个简单的菜单供用户选择,它常用于交互式脚本中。
- 语法:
- select 变量 in 选项1 选项2 选项3 ...
do
命令
break
done
- select 变量 in 选项1 选项2 选项3 ...
- 语法:
-
eval:用于将参数中的表达式求值并执行结果命令。它可以用于动态构造命令行。
- 语法:
- eval $变量
- 语法:
-
exec:用于用一个新的命令替换当前 Shell 进程,从而不创建新的子进程。如果
exec
成功执行,新命令将直接替换当前脚本的 Shell 进程,后续脚本不再执行。 -
trap:用于捕捉和处理信号,允许在收到特定信号时执行一些自定义操作。常见的应用包括清理临时文件或优雅地退出脚本。
- 语法:
- trap ‘命令’ 信号 【信号……】
- 常见信息
INT
:中断信号,通常由用户按下Ctrl+C
触发。TERM
:终止信号,用于请求程序结束。EXIT
:脚本退出时触发的信号。HUP
:挂起信号,通常在终端关闭时触发。KILL
:立即终止信号,无法捕捉和处理。
- 语法:
-
function:Shell 中的函数用于组织和重用代码。函数可以包含逻辑控制语句,也可以接受参数并返回值。
- 语法:
- function 函数名 {
命令
}
- function 函数名 {
- 语法:
- 一些目前我没见过的命令
- sleep:用于暂停脚本的执行一段指定的时间。
- 语法:sleep 数字 【单位,不写默认为秒】
- 常用参数:
s
:秒(默认值,如果不指定后缀)。m
:分钟。h
:小时。d
:天。
- mktemp:用于创建临时文件或目录的命令。它生成一个唯一的文件名或目录名,确保在创建时不会与其他文件或目录重名。
- 语法:mktemp 【选项】【模版】
- 常见参数:
-d
:创建一个临时目录,而不是临时文件。-p DIR
:在指定的目录中创建临时文件或目录。-t
:使用系统临时目录作为父目录来创建临时文件或目录。-u
:生成的临时文件/目录的名称不会实际创建,这个选项不推荐使用,因为可能导致安全问题。
- 模版指定模板,通常包含至少三个连续的
X
字符,这些X
会被替换为随机字符。如果不提供模板,mktemp
会使用默认的模板。
- sleep:用于暂停脚本的执行一段指定的时间。
第五节:bash的其他功能
1. 命令别名
定义命令别名
- 命令:
alias
- 用法:
alias [别名]='[命令]'
- 示例:
alias ll='ls -l'
- 将
ls -l
定义为ll
,以后只需输入ll
就可以执行ls -l
命令,简化常用命令的输入。
- 将
查看别名
- 命令:
alias
- 用法:直接输入
alias
即可查看当前所有定义的别名。
取消别名
- 命令:
unalias
- 用法:
unalias [别名]
- 示例:
unalias ll
- 取消
ll
这个别名,使其恢复为未定义别名前的状态。
- 取消
2. 历史记录
命令历史
- 命令:
history
- 用法:直接输入
history
可以查看当前 shell 会话中已执行的所有命令。
命令回放
- 使用:
!n
或!!
- 示例:
!3
:重新执行历史记录中的第 3 条命令。!!
:重新执行上一条命令。
3. 自动补全
命令自动补全
- 用法:输入部分命令或文件名后按
Tab
键,Bash 会尝试自动补全。- 如果有多个匹配项,按
Tab
键两次可以显示所有可能的补全项。
- 如果有多个匹配项,按
4. 模式匹配
通配符
*
:匹配任意数量的字符(包括零个字符)。- 例如,
*.txt
匹配所有以.txt
结尾的文件。
- 例如,
?
:匹配任意一个字符。- 例如,
file?.txt
可以匹配file1.txt
、file2.txt
,但不匹配file10.txt
。
- 例如,
[]
:匹配指定范围内的任意一个字符。- 例如,
file[1-3].txt
可以匹配file1.txt
、file2.txt
、file3.txt
。
- 例如,
正则表达式
- 在 Bash 脚本中,可以使用正则表达式进行高级模式匹配,通常与
grep
、sed
、awk
等命令结合使用。
5. 输入输出重定向
标准输入/输出
>
:将输出重定向到文件(覆盖文件内容)。- 例如,
echo "Hello" > file.txt
会将 "Hello" 写入file.txt
,如果文件已存在,内容会被覆盖。
- 例如,
>>
:将输出追加到文件末尾。- 例如,
echo "Hello" >> file.txt
会将 "Hello" 追加到file.txt
,而不是覆盖文件内容。
- 例如,
<
:从文件读取输入。- 例如,
wc -l < file.txt
读取file.txt
的内容并计算行数。
- 例如,
6. 多命令执行与管道符
多命令执行
- 用法:使用
;
或&&
或||
来串联多个命令。command1; command2
:依次执行command1
和command2
,无论command1
是否成功。command1 && command2
:在command1
成功时才执行command2
。command1 || command2
:在command1
失败时才执行command2
。
管道符
- 符号:
|
- 用法:将一个命令的输出作为下一个命令的输入。
- 例如,
ls -l | grep ".txt"
:列出当前目录中所有以.txt
结尾的文件。
- 例如,
总结:
写了两天终于写,完了,我专升本计算机科学技术,也不知道该学什么,索性就为自己写了这个文档,csdn上有很多好文档,但是,要么就只有命令,要么就只有shell,要么vip,要么收费,于是我结合,csdn列出目录,gpt作为知识来源,我个人实操。当然,本文档有遗留,放弃,但是差不多够了。后期如果我从事相关行业,我会一直更新下去的,大家如果发现有什么缺少的知识可以评论,shell中还有一些函数我没写,因为我认为,初学就像是一年级,一下子就是高数不太好。
标签:选项,文件,用户,语法,命令,自用,linux,目录,大全 From: https://blog.csdn.net/qq_62174860/article/details/141248148