Linux学习总结

363 阅读26分钟

厚积薄发,静水流深~一周时间学完了linux, 记录一下

目录结构

linux中, 一切皆文件, 不同的目录存放不同用处的文件

/ (根目录)

根目录是所有其他目录的起点,整个 Linux 文件系统都挂载在 / 目录下。任何其他的文件、目录都可以通过 / 来访问。

/bin (用户二进制文件)

  • 存放了系统常用的二进制可执行文件,主要是系统启动和单用户模式下所需要的命令,例如:lscpmvrm 等。
  • /bin 下的命令必须在最小系统环境下可用,以便用户在紧急情况下仍然可以操作系统。

/sbin (系统二进制文件)

  • 该目录与 /bin 类似,不过这里存放的是超级用户(root)使用的系统管理程序,例如 rebootshutdownmkfs 等。
  • /sbin 下的程序主要用于系统的启动、恢复、修复和配置等管理操作。

/usr (用户程序目录)

  • usr 通常被解释为 “Unix System Resources”,它包含了用户使用的大多数应用程序和库文件。
  • 其中包括子目录:
    • /usr/bin:用户的二进制程序,供普通用户使用的各种常用命令。
    • /usr/sbin:系统管理员使用的管理程序,类似 /sbin,但不用于系统启动。
    • /usr/lib:存放应用程序使用的库文件。

/boot (引导目录)

  • 该目录存放启动 Linux 系统时使用的各种文件,如内核文件、启动引导程序(如 GRUB)等。
  • 例如:vmlinuz(内核映像文件)和 initrd(临时根文件系统)。

/etc (配置文件)

  • 系统的所有全局配置文件都放在这个目录下。通常包括各个服务和应用程序的配置文件。
  • 例如:/etc/passwd(用户账号信息)、/etc/fstab(文件系统挂载信息)等。

/dev (设备文件)

  • 该目录下存放的是设备文件,这些文件并不是真实的文件,而是对系统中硬件设备的接口。
  • 例如:/dev/sda1(第一个硬盘的第一个分区)、/dev/tty(终端设备)等。

/lib (系统库文件)

  • 这里存放的是系统启动和核心命令所依赖的共享库文件,以及加载器 ld-linux.so
  • 对于 32 位系统,库文件一般存放在 /lib 目录下;对于 64 位系统,库文件存放在 /lib64

/home (用户主目录)

  • 每个普通用户在 /home 目录下都有一个子目录,子目录的名称一般与用户名一致。比如用户 wwj 的主目录就是 /home/wwj
  • 用户的个人文件和配置都存放在其主目录下。

/root (超级用户主目录)

  • 这是系统管理员(root)的主目录。与普通用户不同,root 的主目录一般位于 /root,而不是 /home/root

/var (可变数据文件)

  • 该目录主要用于存放动态变化的文件,包括系统日志、包管理缓存、打印队列、锁文件等。
  • 其中常见的子目录有:
    • /var/log:系统和应用程序的日志文件。
    • /var/tmp:系统重启后仍保留的临时文件。
    • /var/lib:系统服务运行过程中生成的数据文件。

/tmp (临时文件)

  • 这里存放的是临时文件,系统和应用程序会在此目录下写入临时数据。系统会在重启后清空此目录。

/mnt/media (挂载点)

  • /mnt:系统管理员临时挂载文件系统时可以使用这个目录。
  • /media:用于自动挂载的外部存储设备,比如 U 盘、光盘等。

/opt (可选应用程序包)

  • 该目录用于安装额外的应用程序包,尤其是那些不遵循文件系统层次标准的第三方应用。
  • 一些大型商业软件往往安装在此目录下。

/proc (进程及内核信息)

  • 这个目录是一个虚拟文件系统,存放系统运行时的进程和内核相关的信息。
  • 例如:/proc/cpuinfo(CPU 信息)、/proc/meminfo(内存使用情况)。

/sys (系统文件)

  • 这个目录是 Linux 2.6 内核引入的,用于存放和管理内核设备的信息。它与 /proc 类似,也是一个虚拟文件系统,动态反映系统硬件状态。

/srv (服务数据)

  • 该目录用于存放某些服务启动后需要提取的数据,比如网站数据、FTP 数据等。

/run (运行时数据)

  • /run 目录存放系统自启动以来的临时文件,比如进程 ID 文件(PID 文件)和套接字(Socket)文件。

帮助命令

在Linux操作系统中,帮助命令是非常重要的工具,用于查找命令的使用方法、功能、参数等详细信息。常用的帮助命令包括manhelpinfo--help选项。下面详细介绍这些命令的作用和使用方法:

man 命令

man(manual)命令用于查看Linux命令的手册页,每个命令都有详细的说明文档,涵盖了该命令的用法、参数说明、示例等。

使用方式:

man <command>

示例:

man ls

这将打开ls命令的手册,显示该命令的详细使用说明。

--help 选项

大多数Linux命令都支持--help选项,用于快速查看该命令的简要说明、常用选项和参数。这种方式适合查找某个命令的常见用法。

使用方式:

<command> --help

示例:

ls --help

这会输出ls命令的简要帮助信息,包括各个选项的作用。

help 命令

help命令主要用于查看内建shell命令的帮助信息。Linux系统中的许多命令都是内置于shell中的(如cdecho等),有些命令无法通过man--help查看,需要使用help命令。

使用方式:

help <shell_builtin_command>

示例:

help cd

这将显示cd(切换目录)命令的帮助信息。

info 命令

info命令是另一种查看帮助文档的方式,通常比man命令提供的信息更加详细。它支持嵌套的菜单结构,可以方便地在不同的部分之间导航。

使用方式:

info <command>

示例:

info ls

这将打开ls命令的info页面,详细描述了该命令的使用方法及相关信息。

aproposwhatis 命令

apropos:用于搜索与特定关键字相关的命令或手册页。例如,如果你想找到与"list"相关的命令,可以执行:

apropos list

这会返回所有与"list"相关的命令或功能。

whatis:用于显示某个命令的简要描述。例如:

whatis ls

这会输出ls命令的简短说明。

开关机命令

默认情况下,普通用户 没有 直接执行关机和重启的权限。这是为了防止非管理员用户随意关闭或重启系统,可能导致数据丢失或服务中断。关机和重启操作涉及对系统核心部分的控制,通常需要管理员权限(也就是 root 权限)来执行。

关机命令

shutdown 命令

shutdown 是最常用的关机命令,默认会安全地停止所有进程,并同步磁盘数据到硬盘,确保数据不丢失。

立即关机:

shutdown now

这个命令会立即关闭系统,now 表示马上执行。系统会首先通知所有登录用户,并在安全关机前停止所有服务和进程。

定时关机:

shutdown +10

这个命令会在 10 分钟后关机,你可以用 + 加上具体的分钟数。

指定时间关机:

shutdown 23:00

系统会在当天 23:00 关机。

取消关机: 如果你在关机命令执行前改变了主意,可以使用下面的命令取消:

shutdown -c

取消命令会终止已经排定的关机任务,并向所有用户发送通知。

poweroff 命令

这个命令会直接关闭系统,相当于 shutdown -h now

poweroff

注意:此命令立即执行,没有延迟或者定时选项。

重启命令

shutdown 命令

使用 shutdown 同样可以实现重启,通过 -r 参数。

立即重启:

shutdown -r now

定时重启:

shutdown -r +5

系统将在 5 分钟后重启。

reboot 命令

直接重启系统,效果与 shutdown -r now 类似。

reboot

这个命令会通知所有进程进行关闭,确保数据写入磁盘后,再重启系统。

systemctl 命令

systemctl 是较新的命令,用于控制 systemd 管理的系统服务。

重启系统:

systemctl reboot

关机:

systemctl poweroff

服务管理命令

systemctl 管理服务

目前大多数现代 Linux 发行版(如 Ubuntu、CentOS、Debian 等)使用 systemctl 命令用于管理系统服务。

启动服务

systemctl start <服务名>

停止服务

systemctl stop <服务名>

重启服务

systemctl restart <服务名>

重启指定服务,相当于先停止再启动。

重新加载服务配置

systemctl reload <服务名>

查看服务状态

systemctl status <服务名>

服务开机自启

systemctl enable <服务名>

禁用服务开机自启

systemctl disable <服务名>

禁用某个服务的开机自启功能。

查看服务是否启用自启

systemctl is-enabled <服务名>

列出所有服务

systemctl list-units --type=service

列出系统中的所有服务及其当前状态。

常用命令示例, 假设我们想要管理 nginx 服务,可以使用以下命令:

# 启动服务
systemctl start nginx

# 查看服务状态
systemctl status nginx

# 重启服务
systemctl restart nginx

# 开启开机自启
systemctl enable nginx

# 禁用开机自启
systemctl disable nginx

pskill 命令

在某些情况下,你可能需要手动管理服务的进程。这时候可以用 pskill 命令。

查看进程:

ps aux | grep <服务名>

终止进程:

kill <进程ID>

你可以使用 kill 命令结束某个服务的进程。

tophtop 命令

这些命令用于实时监控系统中的服务和进程。top 是标准的系统命令,而 htoptop 的一个增强版本,需要单独安装。

# 查看系统实时进程(标准)
top

# 查看系统实时进程(增强版)
htop

文件和目录类命令

pwd

pwdprint working directory 的缩写,主要用于显示当前用户所在的工作目录路径。它是一个非常基础的命令,尤其在终端操作中经常使用。下面详细说明 pwd 的使用及相关选项。

基本用法

在终端直接输入 pwd,会输出当前的工作目录路径。

pwd

示例输出

/home/user

这表明当前的工作目录是 /home/user

常用选项

-L (Logical)

使用逻辑路径显示目录,也就是说基于用户输入的符号链接路径。如果用户在目录导航时使用了符号链接(软链接),那么 pwd -L 会显示用户通过符号链接进入的路径,而不是物理路径。

pwd -L

示例: 假设 /mnt/shared 是符号链接指向 /mnt/data/shared,当我们使用 cd /mnt/shared 进入这个路径时,pwd -L 会显示 /mnt/shared

-P (Physical)

显示物理路径。即便用户通过符号链接进入目录,pwd -P 也会显示实际的物理路径。

pwd -P

示例: 继续上面的情况,如果执行 pwd -P,则输出 /mnt/data/shared,即实际的物理路径。

ls / ll

基本用法

ls [选项] [文件或目录]

无参数, 只列出当前目录下的文件和文件夹名称。

示例:

ls

输出类似于:

文件1  文件2  文件夹1  文件夹2

常用选项

ls -l(长格式)

同命令 ll , 显示文件的详细信息,如权限、所有者、文件大小、最后修改时间等。

示例:

ls -l

输出类似于:

drwxr-xr-x 2 user user 4096 2024-10-21 12:00 文件夹1
-rw-r--r-- 1 user user  123 2024-10-21 12:01 文件1

解释:

  • 第1列:文件类型和权限。( d 表示目录,- 表示文件,l 表示符号链接)
  • 第2列:硬链接数。
  • 第3列:文件的所有者。
  • 第4列:文件所属的组。
  • 第5列:文件大小(以字节为单位)。
  • 第6列:最后修改时间。
  • 第7列:文件或目录的名称。

-a(显示隐藏文件)

  • 显示所有文件,包括以 . 开头的隐藏文件。

示例:

ls -a

输出类似于:

.  ..  .bashrc  文件1  文件夹1
  • . 表示当前目录,.. 表示父目录。

-h(人类可读的格式)

  • -l 结合使用,显示文件大小时,以易读的格式显示(如 KB、MB、GB)。

示例:

ls -lh

输出类似于:

drwxr-xr-x 2 user user 4.0K 2024-10-21 12:00 文件夹1
-rw-r--r-- 1 user user 123K 2024-10-21 12:01 文件1

-R(递归显示)

  • 递归列出指定目录及其子目录下的所有内容。

示例:

ls -R

-t(按时间排序)

  • 按最后修改时间进行排序,最近修改的文件排在最前面。

示例:

ls -lt

-r(逆序)

  • 反转排序顺序,反转原先命令的排序,可以与其他选项一起使用,如 -lt

示例:

ls -ltr

-S(按文件大小排序)

  • 根据文件大小排序,较大的文件排在前面。

示例:

ls -lS

--color(显示颜色)

  • 根据文件类型显示不同颜色,便于区分文件、目录、符号链接等。

示例:

ls --color
  • 目录通常显示为蓝色,符号链接显示为青色,普通文件显示为白色或灰色。

-i(显示 inode 编号)

  • 每个文件的 inode 编号也是文件的标识符,在文件系统中非常重要。

示例:

ls -i

输出类似于:

131073 文件1  131074 文件2  131075 文件夹1

cd

cd(Change Directory)是Linux系统中用于改变当前工作目录的命令

基本用法

cd [目录路径]

如果直接输入 cd 不带参数,会切换到用户的主目录(通常是 /home/用户名

常用选项

绝对路径与相对路径

  • 绝对路径:从根目录 / 开始指定完整的路径。例如:cd /home/user/documents

  • 相对路径:基于当前工作目录的路径。例如:如果当前在 /home/user 目录下,cd documents 就是进入 documents 目录

cd ~ 切换到用户的主目录

  • ~ 代表当前用户的主目录,可以通过 cd ~cd 来快速切换到主目录。例如:假设当前用户为 user,运行 cd ~ 等同于 cd /home/user

cd .. 返回上一级目录 .. 表示父目录,使用 cd .. 可以返回上一级目录。例如:从 /home/user/documents 目录执行 cd .. 后,当前目录变为 /home/user

cd - 切换到上一次访问的目录 - 代表上一次的工作目录,执行 cd - 可以返回到前一个工作目录。例如:如果从 /a/b 切换到 /etc,执行 cd - 会返回到 /a/b

cd / 切换到根目录 / 是根目录,所有文件和目录都从这里开始。执行 cd / 可以直接切换到根目录。

mkdir 与 rmdir

Linux 中,mkdirrmdir 是两个与目录操作相关的命令,主要用于创建和删除目录。

mkdir

mkdir(Make Directory)用于创建一个或多个新的空目录。

基本语法:

mkdir [选项] 目录名

常用选项:

  • -p :递归创建目录。当父目录不存在时会自动创建父目录。
  • -v :显示创建目录的详细信息(verbose 模式)。
  • -m :设置新建目录的权限。

示例:

创建单个目录

mkdir myfolder

这将在当前路径下创建一个名为 myfolder 的目录。

递归创建目录

mkdir -p /home/user/documents/work

如果路径中的父目录 /home/user/documents 不存在,-p 选项会先创建这些父目录,再创建 work 目录。

创建目录并设置权限

mkdir -m 755 secure_folder

这将在当前路径下创建 secure_folder 目录,并为其设置权限为 755,即所有者具有读、写、执行权限,组和其他用户具有读和执行权限。

创建目录并显示详细信息

mkdir -v myfolder

rmdir -- 了解 (rm 命令替代)

rmdir 只能删除空目录。如果目录非空,应该使用 rm -r 命令递归删除。

基本语法:

rmdir [选项] 目录名

示例:

删除单个空目录

rmdir myfolder

这将删除当前路径下的 myfolder 目录,前提是该目录是空的。

touch

touch 是 Linux 中的一个常用命令,主要用于创建空文件或更新文件的时间戳(包括访问时间 atime 和修改时间 mtime)。touch 命令的基本语法如下:

touch [选项] 文件名

基本用法

创建一个空文件 如果指定的文件不存在,touch 会创建一个新的空文件。

touch newfile.txt

创建多个空文件

touch file1.txt file2.txt file3.txt

更新文件的时间戳 如果文件已存在,touch 将更新该文件的访问时间(atime)和修改时间(mtime)。该命令不会修改文件内容,只会更新文件的时间戳。

touch existingfile.txt

常用选项

-a (只修改访问时间 atime) 只修改文件的访问时间,而不影响文件的修改时间。

touch -a myfile.txt

-m (只修改修改时间 mtime) 只更新文件的修改时间,而不影响访问时间。

touch -m myfile.txt

-c 或 --no-create (不创建文件) 如果文件不存在,不会创建该文件,也不会报错。

touch -c notexistfile.txt

-t (使用指定的时间戳) 手动指定时间戳来更新文件的访问时间和修改时间。将 myfile.txt 的时间戳设置为 2023 年 10 月 20 日 15:30:45:

touch -t 202310201530.45 myfile.txt

-d (使用指定的日期时间) 与 -t 类似,但可以使用更加直观的字符串指定时间。

touch -d "2023-10-20 15:30:45" myfile.txt

-r (参考另一个文件的时间戳) 将指定文件的时间戳设置为与另一个文件相同。

touch -r reference.txt myfile.txt

-h 或 --no-dereference (修改符号链接本身而非目标文件的时间戳) 通常情况下,如果你对符号链接文件使用 touch,它会修改符号链接指向的目标文件的时间戳。而 -h 选项则会修改符号链接本身的时间戳。

touch -h symlink

cp

在 Linux 系统中,cp(copy)命令用于复制文件或目录。它可以将文件从一个位置复制到另一个位置,也可以将整个目录复制。

基本语法

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

或者:

cp [选项] 源文件... 目标目录
  • 源文件:需要复制的文件。
  • 目标文件:复制后的文件名或路径。
  • 目标目录:复制后的目录路径。

复制单个文件, 将 file1.txt 复制为 file2.txt。如果 file2.txt 已经存在,将被覆盖。:

cp file1.txt file2.txt

复制多个文件到一个目录, 将 file1.txtfile2.txt 复制到指定的目录 /path/to/directory/ 中:

cp file1.txt file2.txt /path/to/directory/

复制目录(使用 -r 选项), -r 表示递归地复制整个目录,包括其内部的文件和子目录:

cp -r /path/to/source_directory /path/to/destination_directory

常用选项

-r--recursive:递归复制目录及其内容。

cp -r dir1 dir2

dir1 目录下的所有文件和子目录复制到 dir2 中。

-i--interactive:在覆盖现有文件时提示确认。

cp -i file1.txt /path/to/directory/

当目标目录中已存在同名文件时,系统会提示用户是否覆盖。

-f--force:强制复制,覆盖目标文件而不提示。

cp -f file1.txt /path/to/directory/

直接覆盖目标文件,无需用户确认。

-u--update:只复制源文件比目标文件新的文件,或者目标文件不存在的情况下才复制。

cp -u file1.txt /path/to/directory/

如果 file1.txt 比目标目录中同名文件更新,才会执行复制。

-v--verbose:显示复制过程的详细信息。

cp -v file1.txt /path/to/directory/

该选项将显示复制过程中每个文件的详细操作。

-p--preserve:保留文件的属性(如时间戳、权限等)。

cp -p file1.txt /path/to/directory/

复制时,源文件的权限、所有者、时间戳等属性都会保留下来。

-a--archive:归档模式,等同于 -dR --preserve=all,常用于备份。

cp -a dir1/ dir2/

这个选项会递归复制目录,且保留文件的所有属性(权限、所有者、符号链接等)。

-l--link:不复制文件,而是为文件创建硬链接。

cp -l file1.txt /path/to/directory/

该命令不会实际复制文件数据,而是创建一个指向相同数据块的硬链接。

--parents:复制文件时保留源文件的目录结构。

cp --parents dir1/subdir1/file1.txt /path/to/directory/

这个选项会将 dir1/subdir1/file1.txt 的父目录结构也复制到目标目录。

-s--symbolic-link:复制时创建符号链接而不是实际复制文件。

cp -s file1.txt /path/to/directory/

该选项将创建 file1.txt 的符号链接,而不是实际复制文件内容。

rm

rm 命令是 Linux 系统中用于删除文件和目录的命令。它的全称是“remove”,主要功能是从文件系统中移除文件或目录。

基本用法

语法

rm [选项] 文件/目录

示例:

rm file.txt

以上命令删除当前目录下的 file.txt 文件。

常用选项

-i:交互式删除

在删除每个文件或目录前,会提示用户确认是否删除,防止误删。

rm -i file.txt

会出现提示:

rm: remove regular file 'file.txt'?

输入 y 表示确认删除,n 表示取消删除。

-f:强制删除(不提示)

忽略不存在的文件,并且不进行提示,直接删除。常用于删除只读文件或不想进行确认提示时。

rm -f file.txt

-r / -R:递归删除

用于删除目录及目录下的所有文件和子目录。适合删除非空目录注意:rm -r 删除操作非常危险,尤其是在没有 -i 选项的情况下。

rm -r mydir/

会删除 mydir 目录及其所有内容。

-v:显示删除过程

执行 rm 命令时,详细列出每个文件或目录的删除操作。

rm -v file.txt

-d:删除空目录

如果想只删除空的目录,可以使用 -d 选项。

rm -d adir/

删除多个文件

可以一次删除多个文件,只需将文件名按空格隔开:

rm file1.txt file2.txt file3.txt

删除目录

当删除目录时,必须结合 -r 选项:

rm -r mydir/

如果想要强制删除非空目录,则使用 -rf 选项:

rm -rf mydir/

注意

rm 命令删除文件时,不会将其放入回收站,文件会直接从系统中永久移除,无法通过简单方法恢复。因此,建议使用 -i 选项的习惯,防止误删重要文件。

mv

mv 用于移动文件或目录,也可以用于重命名文件或目录。它是 "move" 的缩写。

基本语法

mv [选项] 源文件 目标文件
  • 源文件:要移动或重命名的文件或目录。
  • 目标文件:新的文件名或目标目录。

基本用法

移动文件: 将一个文件从当前目录移动到另一个目录。

mv 文件名 目录名/

示例:

mv example.txt /home/user/documents/

example.txt 文件移动到 /home/user/documents/ 目录。

批量移动多个文件: 可以一次移动多个文件到一个目录中。

mv file1.txt file2.txt file3.txt 目录名/

示例:

mv file1.txt file2.txt /home/user/documents/

file1.txtfile2.txt 一同移动到 /home/user/documents/

重命名文件: 可以使用 mv 命令重命名文件。

mv 旧文件名 新文件名

示例:

mv old_name.txt new_name.txt

old_name.txt 重命名为 new_name.txt

移动目录: 可以移动整个目录及其内容。

mv 目录名 目标目录

示例:

mv /home/user/old_folder /home/user/new_folder/

这将把 old_folder 目录及其内容移动到 new_folder/ 目录中。

常用选项

-i(interactive,交互模式): 如果目标文件已经存在,mv 会提示用户是否覆盖现有文件。

mv -i 文件名 目录名/

示例:

mv -i file.txt /home/user/documents/

如果 file.txt 已存在于 /home/user/documents/ 中,系统会提示用户是否确认覆盖。

-f(force,强制模式): 不会提示直接覆盖目标文件,即使目标文件已存在。

mv -f 文件名 目录名/

示例:

mv -f file.txt /home/user/documents/

如果 file.txt 已存在于 /home/user/documents/ 中,它将被强制覆盖而不提示用户。

-n(no-clobber,不覆盖): 如果目标文件已存在,则不执行移动操作,不会覆盖目标文件。

mv -n 文件名 目录名/

示例:

mv -n file.txt /home/user/documents/

如果 /home/user/documents/ 中已有 file.txt,它不会被覆盖,也不会提示用户。

-u(update,更新): 仅在源文件比目标文件新时才移动(或者目标文件不存在时)。

mv -u 文件名 目录名/

示例:

mv -u file.txt /home/user/documents/

如果 /home/user/documents/ 中的 file.txt 比要移动的 file.txt 旧,或者文件不存在,才会移动。

-v(verbose,详细模式): 在移动或重命名文件时显示详细信息。

mv -v 文件名 目录名/

示例:

mv -v file.txt /home/user/documents/

cat 与 more 与 less --了解

catmoreless 是 Unix 和 Linux 系统中用于查看文件内容的命令。

cat 命令

cat(concatenate 的缩写)用于将一个或多个文件的内容输出到标准输出(通常是终端)。它可以用来查看小文件的内容,或者将多个文件合并成一个文件。

使用方法:

cat [选项] [文件...]

查看文件内容:

cat filename.txt

将多个文件合并并输出:

cat file1.txt file2.txt > merged.txt

常用选项

  • -n:在输出的每一行前加上行号。
  • -b:仅对非空行加上行号。

more 命令

more 命令用于逐屏查看文件内容,适合用于查看较大的文本文件。它允许用户向下翻页,但不支持向上翻页。

使用方法:

more [选项] [文件...]

查看文件内容:

more filename.txt

操作:

  • 空格键:向下翻页。
  • Enter:逐行向下滚动。
  • b:向上翻页(如果已经向下翻过)。
  • q:退出查看。

less 命令

less 是比 more 更强大的工具,它不仅可以向下翻页,还可以向上翻页,并且支持更丰富的搜索和导航功能。

使用方法:

less [选项] [文件...]

示例:

查看文件内容:

ess filename.txt

操作:

  • 空格键:向下翻页。
  • b:向上翻页。
  • /pattern:搜索模式。
  • n:搜索下一个匹配项。
  • N:搜索上一个匹配项。
  • q:退出查看。

tail

tail 命令用于显示文件的最后部分,常用于查看日志文件的最新内容。

基本用法:

tail [选项] [文件名]

常用选项:

  • -n <行数>:显示最后的指定行数,例如 tail -n 10 filename 显示最后10行。
  • -f:实时跟踪文件变化,例如 tail -f filename 可以实时显示新增内容,适用于日志监控。
  • -c <字节数>:显示最后的指定字节数,例如 tail -c 100 filename 显示最后100个字节。

示例用法:

# 查看文件最后20行
tail -n 20 mylog.log

# 实时查看文件新增内容
tail -f mylog.log

# 查看文件最后50个字节
tail -c 50 myfile.txt

head

head 命令用于显示文件的开头部分,通常用于快速查看文件的前几行。

基本用法:

head [选项] [文件名]

常用选项:

  • -n <行数>:显示前面的指定行数,例如 head -n 10 filename 显示前10行。
  • -c <字节数>:显示文件开头的指定字节数,例如 head -c 100 filename 显示前100个字节。
  • -q:在多个文件输出时,不显示文件名,适合于需要简洁输出的场合。
  • -v:在多个文件输出时,始终显示文件名。

示例用法:

# 查看文件的前10行(默认是10行)
head myfile.txt

# 查看文件的前5行
head -n 5 myfile.txt

# 查看文件的前50个字节
head -c 50 myfile.txt

# 查看多个文件的前10行,并显示文件名
head -v file1.txt file2.txt

echo

基本用法

echo 跟上内容, 输出到控制台:

echo "Hello, world!"

输出:

Hello, world!

常用选项

-n 不换行 默认情况下,echo 命令会在输出内容后加上一个换行符。如果不希望输出后换行,可以使用 -n 选项:

echo -n "This is a test"

输出:

This is a test

-e 解释反斜杠转义字符 如果想使用一些转义字符(比如换行符 \n 或制表符 \t),需要加上 -e 选项:

echo -e "First Line\nSecond Line"

输出:

mathematica复制代码First Line
Second Line

常见的转义字符:

  • \n:换行
  • \t:制表符(Tab)
  • \\:输出反斜杠
  • \b:退格符(删除前一个字符)
  • \c:抑制后续输出,即不打印换行符

-E 禁用转义字符-e 相反,-E 会禁用反斜杠转义。它是默认行为,所以一般用得较少:

echo -E "First Line\nSecond Line"

输出:

First Line\nSecond Line

变量输出

echo 可以输出环境变量的值:

echo $PATH

输出:

/software/jdk8u411/jdk1.8.0_411/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

如果需要同时输出文本和变量:

echo "AAA, $PATH"

输出:

AAA, /software/jdk8u411/jdk1.8.0_411/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

输出重定向

echo 命令的输出可以重定向到文件中:

echo "This is a test" > file.txt

这会将文本写入 file.txt 文件,如果文件已存在,内容将被覆盖。如果希望追加到文件中,而不是覆盖,可以使用 >>

echo "This is an additional line" >> file.txt

一些示例

输出当前日期和时间

echo "Current date and time: $(date)"

输出示例:

Current date and time: Tue Oct 22 12:34:56 UTC 2024

输出当前路径

echo "Current directory: $(pwd)"

输出示例:

Current directory: /home/user

格式化输出 使用 -e 来格式化输出,比如显示多行信息:

echo -e "Name:\tAlice\nAge:\t30\nLocation:\tNew York"

输出:

Name:    Alice
Age:     30
Location:    New York

注意事项

  • echo 命令是 Shell 的内置命令,因此其行为可能在不同的 Shell 环境中有所不同(比如 bashsh 之间的差异)。
  • 如果要输出包含特殊字符的文本(比如 $\),建议使用双引号或单引号以避免 Shell 对这些字符的特殊处理。

链接与软连接

在Linux中,ln命令用于创建硬链接(hard link)和软链接(符号链接,symbolic link)。

硬链接

硬链接是指向同一文件的多个文件名。文件数据保存在硬盘的某个区域,硬链接是指向这个数据区域的多个入口。硬链接之间共享相同的文件数据块,所以修改其中一个硬链接文件,其他链接也会同步变化。

基本用法:

ln 源文件 目标文件

示例:

ln file1.txt file2.txt

这将创建一个名为file2.txt的硬链接,它与file1.txt指向同一个文件数据。删除其中一个文件,并不会影响到另一个文件。

特点:

  • 硬链接指向文件的实际数据。
  • 删除任何一个硬链接,文件数据不会被删除,除非所有链接都被删除。
  • 不能用于目录。

软链接

符号链接是一个指向文件或目录的路径引用,它类似于Windows中的快捷方式。符号链接只是保存了目标文件或目录的路径名,它指向这个路径,而不是文件的实际数据。

基本用法:

# 软链接的路径建议使用绝对路径
ln -s 源文件 目标链接

示例:

ln -s /wwjfiles/file1.txt /wwjfiles/symlink_file.txt

这将创建一个名为symlink_file.txt的符号链接,指向file1.txt。如果你操作符号链接文件,实际操作的是file1.txt

特点:

  • 符号链接指向的是文件或目录的路径。
  • 如果目标文件被删除,符号链接会变成“悬挂链接”(broken link),无法使用。
  • 可以链接到目录。

常用选项

-s 选项:

  • 用于创建符号链接(软链接)。

-f 选项:

  • 强制覆盖已存在的目标文件或链接。如果想覆盖一个已经存在的软链接时,可以使用此选项。

说明

  • 硬链接:修改硬链接或源文件时,文件数据会同步变化,因为它们指向同一块数据。删除硬链接或源文件时,只要有其他硬链接存在,文件数据不会被删除。
  • 软链接:软链接只保存源文件的路径。修改软链接指向的文件,源文件会同步变化;但修改软链接本身,源文件不会受到影响。删除源文件后,软链接会失效,但软链接本身不会被自动删除。

history

history 是用于查看命令历史记录的一个非常常用的命令,它可以帮助用户查看、重用之前执行过的命令。

基本用法

在终端中输入 history,系统将显示一系列之前执行过的命令列表。每个命令前面都有一个编号,这个编号是该命令在历史中的索引。

history

输出类似以下内容:

1  ls
2  cd /home/user
3  cat file.txt
4  history

常用选项和功能

显示指定数量的历史命令, 如果你只想查看最近执行的几条命令,可以在 history 后加上数字参数,指定需要显示的条目数。

history 10

这条命令会显示最近执行的 10 条命令。

执行特定的历史命令, 使用 ! 加上历史命令的编号可以重新执行某条命令。例如,要执行编号为 3 的命令 cat file.txt,可以使用:

!3

执行上一个命令, 使用 !! 可以快速重新执行上一次执行的命令。非常适用于在执行完命令后发现遗漏了权限,想加上 sudo 再执行的情况:

sudo !!

删除历史记录, 使用 -c 选项可以清空当前用户的历史记录:

history -c

保存历史记录, 在大多数 Linux 系统中,命令历史默认存储在 ~/.bash_history 文件中。退出终端时,当前会话的历史记录会保存到这个文件。如果想手动保存当前的历史记录,可以使用 -w 选项:

history -w

删除特定的历史记录, 使用 -d 选项可以删除某一条特定的历史记录。假设你想删除编号为 5 的命令:

history -d 5

历史记录与grep结合使用, 为了查找某个特定的命令,可以将 historygrep 结合使用。例如,查找包含 git 的命令:

history | grep git

Vim

Vim 是 Linux 环境下常用的文本编辑器之一,非常强大,功能丰富。它的前身是 vi,Vim 意为 "Vi Improved",即增强版的 vi。下面将详细介绍 Vim 的基本使用方法和常见操作。

1. Vim 的三种模式

  • 普通模式 : Vim 启动时默认的模式,用于浏览、复制、删除、粘贴等。
  • 插入模式 : 可以像普通编辑器一样输入文本。
  • 命令模式 : 用于执行保存、退出等命令。进入该模式需要在普通模式下输入 : 进入。

2. 三种模式的切换

  • 普通模式:按 Esc 回到普通模式。
  • 插入模式:在 普通模式 下按 iao 进入插入模式。
  • 命令模式:在 普通模式 下按 : 进入命令模式。

3. 启动和退出 Vim

启动 Vim 编辑器:

vim 文件名

如果文件不存在,Vim 会创建一个新的文件。

退出 Vim 有几种方式:

  • 保存并退出:在命令模式下输入 :wq,其中 w 表示写入 (保存),q 表示退出。
  • 直接退出:输入 :q,如果没有修改过文件内容则可以直接退出。
  • 强制退出:输入 :q!,不保存文件直接退出。

4. 普通模式下的操作

在普通模式下,你可以对文本进行导航、编辑和操作。

4.1 移动光标

  • h:向左移动光标。
  • j:向下移动光标。
  • k:向上移动光标。
  • l:向右移动光标。

可以在这些命令前加数字来表示移动的次数,例如 5j 会向下移动 5 行。

4.2 删除操作

  • x:删除光标所在的字符。
  • dd:删除整行。
  • d$:删除从光标位置到行尾的内容。

4.3 复制和粘贴

  • yy:复制当前行(也叫 "yank")。
  • y$:复制从光标位置到行尾的内容。
  • p:在光标后粘贴内容。
  • P:在光标前粘贴内容。

4.4 撤销与重做

  • u:撤销上一次操作。
  • Ctrl + r:重做上一次撤销的操作。

4.5 查找与替换

  • 查找:在普通模式下按 /,然后输入要查找的内容,按回车后,通过 nN 进行下一个/上一个匹配。

4.6 显示行号

  • set nu 或者 set number:行号显示

5. 插入模式下的操作

进入插入模式后可以像普通文本编辑器一样输入内容。

进入插入模式的方式有几种:

  • i:从当前光标位置开始插入。
  • I:从行首开始插入。
  • a:从光标后一个字符开始插入。
  • A:从行尾开始插入。
  • o:在当前行下面插入一行,并进入插入模式。
  • O:在当前行上面插入一行,并进入插入模式。

在插入模式下,按 Esc 键可以回到普通模式。

6. 命令模式常用命令

命令模式下可以执行文件保存、退出、查找等操作。

6.1 保存文件

  • :w:保存文件。
  • :w 文件名:另存为指定文件名。

6.2 退出 Vim

  • :q:退出 Vim。
  • :q!:强制退出,不保存文件。
  • :wqZZ:保存并退出。

6.3 查找和替换

  • :s/查找内容/替换内容/:替换当前行的第一个匹配。
  • :s/查找内容/替换内容/g:替换当前行的所有匹配。
  • :%s/查找内容/替换内容/g:替换整个文件的所有匹配。

7. Vim 配置文件

Vim 允许用户通过配置文件 .vimrc 自定义编辑体验。常见的配置选项包括:

  • 启用行号显示:set number
  • 设置自动缩进:set autoindent
  • 语法高亮:syntax on

这些配置可以在用户的主目录下 .vimrc 文件中定义,确保每次启动 Vim 时生效。

主机名与hosts

临时修改主机名:

  • 通过 hostname new-hostname 临时修改,重启后恢复原始主机名。

永久修改主机名:

  • 修改 /etc/hostname 文件中的主机名。
  • 修改 /etc/hosts 文件,确保新主机名与 IP 地址对应。
  • 使用 hostnamectl set-hostname new-hostname 可以直接永久修改。

修改 /etc/hosts 文件:

  • /etc/hosts 用于本地解析主机名,可以手动添加自定义主机名与 IP 的映射关系。
  • 该文件优先于 DNS 解析。
  • 每次修改该文件后,所有基于主机名的连接都会立即使用新的映射关系,无需重启服务或系统。
  • 确保文件格式正确,IP 地址和主机名之间至少有一个空格或 Tab 键分隔。

时间日期类命令

在Linux系统中,有许多与时间和日期相关的命令,可以用于查看、设置和操作系统的时间和日期。

1. date 命令

date 命令主要用于显示或设置系统的日期和时间。

  • 查看当前日期和时间:

    date
    

    输出格式:Thu Oct 23 10:31:52 UTC 2024

  • 自定义日期显示格式: 你可以使用 + 加上格式化字符串来自定义日期的输出。例如:

    date +"%Y-%m-%d %H:%M:%S"
    

    输出格式:2024-10-23 10:31:52

    常见的格式化选项:

    • %Y:年份(四位数,如 2024)
    • %m:月份(01-12)
    • %d:日期(01-31)
    • %H:小时(00-23,24小时制)
    • %M:分钟(00-59)
    • %S:秒(00-59)
  • 设置日期和时间(一般不使用, 需要超级用户权限):

    date -s "2024-10-23 10:31:52"
    

    这将系统的时间和日期设置为指定的值。

2. timedatectl 命令

timedatectl 是一种管理系统时间和时区的命令行工具。

  • 查看当前的系统时间、时区及相关设置:

    timedatectl
    

    输出示例:

    Local time: Wed 2024-10-23 10:31:52 UTC
    Universal time: Wed 2024-10-23 10:31:52 UTC
    RTC time: Wed 2024-10-23 10:31:52
    Time zone: Etc/UTC (UTC, +0000)
    NTP enabled: yes
    
  • 设置系统时间:

    timedatectl set-time "2024-10-23 10:31:52"
    
  • 设置系统时区:

    timedatectl set-timezone Asia/Shanghai
    
  • 启用或禁用NTP(网络时间协议)同步:

    启用NTP:

    timedatectl set-ntp true
    

    禁用NTP:

    timedatectl set-ntp false
    

3. ntpdate 命令

ntpdate 命令用于从NTP服务器同步系统时间。

同步时间到指定的NTP服务器:

ntpdate pool.ntp.org

4. cal 命令

cal 命令用于显示日历。

显示当前月份的日历:

cal

输出:

    October 2024
Su Mo Tu We Th Fr Sa
       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
  • 显示特定年份的日历:

    cal 2024
    

5. sleep 命令

sleep 命令用于暂停命令执行一段时间。

用法:

  • 暂停执行5秒:

    sleep 5
    
  • 暂停2分钟:

    sleep 2m
    

应用场景:

  • 在脚本中引入延时,例如等待某个进程完成,或者间隔执行某个任务。

6. at 命令

at 命令用于在未来的某个时间执行一次性任务。

用法:

  • 设置在下午5点执行一个任务:

    echo "echo '任务已完成'" | at 17:00
    

应用场景:

  • 在指定的时间安排任务执行,适用于非周期性任务。

用户用户组

在Linux系统中,用户管理是系统管理的一个重要组成部分。通过用户管理命令,系统管理员可以添加、删除和修改用户账号,以及设置用户组、权限等。

1. useradd - 添加用户

useradd 命令用于创建一个新的用户账号。它会在系统中创建用户并为其生成一个专属的家目录。

基本语法:

useradd [选项] 用户名

示例:

useradd testuser
  • testuser 是新创建的用户名
  • 该命令不会自动创建密码,需要单独设置

常用选项:

  • -u:设置用户ID(UID),例如 -u 1001
  • -g:指定用户所属的组,例如 -g users

2. passwd - 修改用户密码

passwd 命令用于设置或修改用户密码。普通用户可以修改自己的密码,而超级用户可以修改任何用户的密码。

基本语法:

passwd [用户名]

示例:

passwd testuser

3. usermod - 修改用户属性

usermod 命令用于修改已经存在的用户账号的属性,如用户名、用户ID、组等。

基本语法:

usermod [选项] 用户名

示例:

usermod -l newuser testuser
  • -l 选项用于修改用户名,这里将 testuser 改为 newuser

常用选项:

  • -l:修改用户名。
  • -g:修改用户的主要组。
  • -aG:将用户添加到某个组而不删除其他组的所属关系。例如 -aG sudo testuser

4. userdel - 删除用户

userdel 命令用于删除用户账号。这个命令有两种删除模式,一种是仅删除用户账号,另一种是删除账号同时删除用户的家目录。

基本语法:

userdel [选项] 用户名

示例:

userdel testuser
  • 该命令只删除用户,不会删除家目录。

常用选项:

  • -r:删除用户的同时,删除用户的家目录和邮件文件。例如 userdel -r testuser

5. groupadd - 创建用户组

groupadd 命令用于创建新的用户组,通常和 useradd 命令搭配使用。

基本语法:

groupadd [选项] 组名

示例:

groupadd developers
  • 创建一个名为 developers 的新组。

常用选项:

  • -g:指定组ID(GID)。

6. groupdel - 删除用户组

groupdel 命令用于删除用户组,删除组不会影响已经分配到该组的用户账号。

基本语法:

groupdel 组名

示例:

groupdel developers

7. groups - 查看用户所属组

groups 命令用于显示指定用户所属的所有组。如果不指定用户,则默认显示当前用户所属的组。

基本语法:

groups [用户名]

示例:

groups testuser

8. /etc/passwd - 用户信息文件

/etc/passwd 文件保存着系统中所有用户的信息。每一行对应一个用户,字段包括用户名、用户ID(UID)、组ID(GID)、家目录、默认shell等。

查看 /etc/passwd 文件:

cat /etc/passwd

/etc/passwd 每行格式:

用户名:密码占位符:用户ID:组ID:用户信息:用户家目录:登录shell

9. /etc/group - 组信息文件

/etc/group 文件保存着系统中所有组的信息。每一行包含组名、组ID、组成员等信息。

查看 /etc/group 文件:

cat /etc/group

/etc/group 每行格式:

组名:密码占位符:组ID:组成员

10. who - 查看当前登录用户

who 命令用于显示当前系统上登录的用户列表,包含登录时间、终端信息等。

示例:

who
  • 显示当前登录系统的所有用户。

11. su - 切换用户

su 命令用于切换到另一个用户账号,默认切换到超级用户(root)。如果不带任何选项,su 会打开一个新的shell会话。

基本语法:

su [选项] [用户名]

示例:

su testuser

12. sudo - 以超级用户权限执行命令

sudo 命令用于 以超级用户的权限 执行某个命令,通常用于执行涉及系统管理的任务,比如安装软件、修改系统文件等。

基本语法:

sudo [命令]

示例:

sudo useradd testuser
  • 使用超级用户权限添加 testuser

文件权限

在 Linux 系统中,文件权限是对文件或目录的访问控制机制,用来控制哪些用户或组可以读、写或执行该文件。

文件与目录的访问者有 3 种:所有者(Owner)所属组(Group)其他用户(Others)

文件与目录的权限分为 3 种:

  1. 读(r):允许查看文件内容或列出目录内容。
  2. 写(w):允许修改文件内容或在目录中创建、删除文件。
  3. 执行(x):允许执行文件(如果是可执行文件)或进入目录。

文件权限的表示

使用 ls -l 命令可以查看文件权限。权限的表示由 10 个字符组成,例如:

-rwxr-xr--

第一位表示文件类型:

  • - 表示普通文件
  • d 表示目录
  • l 表示符号链接

接下来的 9 个字符按三组排列,每组三个字符:

  1. 第一组:文件所有者(Owner)的权限
  2. 第二组:文件所属组(Group)的权限
  3. 第三组:其他用户(Others)的权限

例如,-rwxr-xr-- 表示:

  • 文件类型是普通文件
  • 文件所有者有 读(r)写(w)执行(x) 权限
  • 所属组有 读(r)执行(x) 权限
  • 其他用户只有 读(r) 权限

常用命令

1. chmod:修改文件权限

chmod 命令用于更改文件或目录的权限。可以用 符号表示法八进制表示法 来设置权限。

符号表示法

chmod [who][operator][permissions] 文件名
  • who:表示权限应用于谁,u 表示用户(owner),g 表示组,o 表示其他人,a 表示所有人。
  • operator+ 表示增加权限,- 表示移除权限,= 表示直接赋予权限。
  • permissionsr 表示读,w 表示写,x 表示执行。

示例:

chmod u+x 文件名    # 给文件所有者增加执行权限
chmod g-w 文件名    # 移除组用户的写权限
chmod a=r 文件名    # 所有用户只能读文件
chmod u+rwx, g+rx, o+rx 文件名    #实现了与 chmod 755 myfile 相同的效果

八进制表示法: 在八进制表示法中,每种权限对应一个数字:

  • r = 4
  • w = 2
  • x = 1
  • 没有权限则为 0

然后将这些值相加,每一组权限用一个数字表示,分别为所有者、组、其他用户的权限。

示例:

chmod 755 文件名    # 权限设置为:所有者可读写执行,组和其他用户可读和执行
chmod 644 文件名    # 权限设置为:所有者可读写,组和其他用户可读

授权脚本文件:要运行一个脚本文件,必须赋予执行权限:

chmod +x script.sh

2. chown:修改文件的所有者和组

chown 命令用于改变文件的所有者和组。

用法:

chown [所有者][:[组]] 文件名

示例:

chown user 文件名			# 改变文件的所有者为 user
chown user:group 文件名	# 改变文件的所有者为 user,并将组改为 group

3. chgrp:修改文件所属组

chgrp 命令专门用于改变文件或目录的所属组。

用法:

chgrp 组名 文件名

示例:

chgrp group 文件名    # 将文件的所属组改为 group

搜索查找类命令

1. find 命令

语法

find [搜索路径] [匹配条件] [操作]

常用示例

查找指定目录下的所有文件:

find /path/to/directory

这会列出 /path/to/directory 目录下的所有文件和子目录。

按文件名查找文件:

find /path/to/directory -name "filename"

使用 -name 选项可以根据文件名查找文件,支持通配符如 *.txt , *西游*.txt

只搜索文件:

find /wwjfiles/ -type f -name "*jar*"

按大小查找文件:

find /path/to/directory -size +100M

查找大于 100MB 的文件。

按时间查找文件:

find /path/to/directory -mtime -7

查找最近 7 天内修改过的文件。-mtime 用于基于修改时间查找文件。

2. grep 命令

grep 是用于在文件中搜索文本内容的命令,主要用于查找文件中包含某些特定模式的行。

语法

grep [选项] "搜索内容" [文件]

常用示例

在文件中查找特定字符串:

grep "pattern" filename

filename 文件中查找包含 pattern 字符串的行。

正则搜索:

grep "test[0-9]" filename

搜索文件中包含 "test" 后跟一个数字(0-9)的行。

递归查找目录中的字符串:

grep -r "pattern" /path/to/directory

在指定目录下递归搜索包含 pattern 的文件。

忽略大小写查找:

grep -i "pattern" filename

使用 -i 选项忽略大小写,查找匹配 pattern 的行。

显示行号:

grep -n "pattern" filename

使用 -n 选项可以显示匹配行的行号。

只显示匹配的文件名:

grep -l "pattern" /path/to/directory/*

使用 -l 只输出包含匹配内容的文件名,而不是内容本身。

3. 管道符与 grep 的结合

grep 常与其他命令结合使用。比如过滤 ls 的输出:

ll | grep ".txt"

此命令表示: 先执行ll, 会列出当前目录下的文件, 再将结果交给 grep ".txt" 处理, 会列出当前目录下所有 .txt 文件。

4. locate 命令

locate 是一个快速查找文件的命令,基于预建的文件数据库,比 find 更加高效,但数据库需要定期更新。

语法

locate [文件名]

常用示例

查找文件:

locate filename

该命令会在数据库中搜索包含 filename 的文件。

更新 locate 数据库:

updatedb

使用 locate 查找文件之前,需要定期运行 updatedb 来更新文件数据库。

5. which 命令

which 用于查找 可执行文件 的位置,通常用于查找命令的实际路径。

语法

which [命令]

常用示例

查找命令路径:

which ls

查找

ls

命令的可执行文件路径。

6. whereis 命令

whereis 用于定位二进制文件、源代码和手册页的位置。

语法

whereis [命令]

常用示例

查找命令的二进制、源代码和手册页:

whereis docker

该命令会输出命令的二进制文件、源代码和手册页的路径:

docker: /usr/bin/docker /etc/docker /usr/libexec/docker /usr/share/man/man1/docker.1.gz

7. ps 命令

ps 命令用于显示当前系统中的进程,可以与搜索命令结合使用。

查找某个进程:

ps aux | grep "process_name"

列出所有进程并通过 grep 查找包含 process_name 的进程。

8. sed 命令

sed 是一个流编辑器,主要用于文本替换、删除和查找。

查找并替换文本:

sed 's/old_pattern/new_pattern/g' filename

在 filename 文件中将所有的 old_pattern 替换为 new_pattern。

使用 sed 命令进行文本替换时,默认情况下操作不会直接保存到原文件,而是将替换后的内容输出到终端。如果你想将替换结果保存到原文件,必须使用 -i(in-place)选项。

直接修改文件并保存的方法:

sed -i 's/old_pattern/new_pattern/g' filename

如果担心操作有误并希望保留原文件的备份,可以在 -i 后面加上一个后缀名,sed 会自动保存原文件的备份:

sed -i.bak 's/old_pattern/new_pattern/g' filename

这会生成一个 filename.bak 的备份文件,原文件会被替换为新内容

压缩与解压缩命令

常见的压缩格式

  1. .zip:压缩和归档的文件格式,支持直接压缩文件。
  2. .tar:归档格式,可以将多个文件打包成一个文件,但不进行压缩。
  3. .gz:使用Gzip进行压缩,通常与.tar结合使用,形成.tar.gz.tgz文件。
  4. .bz2:使用Bzip2进行压缩,通常与.tar结合使用,形成.tar.bz2文件。
  5. .xz:使用XZ算法进行压缩,通常与.tar结合使用,形成.tar.xz文件。

1. zipunzip 命令

zip 是用于压缩多个文件和目录的工具,并将其打包到一个 .zip 文件中。

压缩文件

zip -r archive_name.zip /path/to/directory
  • -r:递归地压缩目录及其内容

解压缩文件

unzip archive_name.zip

2. tar 命令

tar(Tape Archive)是用于将多个文件打包成一个文件的工具,它本身不进行压缩,但可以与其他工具(如 gzipbzip2)结合使用来实现压缩。

压缩文件

将文件打包并压缩为 .tar.gz 格式:

tar -czvf archive_name.tar.gz /path/to/directory
  • c:创建一个新的归档文件
  • z:通过 gzip 压缩
  • v:显示详细信息
  • f:指定文件名

解压缩文件

解压缩 .tar.gz 格式的文件:

tar -xzvf archive_name.tar.gz
  • x:提取归档文件
  • z:解压缩
  • v:显示详细信息
  • f:指定归档文件名

3. gzip 命令

gzip 是一种文件压缩工具,通常用于压缩单个文件。gzip 比较底层, 不常用。

压缩文件

gzip filename

这会将 filename 文件压缩为 filename.gz,原文件会被删除。使用 -k 选项以保留原文件,例如 gzip -k filename

解压缩文件

gzip -d filename.gz

或者使用 gunzip 命令:

gunzip filename.gz

4. bzip2 命令

bzip2 是另一种文件压缩工具,通常可以压缩得比 gzip 更小。

压缩文件

bzip2 filename

这会将 filename 文件压缩为 filename.bz2,原文件会被删除。使用 -k 选项以保留原文件,例如 bzip2 -k filename

解压缩文件

bzip2 -d filename.bz2

或者使用 bunzip2 命令:

bunzip2 filename.bz2

磁盘分区类命令

df 命令

df 用于显示文件系统的磁盘使用情况,包括已用空间和可用空间。

常用参数:

  • -h:以人类可读的格式显示(例如,GB、MB)
  • -T:显示文件系统类型

示例:查看文件系统磁盘使用情况

df -hT

输出内容包括挂载点、文件系统类型、已用空间、可用空间等信息。

du 命令

du 用于查看特定目录或文件的磁盘使用情况。

常用参数:

  • -h:以人类易读的格式显示。
  • -a:统计结果显示文件。
  • -s:只显示总计。
  • --max-depth=N:限制显示的目录深度,N为目录层级。
# 查看当前目录的大小
du -h

# 查看当前目录及其子目录的总计大小
du -h --max-depth=1

# 查看/wwjfiles目录的存储情况
du -ha --max-depth=1 /wwjfiles
6.7M    /wwjfiles/static
2.3M    /wwjfiles/test.txt
17M     /wwjfiles/jars
26M     /wwjfiles

输出示例

6.7M    /wwjfiles/static
17M     /wwjfiles/jars
26M     /wwjfiles/

fdisk 命令

fdisk 是一个用于管理磁盘分区的交互式命令行工具,适用于 MBR(主引导记录)分区表。常见操作包括创建、删除、调整和查看分区。

常用参数:

  • -l:列出所有分区
  • /dev/sdX:指定目标磁盘(例如,/dev/sda

示例:查看磁盘分区

fdisk -l

该命令列出系统中所有磁盘和分区的信息,包括分区大小、文件系统类型等。

示例:管理分区

fdisk /dev/sda

进入交互模式后,输入以下指令:

  • n:新建分区
  • d:删除分区
  • p:显示分区表
  • w:保存并退出

磁盘挂载

磁盘挂载是指将一个磁盘分区或存储设备(如硬盘、U盘等)关联到系统中的某个目录,使用户和系统可以通过该目录访问和管理该设备上的数据。

1. 查看磁盘和分区信息

在挂载前,需要查看当前系统的磁盘情况,可以使用以下命令:

lsblk

该命令会列出所有块设备(包括分区)及其挂载位置。

fdisk -l

fdisk -l用于列出系统中的所有分区和详细信息,特别适合检查分区表。

2. 创建挂载点

挂载点是一个目录,设备的内容会通过该目录进行访问。一般可以在/mnt/media下创建一个新的目录作为挂载点,例如挂载一个新硬盘分区:

mkdir /mnt/mydisk

3. 挂载磁盘

使用mount命令将分区挂载到指定的挂载点。

mount /dev/sdXn /mnt/mydisk
  • /dev/sdXn/dev/sdX指的是磁盘设备名称,X为设备的标识(如sdasdb等),n为分区号(如12等)。
  • /mnt/mydisk:刚才创建的挂载点。

例如,如果想挂载设备/dev/sdb1,可以执行:

mount /dev/sdb1 /mnt/mydisk

挂载完成后,/mnt/mydisk目录中将显示分区/dev/sdb1的内容。

4. 自动挂载配置

如果希望设备在系统启动时自动挂载,需要编辑/etc/fstab文件,将该设备的挂载信息写入其中。

编辑/etc/fstab
  1. 打开文件:使用喜欢的编辑器编辑/etc/fstab文件,例如使用vim

    vim /etc/fstab
    
  2. 添加挂载配置项,格式如下:

    /dev/sdXn    /mnt/mydisk    文件系统类型    挂载选项    0    0
    

    例如,如果/dev/sdb1是一个ext4文件系统,可以添加如下配置:

    /dev/sdb1    /mnt/mydisk    ext4    defaults    0    0
    
  3. 保存并关闭文件。下次系统启动时会自动挂载/dev/sdb1/mnt/mydisk

5. 卸载磁盘

使用umount命令可以卸载已经挂载的磁盘。

umount /mnt/mydisk

注意:卸载前需确保挂载点中的文件或程序没有正在被使用。

6. 常用挂载选项

/etc/fstab中或者mount命令中可以使用一些挂载选项,例如:

  • defaults:默认的挂载选项,包含了rw(读写),suid(支持SUID),dev(解释设备文件),exec(执行文件),auto(自动挂载),nouser(只有root可以卸载),async(异步)等。
  • ro:只读挂载。
  • noexec:禁止在该分区中执行二进制文件。
  • nosuid:禁止SUID和SGID。
  • nodev:不解释设备文件。

例如,挂载只读文件系统可以用如下命令:

mount -o ro /dev/sdb1 /mnt/mydisk

进程线程类命令

ps —— 查看进程信息

ps 用于显示当前系统中进程的快照。常用参数包括:

# 显示所有进程的信息,包括用户、进程ID、CPU、内存使用率等
ps aux

# 显示所有进程的详细信息,以树状结构展示进程关系
ps -ef
  • a:显示与当前终端有关的所有进程。
  • u:以用户为主的信息显示。
  • x:显示没有控制终端的进程。

例如,ps aux | grep nginx 可以查看与 nginx 相关的所有进程。

top —— 动态查看系统中的进程

top 命令动态显示进程状态信息,可以实时查看 CPU、内存的占用情况。常用快捷键有:

  • P:按照 CPU 使用率排序。
  • M:按照内存使用率排序。
  • k:终止某个进程,需要输入进程 ID。
  • q:退出 top 命令界面。

启动 top

# 实时监控系统进程
top

htop —— top 命令的增强版

htoptop 命令的增强版,界面更加友好,支持上下箭头操作选择进程,便于进程管理。但需要安装:

# 启动 htop
htop

pidof —— 获取进程的 PID

pidof 可以通过进程名称获取进程 ID。

# 获取 nginx 的进程 ID
pidof nginx

这个命令在自动化脚本中经常使用,可以根据进程 ID 进行进一步操作。

killkillall —— 终止进程

kill:用于结束指定进程 ID 的进程。通常和 pspidof 搭配使用。

# 强制结束进程 ID 为 1234 的进程
kill -9 1234

killall:可以根据进程名结束所有匹配的进程。

# 终止所有 nginx 进程
killall nginx

-9 参数表示强制终止进程,仅在无法正常终止进程时使用

pstack —— 查看进程的堆栈信息

pstack 命令可以显示进程的堆栈信息,适合分析进程死锁、卡死等问题。

# 显示进程 ID 为 1234 的堆栈信息
pstack 1234

strace —— 跟踪进程的系统调用

strace 可以跟踪进程执行期间的所有系统调用,适用于调试程序、分析错误。

# 跟踪进程 ID 为 1234 的系统调用
strace -p 1234

也可以用于启动新进程并跟踪其系统调用:

# 跟踪 ls 命令的系统调用
strace ls

lsof —— 列出进程打开的文件

lsof 命令用于显示进程打开的文件(包括设备、网络连接等)。在 Unix/Linux 系统中,文件描述符、设备等都是文件,这个命令在检查资源占用方面非常有用。

# 列出进程 ID 为 1234 的进程所打开的文件
lsof -p 1234

# 列出哪个进程正在使用指定文件
lsof /path/to/file

nicerenice —— 调整进程优先级

nice:启动新进程时设置其优先级,优先级范围为 -20(最高优先级)到 19(最低优先级)。

# 启动命令并设置优先级为 10
nice -n 10 command

renice:调整运行中进程的优先级。

# 将进程 ID 为 1234 的优先级调整为 5
renice -n 5 -p 1234

bgfg —— 后台/前台进程管理

  • bg:将进程放入后台继续运行。
  • fg:将后台运行的进程调回前台。

例如,执行一个程序并使之在后台运行:

# 后台运行脚本
./script.sh &

可以使用 jobs 查看后台进程编号,然后使用 fg %编号 将进程调回前台。

jobs —— 显示当前 shell 的后台任务

jobs 命令列出当前终端会话的所有后台任务和状态。

# 查看当前会话的后台任务
jobs

pgrep —— 根据进程名查找进程 ID

pgrep 命令类似于 pidof,可以根据部分进程名称查找进程 ID。

# 查找 nginx 进程 ID
pgrep nginx

# 查找所有名称包含 java 的进程,并显示进程名
pgrep -l java

系统定时任务命令

在 Linux 中,系统定时任务的管理工具主要有 cronat。这些工具允许用户在指定的时间自动执行任务,非常适用于定期备份、清理日志、监控系统状态等操作。

cron 命令

cron 是 Linux 中最常用的定时任务管理工具,适用于需要定期执行的任务。

crontab 文件

cron 中,定时任务的规则和命令会写入一个 crontab 文件。可以通过 crontab 命令来编辑、查看和管理。

基本命令

  • crontab -e:编辑当前用户的定时任务。
  • crontab -l:列出当前用户的所有定时任务。
  • crontab -r:删除当前用户的所有定时任务。

crontab 文件格式

每一行表示一条任务,由时间字段和命令字段组成,格式如下:

* * * * * 命令

五个 * 分别代表不同的时间单位:

  • 分钟 (0-59)
  • 小时 (0-23)
  • 日期 (1-31)
  • 月份 (1-12)
  • 星期 (0-7),07 都表示星期天

例子:

/1 * * * * /bin/echo "11" >> /wwjfiles/cron-test-file.txt

上例表示:每隔一分钟执行 /bin/echo "11" >> /wwjfiles/cron-test-file.txt 命令, 每隔一秒往文件 /wwjfiles/cron-test-file.txt 里追加写一行 11

特殊符号

  • *:任意时间匹配
  • ,:用来分隔多个值,例如 1,15,30
  • -:表示一个范围,例如 1-5
  • /:间隔执行,例如 */5 表示每5个单位执行一次

常用计划任务示例

每隔5分钟执行一次:

*/5 * * * * /path/to/command

每天晚上11点执行:

0 23 * * * /path/to/command

每周一凌晨3点执行:

0 3 * * 1 /path/to/command

系统级别的 cron 配置文件

  • /etc/crontab:系统级别的 crontab 文件,所有用户的任务都可以在这里配置。
  • /etc/cron.d/:可以在该目录中定义多个 cron 配置文件,适合不同的应用程序定时任务需求。

系统 crontab 文件的格式比用户的 crontab 多了一个字段,即用户名:

* * * * * 用户名 命令

at 命令

at 适合一次性的任务,在特定的时间执行后不会再重复。

使用方法

  1. 安装 at 命令(如果系统未安装):

    apt install at
    
  2. 使用 at 添加任务:

    at HH:MM
    

    然后输入要执行的命令,按 Ctrl+D 结束。

  3. 使用 atq 查看排队中的任务:

    atq
    
  4. 使用 atrm 删除任务:

    atrm 任务号
    

示例

例如,设置在今天下午14:00执行脚本:

at 14:00

然后在提示符下输入要执行的命令:

echo "Hello, World!"

Ctrl+D 结束。

RPM -- centos离线安装

RPM(Red Hat Package Manager)是Linux操作系统中的一种包管理系统,最初由Red Hat开发。RPM允许用户轻松安装、更新、卸载和管理软件包。它主要用于基于RPM的Linux发行版,如Red Hat、CentOS、Fedora、OpenSUSE等。

基本概念

  1. 软件包:RPM包通常以.rpm文件扩展名结尾,包含程序的可执行文件、库文件、配置文件及元数据(如版本号、依赖关系等)。
  2. 元数据:每个RPM包都包含关于包的信息,如包名、版本、发行号、摘要、描述和依赖关系等。这些信息帮助用户和系统了解如何管理包。
  3. 依赖关系:RPM包可能依赖于其他软件包,系统在安装或升级时会检查这些依赖关系,以确保所需的所有组件都存在。

基本命令

安装包

rpm -ivh package.rpm
  • -i:表示安装。
  • -v:表示详细模式,会显示安装过程。
  • -h:表示显示进度条。

升级包

rpm -Uvh package.rpm
  • -U:表示升级,如果包未安装,则进行安装。

卸载包

rpm -e package_name
  • -e:表示删除软件包。
# 卸载所有jdk相关
rpm -qa | grep jdk | xargs rpm -e --nodeps

查找并删除所有已安装的 jdk 包。

查询包

查询已安装的包:

rpm -qa

查询特定包的信息:

rpm -qi package_name

查询包的文件列表:

rpm -ql package_name

验证包

rpm -V package_name

用于检查已安装包的完整性,验证其文件是否被更改。

yum -- centos在线安装

yum(Yellowdog Updater, Modified)是一个用于在基于 RPM(Red Hat Package Manager)系统上管理软件包的命令行工具,广泛用于 CentOS、Red Hat Enterprise Linux(RHEL)和 Fedora 等 Linux 发行版。yum 可以用来安装、更新、删除软件包,并且能自动解决依赖关系。下面是对 yum 命令的详细讲解,包括常用的命令和选项。

基本用法

  1. 安装软件包

    yum install 软件包名称
    

    这个命令会从配置的仓库中下载并安装指定的软件包。

  2. 更新软件包

    yum update 软件包名称
    

    该命令会更新指定的软件包到最新版本。

  3. 升级系统

    yum update
    

    这个命令会更新系统中所有已安装的软件包。

  4. 删除软件包

    yum remove 软件包名称
    

    该命令会卸载指定的软件包。

  5. 搜索软件包

    yum search 关键字
    

    此命令会搜索包含指定关键字的软件包。

  6. 查看已安装的软件包

    yum list installed
    

    这个命令会列出所有已安装的软件包。

  7. 查看可用软件包

    yum list available
    

    此命令会列出所有可用的软件包。

  8. 查看软件包信息

    yum info 软件包名称
    

    该命令会显示指定软件包的详细信息,包括版本、大小、来源等。

  9. 清理缓存

    yum clean all
    

    该命令会清理 yum 的所有缓存,包括软件包和元数据缓存,有助于解决一些更新或安装问题。

常用选项

  • -y:自动回答“是”以确认操作,适合脚本中使用。例如:

    yum install -y 软件包名称
    
  • --assumeno:在执行操作前不提示,而是直接显示将要执行的操作。

  • --security:只更新安全漏洞相关的软件包。

  • --setopt=变量名=值:设置 yum 的选项,灵活调整其行为。

更换yum镜像地址

更换 yum 镜像地址是指将默认的 yum 软件源更改为其他镜像源,以加速软件包的下载和更新。在中国大陆,由于网络问题,官方源的速度可能较慢,通常会使用一些国内的镜像源。以下是更换 yum 镜像地址的步骤:

  1. 备份原有的 .repo 文件

    在更改任何配置文件之前,建议先备份原有的仓库配置文件,以防需要恢复。

    cp /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
    
  2. 选择镜像源

    根据你的 Linux 发行版,选择合适的镜像源。以下是一些常见的国内镜像源:

    阿里云:

    ini复制代码[base]
    name=CentOS-$releasever - Base
    baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
    gpgcheck=1
    gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-centos7
    
    [updates]
    name=CentOS-$releasever - Updates
    baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
    gpgcheck=1
    gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-centos7
    
    [extras]
    name=CentOS-$releasever - Extras
    baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
    gpgcheck=1
    gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-centos7
    

    清华大学:

    ini复制代码[base]
    name=CentOS-$releasever - Base
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-centos7
    
    [updates]
    name=CentOS-$releasever - Updates
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/updates/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-centos7
    
    [extras]
    name=CentOS-$releasever - Extras
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-centos7
    

    华为云:

    ini复制代码[base]
    name=CentOS-$releasever - Base
    baseurl=https://repo.huaweicloud.com/centos/$releasever/os/$basearch/
    gpgcheck=1
    gpgkey=https://repo.huaweicloud.com/centos/RPM-GPG-KEY
    
    [updates]
    name=CentOS-$releasever - Updates
    baseurl=https://repo.huaweicloud.com/centos/$releasever/updates/$basearch/
    gpgcheck=1
    gpgkey=https://repo.huaweicloud.com/centos/RPM-GPG-KEY
    
    [extras]
    name=CentOS-$releasever - Extras
    baseurl=https://repo.huaweicloud.com/centos/$releasever/extras/$basearch/
    gpgcheck=1
    gpgkey=https://repo.huaweicloud.com/centos/RPM-GPG-KEY
    
  3. 创建或修改 .repo 文件

    使用文本编辑器(如 vinano)创建或修改 .repo 文件。例如,如果你使用阿里云镜像源,可以执行以下命令:

    vi /etc/yum.repos.d/CentOS-Base.repo
    

    将内容替换为你选择的镜像源配置(如上述阿里云的配置)。

  4. 清理 yum 缓存

    更换源之后,建议清理 yum 缓存,以避免使用旧的缓存。

    yum clean all
    
  5. 测试新镜像源

    你可以使用以下命令测试新镜像源是否可用:

    yum repolist
    

    如果可以成功列出可用的软件包源,则表示新镜像源已成功配置。

shell

Shell 基础概述

Shell 是 Linux/Unix 系统中的一种命令行解释器,为用户提供了一个与操作系统交互的接口。常用的 Shell 有 Bash(Bourne Again Shell)、ZshKsh(Korn Shell)等。其中,Bash 是目前最流行的 Shell,也是在大多数 Linux 发行版中默认的 Shell。

Shell 脚本:

  • Shell 脚本是一种将多条 Shell 命令放在一个文件中的编程方式,可以通过该脚本自动化执行任务。
  • Shell 脚本以 .sh 作为文件后缀,头部通常声明解释器路径,例如 #!/bin/bash
  • 编写脚本后使用 chmod +x filename.sh 授权执行权限,然后用 ./filename.sh 运行。

变量

示例

#!/bin/bash

# 定义变量
name="Alice"

# 输出变量
echo "Hello, $name"

定义变量

直接通过 变量名=值 的形式定义变量,等号左右不能有空格。

name="John"  # 定义一个变量 name 并赋值为 John

使用变量

使用变量时,在变量名前加 $ 来引用变量值。

echo $name  # 输出 John

环境变量

使用 export 命令将变量声明为环境变量,使其在子进程中可用。

export name="John"

只读变量

使用 readonly 声明变量为只读。

readonly name="John"

特殊变量

Shell 中有许多内置的特殊变量,用于表示命令行参数和其他特定信息。

变量描述
$0当前脚本的文件名
$n1 1 ~ 9 , 传递给脚本或函数的第 n 个参数
$#传递给脚本的参数个数
$*以一个字符串显示所有参数
$@每个参数都是独立的字符串
$?上一条命令的返回状态(0 为成功)
$$当前 Shell 进程 ID
$!最后一个后台命令的进程 ID

运算符

算术运算符

Shell 中可以使用 let(( ))expr 进行算术运算。

a=5
b=3

# 使用 let 进行加法运算
let sum=a+b
echo "Sum is $sum"

# 使用 (( )) 进行乘法运算
result=$((a * b))
echo "Multiplication is $result"

# 使用 expr 进行减法运算
difference=$(expr $a - $b)
echo "Difference is $difference"

关系运算符

数比较操作:

# 等于
[ $a -eq $b ]
# 不等于
[ $a -ne $b ]
# 大于
[ $a -gt $b ]
# 小于
[ $a -lt $b ]
# 大于等于
[ $a -ge $b ]
# 小于等于
[ $a -le $b ]

字符串比较操作:

=:字符串相等
!=:字符串不相等
-z:字符串长度为 0
-n:字符串长度不为 0

逻辑运算符

用于条件组合,如 -a(与)、-o(或)。

# a 小于 20 且 b 大于 10
[ $a -lt 20 -a $b -gt 10 ]

条件判断

使用 if 语句

if 条件判断可以检查某些条件,并根据条件执行相应的代码。

#!/bin/bash

num=10

if [ $num -gt 5 ]; then
  echo "num 大于 5"
else
  echo "num 小于或等于 5"
fi

使用 case 语句

case 语句可以用于多分支选择判断。

#!/bin/bash

echo "输入一个选项(start/stop/restart):"
read action

case $action in
  start)
    echo "服务启动"
    ;;
  stop)
    echo "服务停止"
    ;;
  restart)
    echo "服务重启"
    ;;
  *)
    echo "无效输入"
    ;;
esac

流程控制

for 循环

#!/bin/bash

for i in {1..5}
do
  echo "当前数字是 $i"
done

while 循环

#!/bin/bash

count=1

while [ $count -le 5 ]
do
  echo "循环次数: $count"
  count=$((count + 1))
done

until 循环

until 循环直到条件为真才停止。

counter=1
until [ $counter -gt 5 ];
do
    echo "计数: $counter"
    counter=$((counter + 1))
done

从控制台读取输入

可以使用 read 命令从控制台读取输入。read命令是Bash和其他shell中最常用的读取输入的方式,可以从用户输入中读取单行数据,并将其存储在变量中。

其典型语法如下:

read [选项] 变量名

常见的选项包括:

  • -p:指定提示信息
  • -s:隐藏输入(常用于密码)
  • -n:指定读取的字符数
  • -t:指定读取输入的超时时间, 超过这个时间用户没有输入,命令会自动返回。

读取用户输入并打印

#!/bin/bash

# 提示用户输入
read -p "请输入您的名字: " name  # 读取输入存储到变量name中

# 输出用户输入
echo "您好, $name!"

隐藏输入(如密码输入)

#!/bin/bash

# 使用-s选项隐藏输入
read -sp "请输入您的密码: " password
echo
echo "您的密码已输入!"

使用-t选项设置超时

#!/bin/bash

# 设置超时时间为5秒
if read -t 5 -p "请在5秒内输入您的名字: " name; then
    echo "您好, $name!"
else
    echo "超时! 您没有输入任何内容."
fi
  • 如果你在一个脚本中使用-t选项,当用户未在指定时间内输入时,read命令会退出,并将退出状态设置为1,这使得你可以根据这个状态值进行相应的错误处理。

  • -t选项后面的时间单位为秒,可以是小数,例如-t 2.5表示2.5秒。

  • 通过使用-t选项,你可以提高脚本的用户体验,避免程序因为等待输入而无限制地挂起。

系统函数

Shell 提供了许多内置的系统函数,比如 echopwdcd 等。可以用来实现基础的文件、目录和进程操作。

  • echo:输出文本或变量的内容。
  • pwd:显示当前目录的路径。
  • cd:切换当前目录。
  • ls:列出当前目录的内容。
  • sleep:暂停一段时间。
  • date:显示系统时间和日期。
  • who:显示当前登录的用户。

自定义函数

自定义函数可以实现代码的复用和组织。通过 function 关键字定义函数,使用 函数名 调用。

#!/bin/bash

# 定义一个函数
greet() {
  echo "Hello, $1"
}

# 调用函数并传入参数
greet "Alice"

工具

cut, awk, sort, wc 等, 略...后续使用再补充