厚积薄发,静水流深~一周时间学完了linux, 记录一下
目录结构
linux中, 一切皆文件, 不同的目录存放不同用处的文件
/ (根目录)
根目录是所有其他目录的起点,整个 Linux 文件系统都挂载在 / 目录下。任何其他的文件、目录都可以通过 / 来访问。
/bin (用户二进制文件)
- 存放了系统常用的二进制可执行文件,主要是系统启动和单用户模式下所需要的命令,例如:
ls、cp、mv、rm等。 /bin下的命令必须在最小系统环境下可用,以便用户在紧急情况下仍然可以操作系统。
/sbin (系统二进制文件)
- 该目录与
/bin类似,不过这里存放的是超级用户(root)使用的系统管理程序,例如reboot、shutdown、mkfs等。 /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操作系统中,帮助命令是非常重要的工具,用于查找命令的使用方法、功能、参数等详细信息。常用的帮助命令包括man、help、info和--help选项。下面详细介绍这些命令的作用和使用方法:
man 命令
man(manual)命令用于查看Linux命令的手册页,每个命令都有详细的说明文档,涵盖了该命令的用法、参数说明、示例等。
使用方式:
man <command>
示例:
man ls
这将打开ls命令的手册,显示该命令的详细使用说明。
--help 选项
大多数Linux命令都支持--help选项,用于快速查看该命令的简要说明、常用选项和参数。这种方式适合查找某个命令的常见用法。
使用方式:
<command> --help
示例:
ls --help
这会输出ls命令的简要帮助信息,包括各个选项的作用。
help 命令
help命令主要用于查看内建shell命令的帮助信息。Linux系统中的许多命令都是内置于shell中的(如cd、echo等),有些命令无法通过man或--help查看,需要使用help命令。
使用方式:
help <shell_builtin_command>
示例:
help cd
这将显示cd(切换目录)命令的帮助信息。
info 命令
info命令是另一种查看帮助文档的方式,通常比man命令提供的信息更加详细。它支持嵌套的菜单结构,可以方便地在不同的部分之间导航。
使用方式:
info <command>
示例:
info ls
这将打开ls命令的info页面,详细描述了该命令的使用方法及相关信息。
apropos 和 whatis 命令
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
ps 和 kill 命令
在某些情况下,你可能需要手动管理服务的进程。这时候可以用 ps 和 kill 命令。
查看进程:
ps aux | grep <服务名>
终止进程:
kill <进程ID>
你可以使用 kill 命令结束某个服务的进程。
top 和 htop 命令
这些命令用于实时监控系统中的服务和进程。top 是标准的系统命令,而 htop 是 top 的一个增强版本,需要单独安装。
# 查看系统实时进程(标准)
top
# 查看系统实时进程(增强版)
htop
文件和目录类命令
pwd
pwd 是 print 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 中,mkdir 和 rmdir 是两个与目录操作相关的命令,主要用于创建和删除目录。
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.txt 和 file2.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.txt 和 file2.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 --了解
cat、more 和 less 是 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 环境中有所不同(比如bash和sh之间的差异)。- 如果要输出包含特殊字符的文本(比如
$或\),建议使用双引号或单引号以避免 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结合使用, 为了查找某个特定的命令,可以将 history 与 grep 结合使用。例如,查找包含 git 的命令:
history | grep git
Vim
Vim 是 Linux 环境下常用的文本编辑器之一,非常强大,功能丰富。它的前身是 vi,Vim 意为 "Vi Improved",即增强版的 vi。下面将详细介绍 Vim 的基本使用方法和常见操作。
1. Vim 的三种模式
- 普通模式 : Vim 启动时默认的模式,用于浏览、复制、删除、粘贴等。
- 插入模式 : 可以像普通编辑器一样输入文本。
- 命令模式 : 用于执行保存、退出等命令。进入该模式需要在普通模式下输入
:进入。
2. 三种模式的切换
- 普通模式:按
Esc回到普通模式。 - 插入模式:在
普通模式下按i、a、o进入插入模式。 - 命令模式:在
普通模式下按:进入命令模式。
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 查找与替换
- 查找:在普通模式下按
/,然后输入要查找的内容,按回车后,通过n和N进行下一个/上一个匹配。
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!:强制退出,不保存文件。:wq或ZZ:保存并退出。
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 种:
- 读(r):允许查看文件内容或列出目录内容。
- 写(w):允许修改文件内容或在目录中创建、删除文件。
- 执行(x):允许执行文件(如果是可执行文件)或进入目录。
文件权限的表示
使用 ls -l 命令可以查看文件权限。权限的表示由 10 个字符组成,例如:
-rwxr-xr--
第一位表示文件类型:
-表示普通文件d表示目录l表示符号链接
接下来的 9 个字符按三组排列,每组三个字符:
- 第一组:文件所有者(Owner)的权限
- 第二组:文件所属组(Group)的权限
- 第三组:其他用户(Others)的权限
例如,-rwxr-xr-- 表示:
- 文件类型是普通文件
- 文件所有者有 读(r)、写(w) 和 执行(x) 权限
- 所属组有 读(r) 和 执行(x) 权限
- 其他用户只有 读(r) 权限
常用命令
1. chmod:修改文件权限
chmod 命令用于更改文件或目录的权限。可以用 符号表示法 或 八进制表示法 来设置权限。
符号表示法:
chmod [who][operator][permissions] 文件名
who:表示权限应用于谁,u表示用户(owner),g表示组,o表示其他人,a表示所有人。operator:+表示增加权限,-表示移除权限,=表示直接赋予权限。permissions:r表示读,w表示写,x表示执行。
示例:
chmod u+x 文件名 # 给文件所有者增加执行权限
chmod g-w 文件名 # 移除组用户的写权限
chmod a=r 文件名 # 所有用户只能读文件
chmod u+rwx, g+rx, o+rx 文件名 #实现了与 chmod 755 myfile 相同的效果
八进制表示法: 在八进制表示法中,每种权限对应一个数字:
r= 4w= 2x= 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 的备份文件,原文件会被替换为新内容
压缩与解压缩命令
常见的压缩格式
.zip:压缩和归档的文件格式,支持直接压缩文件。.tar:归档格式,可以将多个文件打包成一个文件,但不进行压缩。.gz:使用Gzip进行压缩,通常与.tar结合使用,形成.tar.gz或.tgz文件。.bz2:使用Bzip2进行压缩,通常与.tar结合使用,形成.tar.bz2文件。.xz:使用XZ算法进行压缩,通常与.tar结合使用,形成.tar.xz文件。
1. zip 和 unzip 命令
zip 是用于压缩多个文件和目录的工具,并将其打包到一个 .zip 文件中。
压缩文件
zip -r archive_name.zip /path/to/directory
-r:递归地压缩目录及其内容
解压缩文件
unzip archive_name.zip
2. tar 命令
tar(Tape Archive)是用于将多个文件打包成一个文件的工具,它本身不进行压缩,但可以与其他工具(如 gzip 或 bzip2)结合使用来实现压缩。
压缩文件
将文件打包并压缩为 .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为设备的标识(如sda、sdb等),n为分区号(如1、2等)。/mnt/mydisk:刚才创建的挂载点。
例如,如果想挂载设备/dev/sdb1,可以执行:
mount /dev/sdb1 /mnt/mydisk
挂载完成后,/mnt/mydisk目录中将显示分区/dev/sdb1的内容。
4. 自动挂载配置
如果希望设备在系统启动时自动挂载,需要编辑/etc/fstab文件,将该设备的挂载信息写入其中。
编辑/etc/fstab
-
打开文件:使用喜欢的编辑器编辑
/etc/fstab文件,例如使用vim:vim /etc/fstab -
添加挂载配置项,格式如下:
/dev/sdXn /mnt/mydisk 文件系统类型 挂载选项 0 0例如,如果
/dev/sdb1是一个ext4文件系统,可以添加如下配置:/dev/sdb1 /mnt/mydisk ext4 defaults 0 0 -
保存并关闭文件。下次系统启动时会自动挂载
/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 命令的增强版
htop 是 top 命令的增强版,界面更加友好,支持上下箭头操作选择进程,便于进程管理。但需要安装:
# 启动 htop
htop
pidof —— 获取进程的 PID
pidof 可以通过进程名称获取进程 ID。
# 获取 nginx 的进程 ID
pidof nginx
这个命令在自动化脚本中经常使用,可以根据进程 ID 进行进一步操作。
kill 和 killall —— 终止进程
kill:用于结束指定进程 ID 的进程。通常和 ps 或 pidof 搭配使用。
# 强制结束进程 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
nice 和 renice —— 调整进程优先级
nice:启动新进程时设置其优先级,优先级范围为 -20(最高优先级)到 19(最低优先级)。
# 启动命令并设置优先级为 10
nice -n 10 command
renice:调整运行中进程的优先级。
# 将进程 ID 为 1234 的优先级调整为 5
renice -n 5 -p 1234
bg 和 fg —— 后台/前台进程管理
bg:将进程放入后台继续运行。fg:将后台运行的进程调回前台。
例如,执行一个程序并使之在后台运行:
# 后台运行脚本
./script.sh &
可以使用 jobs 查看后台进程编号,然后使用 fg %编号 将进程调回前台。
jobs —— 显示当前 shell 的后台任务
jobs 命令列出当前终端会话的所有后台任务和状态。
# 查看当前会话的后台任务
jobs
pgrep —— 根据进程名查找进程 ID
pgrep 命令类似于 pidof,可以根据部分进程名称查找进程 ID。
# 查找 nginx 进程 ID
pgrep nginx
# 查找所有名称包含 java 的进程,并显示进程名
pgrep -l java
系统定时任务命令
在 Linux 中,系统定时任务的管理工具主要有 cron 和 at。这些工具允许用户在指定的时间自动执行任务,非常适用于定期备份、清理日志、监控系统状态等操作。
cron 命令
cron 是 Linux 中最常用的定时任务管理工具,适用于需要定期执行的任务。
crontab 文件
在 cron 中,定时任务的规则和命令会写入一个 crontab 文件。可以通过 crontab 命令来编辑、查看和管理。
基本命令
crontab -e:编辑当前用户的定时任务。crontab -l:列出当前用户的所有定时任务。crontab -r:删除当前用户的所有定时任务。
crontab 文件格式
每一行表示一条任务,由时间字段和命令字段组成,格式如下:
* * * * * 命令
五个 * 分别代表不同的时间单位:
- 分钟 (0-59)
- 小时 (0-23)
- 日期 (1-31)
- 月份 (1-12)
- 星期 (0-7),
0和7都表示星期天
例子:
/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 适合一次性的任务,在特定的时间执行后不会再重复。
使用方法
-
安装
at命令(如果系统未安装):apt install at -
使用
at添加任务:at HH:MM然后输入要执行的命令,按
Ctrl+D结束。 -
使用
atq查看排队中的任务:atq -
使用
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等。
基本概念
- 软件包:RPM包通常以
.rpm文件扩展名结尾,包含程序的可执行文件、库文件、配置文件及元数据(如版本号、依赖关系等)。 - 元数据:每个RPM包都包含关于包的信息,如包名、版本、发行号、摘要、描述和依赖关系等。这些信息帮助用户和系统了解如何管理包。
- 依赖关系: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 命令的详细讲解,包括常用的命令和选项。
基本用法
-
安装软件包
yum install 软件包名称这个命令会从配置的仓库中下载并安装指定的软件包。
-
更新软件包
yum update 软件包名称该命令会更新指定的软件包到最新版本。
-
升级系统
yum update这个命令会更新系统中所有已安装的软件包。
-
删除软件包
yum remove 软件包名称该命令会卸载指定的软件包。
-
搜索软件包
yum search 关键字此命令会搜索包含指定关键字的软件包。
-
查看已安装的软件包
yum list installed这个命令会列出所有已安装的软件包。
-
查看可用软件包
yum list available此命令会列出所有可用的软件包。
-
查看软件包信息
yum info 软件包名称该命令会显示指定软件包的详细信息,包括版本、大小、来源等。
-
清理缓存
yum clean all该命令会清理
yum的所有缓存,包括软件包和元数据缓存,有助于解决一些更新或安装问题。
常用选项
-
-y:自动回答“是”以确认操作,适合脚本中使用。例如:yum install -y 软件包名称 -
--assumeno:在执行操作前不提示,而是直接显示将要执行的操作。 -
--security:只更新安全漏洞相关的软件包。 -
--setopt=变量名=值:设置yum的选项,灵活调整其行为。
更换yum镜像地址
更换 yum 镜像地址是指将默认的 yum 软件源更改为其他镜像源,以加速软件包的下载和更新。在中国大陆,由于网络问题,官方源的速度可能较慢,通常会使用一些国内的镜像源。以下是更换 yum 镜像地址的步骤:
-
备份原有的
.repo文件在更改任何配置文件之前,建议先备份原有的仓库配置文件,以防需要恢复。
cp /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ -
选择镜像源
根据你的 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 -
创建或修改
.repo文件使用文本编辑器(如
vi或nano)创建或修改.repo文件。例如,如果你使用阿里云镜像源,可以执行以下命令:vi /etc/yum.repos.d/CentOS-Base.repo将内容替换为你选择的镜像源配置(如上述阿里云的配置)。
-
清理
yum缓存更换源之后,建议清理
yum缓存,以避免使用旧的缓存。yum clean all -
测试新镜像源
你可以使用以下命令测试新镜像源是否可用:
yum repolist如果可以成功列出可用的软件包源,则表示新镜像源已成功配置。
shell
Shell 基础概述
Shell 是 Linux/Unix 系统中的一种命令行解释器,为用户提供了一个与操作系统交互的接口。常用的 Shell 有 Bash(Bourne Again Shell)、Zsh、Ksh(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 | 当前脚本的文件名 |
$n | 如 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 提供了许多内置的系统函数,比如 echo、pwd、cd 等。可以用来实现基础的文件、目录和进程操作。
echo:输出文本或变量的内容。pwd:显示当前目录的路径。cd:切换当前目录。ls:列出当前目录的内容。sleep:暂停一段时间。date:显示系统时间和日期。who:显示当前登录的用户。
自定义函数
自定义函数可以实现代码的复用和组织。通过 function 关键字定义函数,使用 函数名 调用。
#!/bin/bash
# 定义一个函数
greet() {
echo "Hello, $1"
}
# 调用函数并传入参数
greet "Alice"
工具
cut, awk, sort, wc 等, 略...后续使用再补充