虚拟机管理
1,虚拟机克隆
安装好的虚拟机本质上是一个文件或者文件夹,虚拟机克隆可以通过
方式 1,直接拷贝一份安装好的虚拟机文件
方式 2,使用 vmware 的克隆操作,注意, 克隆时,需要先关闭 linux 系统
2,虚拟机快照
如果你在使用虚拟机系统的时候(比如 linux),你想回到原先的某一个状态,也就是说你担心可能有些误操作造成系
统异常,需要回到原先某个正常运行的状态,vmware 也提供了这样的功能,就叫快照管理 。
可以实现的方面
优点和场景
灵活切换:大多数主流的虚拟机软件(如 VMware Workstation、VirtualBox 等)都提供了方便的快照管理功能,用户可以在已创建的快照列表中选择并切换到特定的快照。这使得用户可以在不同的系统状态之间来回切换,例如从当前出现问题的系统状态快速切换回一个已知稳定的系统配置状态。
恢复场景:无论是进行软件测试、系统配置尝试还是学习实验,当操作导致系统出现故障、不稳定或者只是想回到之前的某个工作阶段时,都可以通过选择相应的快照来恢复系统到该快照所代表的状态。
存在的限制
依赖软件和配置:虽然可以进行快照切换,但这依赖于虚拟机软件的正常运行以及快照的完整性。如果虚拟机软件出现故障,或者快照文件损坏,可能会导致无法正常切换或者切换后系统不稳定的情况。
资源占用:大量的快照可能会占用较多的磁盘空间,并且在切换过程中,虚拟机软件需要对磁盘数据进行读取、写入和整理等操作,如果计算机的硬件资源(如内存、硬盘读写速度等)有限,可能会导致切换过程缓慢或者失败。
3,虚拟机迁移与删除
虚拟系统安装好了,它的本质就是文件(放在文件夹的)。因此虚拟系统的迁移很方便,你可以把安装好的虚拟系统这个文件夹整体拷贝或者剪切到另外位置使用。
Linux 实操篇
Linux 实操篇-开机、重启和用户登录注销
关机&重启命令
基本介绍
-
shutdown –h now 立该进行关机
-
shudown -h 1 “hello, 1 分钟后会关机了” 3) shutdown –r now 现在重新启动计算机
-
halt 关机,作用和上面一样.
-
reboot 现在重新启动计算机
-
sync 把内存的数据同步到磁盘.
注意细节
- 不管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据写到磁盘中
- 目前的 shutdown/reboot/halt 等命令均已经在关机前进行了 sync ,
用户登录和注销
基本介绍
-
登录时尽量少用 root 帐号登录,因为它是系统管理员,最大的权限,避免操作失误。可以利用普通用户登录,登录
后再用”su - 用户名’命令来切换成系统管理员身份. -
在提示符下输入 logout 即可注销用户
使用细节
-
logout 注销指令在图形运行级别无效,在运行级别 3 下有效.
-
运行级别这个概念,后面给大家介绍
用户管理;用户和用户组
用户管理
增加用户
useradd
useradd 用户名
应用案例
案例 1:添加一个用户 milan, 默认该用户的家目录在 /home/milan
细节说明
- 当创建用户成功后,会自动的创建和用户同名的家目录
也可以通过 useradd -d 指定目录 新的用户名,给新创建的用户指定家目录
用户密码
给 milan 指定密码
passwd milan
补充,显示当前用户所在的目录 pwd
修改密码
passwd
删除用户
userdel
删除用户 milan,但是要保留家目录, userdel milan
userdel -r
删除用户以及用户主目录, 比如 tom, userdel -r tom
一般情况下,我们建议保留
查看当前用户,查询用户
查询用户
基本语法
id 用户名
当用户不存在时,返回无此用户
查询当前用户
whoami/ who am I
用户切换
su
su - 切换用户名
su jack
切换到 root 用户:
1,sudo su -
2,su - (需要输入root密码)
细节说明
-
从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。
-
当需要返回到原来用户时,使用 exit/logout 指令
exit
用于退出当前的 shell 环境。这个 shell 环境可以是登录 shell(直接登录系统时进入的 shell),也可以是非登录 shell(在登录后执行命令或脚本启动的新 shell 环境)。
当在一个脚本中使用exit时,它可以用来终止脚本的执行,并返回一个状态码给调用这个脚本的父进程。例如:
bash
#!/bin/bash
echo "This is a script"
exit 0
这里exit 0表示脚本正常结束,0是状态码。
logout
主要用于退出登录 shell,即当用户完成系统操作后,使用logout来结束登录会话,关闭当前的终端登录。
它是专门针对登录 shell 设计的退出命令,在非登录 shell 中使用logout命令通常会提示错误,例如:bash: logout: not login shell。
给用户添加root权限
将用户添加到 sudo 组
在大多数现代 Linux 发行版中,sudo
组的成员默认具有 sudo
权限。你可以通过将用户添加到 sudo
组来赋予其 root
权限。
-
切换到
root
用户(如果当前不是root
用户):sudo su -
-
将用户添加到
sudo
组:usermod -aG sudo username
其中
username
是你要赋予root
权限的用户名。 -
验证用户是否已添加到
sudo
组:groups username
将用户添加到 /etc/sudoers 文件中。
如果你需要更细粒度的控制,可以手动编辑 /etc/sudoers
文件来赋予用户 root
权限。
-
切换到
root
用户(如果当前不是root
用户):sudo su -
-
使用
visudo
命令编辑/etc/sudoers
文件:visudo
-
在文件中添加一行来赋予用户
root
权限:username ALL=(ALL:ALL) ALL ## Allow root to run any commands anywhere root ALL=(ALL) ALL Yfj ALL=(ALL) NOPASSWD: ALL 设置免密登录 Yfj ALL=(ALL) NOPASSWD: ALL
其中
username
是你要赋予root
权限的用户名。
用户组管理
新增组
groupadd
删除组
groupdel
将用户添加到指定组;增加用户时直接上组
增加用户时直接加上组
-
指令(基本语法) : useradd –g 用户组 用户名
-
增加一个用户 zwj, 直接将他指定到 wudang
-
groupadd wudang
-
useradd -g wudang zwj
修改用户组
指令(基本语法):usermod –g 用户组 用户名
案例演示
创建一个组 mojiao
把 zwj 放入到 mojiao
指令: usermod -g mojiao zwj
用户组相关文件
/etc/passwd 文件
用户(user)的配置文件,记录用户的各种信息
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录 Shell
/etc/shadow 文件
口令的配置文件
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group 文件
组(group)的配置文件,记录 Linux 包含的组的信息
每行含义:组名:口令:组标识号:组内用户列表
运行级别
运行级别的分类
0:
系统停机状态。此级别下,系统将关闭所有进程,关闭硬件,实现关机操作。
1(或 s、S):
单用户模式。在此模式下,只有系统管理员(root)可以登录系统,系统只启动最基本的服务,常用于系统维护、修复等操作。例如,当系统出现严重故障无法正常启动时,可以进入单用户模式进行故障排查和修复。
2:
多用户模式,无网络文件系统(NFS)支持。此运行级别允许多个用户登录系统,但不启动与网络文件系统相关的服务。
3:
完全多用户模式。这是最常用的运行级别之一,系统启动所有多用户模式下的服务,支持多个用户同时登录系统进行操作,并且启动网络服务,但不启动图形化界面相关的服务。
4:
未定义的保留运行级别。通常情况下,此级别没有被系统默认定义使用方式,用户可以根据需要自定义该级别下的服务启动情况。
5:
多用户模式且带有图形化界面(X11)。在这个运行级别下,系统在多用户的基础上启动图形化用户界面,提供图形化的操作环境,方便用户进行操作。
6:
系统重启。此级别会使系统重新启动,关闭所有当前运行的进程,然后重新初始化系统。
二、查看和切换运行级别
查看当前运行级别:
使用runlevel命令可以查看当前系统所处的运行级别。例如:
查看当前运行级别:
使用runlevel命令可以查看当前系统所处的运行级别。例如:
$ runlevel
N 3
这里N表示之前没有运行级别(通常是系统刚启动时),3表示当前运行级别是 3。
切换运行级别:
可以使用init命令来切换运行级别。例如,要从当前运行级别切换到单用户模式,可以执行:
$ sudo init 1
需要注意的是,在切换运行级别时,可能需要管理员权限(使用sudo),并且不同的运行级别切换可能会导致系统服务的启动或停止,从而影响正在运行的程序。
文件目录
查找文件
ls命令
列出当前目录的内容:
ls
列出指定目录的内容:
ls /path/to/directory
常用选项
显示详细信息:
ls -l
输出格式包括文件权限、链接数、所有者、组、文件大小、最后修改时间和文件名。
显示隐藏文件:
ls -a
显示所有文件,包括以 . 开头的隐藏文件。
结合详细信息和隐藏文件:
ls -la
或者 ls -al
递归列出子目录内容:
ls -R
递归列出当前目录及其子目录的内容。
以人类可读的方式显示文件大小:
ls -lh
结合 -l 选项,以 KB、MB、GB 等单位显示文件大小。
显示文件inode号:
ls -i
显示文件的 inode 号。
按时间排序:
ls -lt
按最后修改时间排序,最新的文件在最前面。
按文件类型排序:
ls -X
按文件类型排序。
反向排序:
ls -r
反向排序。
按扩展名排序:
ls -x
按文件扩展名排序。
列出当前目录的文件数:
ls | wc -l
查找特定类型的文件:
ls *.txt
find命令
用于在文件系统中搜索文件和目录。它可以根据多种条件(如名称、大小、修改时间等)来查找文件
查找当前目录及其子目录中的所有文件和目录:
find . [find path]
查找特定名称的文件:
find . -name filename
查找特定名称的文件(不区分大小写):
find . -iname filename
常用选项
按类型查找:
文件:
find . -type f
目录:
find . -type d
按大小查找:
查找大于 100KB 的文件:
find . -size +100k
查找小于 100KB 的文件:
find . -size -100k
查找恰好 100KB 的文件:
find . -size 100k
按修改时间查找:
查找在过去 7 天内修改过的文件:
find . -mtime -7
查找在过去 7 天内没有修改过的文件:
find . -mtime +7
按访问时间查找:
查找在过去 7 天内访问过的文件:
find . -atime -7
查找在过去 7 天内没有访问过的文件:
find . -atime +7
按更改时间查找:
查找在过去 7 天内更改过的文件:
find . -ctime -7
查找在过去 7 天内没有更改过的文件:
find . -ctime +7
按权限查找:
查找具有特定权限的文件:
find . -perm 755
按用户查找:
查找属于特定用户的文件:
find . -user username
按组查找:
查找属于特定组的文件:
find . -group groupname
按多个条件查找:
查找属于特定用户且在过去 7 天内修改过的文件:
find . -user username -mtime -7
查找并删除特定文件:
find . -name “*.log” -exec rm {} ;
查找并替换文件内容:
find . -name “*.txt” -exec sed -i ‘s/oldtext/newtext/g’ {} ;
查找空文件:
find . -type f -empty
查找空目录:
find . -type d -empty
查找当前目录及其子目录中所有的 .txt 文件:
find . [find path]
find . -name “*.txt”
查看内容
1.cat 命令(cat 命令用于显示文件内容,也可以用于连接多个文件并显示。)
cat 命令用于显示文件内容,也可以用于连接多个文件并显示。
示例
显示文件内容:
cat filename.txt
连接多个文件并显示:
cat file1.txt file2.txt
2,less 命令(less 命令用于逐页显示文件内容,非常适合查看大文件。)
less 命令用于逐页显示文件内容,非常适合查看大文件。
示例
逐页显示文件内容:
less filename.txt
按 Space 键向下翻页。
按 b 键向上翻页。
按 q 键退出 less。
3,more 命令(more 命令也用于逐页显示文件内容,但功能比 less 简单。)
more 命令也用于逐页显示文件内容,但功能比 less 简单。
示例
逐页显示文件内容:
more filename.txt
按 Space 键向下翻页。
按 q 键退出 more。
4, head 命令(head 命令用于显示文件的前几行,默认显示前10行。)
head 命令用于显示文件的前几行,默认显示前10行。
示例
显示文件的前10行:
head filename.txt
显示文件的前20行:
head -n 20 filename.txt
5, tail 命令;tail 命令用于显示文件的最后几行;实时监控文件的最新内容:
tail 命令用于显示文件的最后几行,默认显示最后10行。
示例
显示文件的最后10行:
tail filename.txt
显示文件的最后20行:
tail -n 20 filename.txt
实时监控文件的最新内容:
tail -f filename.txt
6.,nl 命令(nl 命令用于显示文件内容,并为每一行添加行号。)
nl 命令用于显示文件内容,并为每一行添加行号。
示例
显示文件内容并添加行号:
nl filename.txt
7,od 命令;od 命令用于以十六进制或其他格式显示文件内容。
od 命令用于以十六进制或其他格式显示文件内容。
示例
以十六进制格式显示文件内容:
od -x filename.txt
以八进制格式显示文件内容:
od -o filename.txt
8, grep 命令;grep 命令用于在文件中搜索特定模式。
grep 命令用于在文件中搜索特定模式。
示例
搜索文件中包含特定字符串的行:
grep “pattern” filename.txt
搜索文件中包含特定字符串的行并显示行号:
grep -n “pattern” filename.txt
9,sed 命令(sed 命令是一个流编辑器,可以用于修改文件内容。)
sed 命令是一个流编辑器,可以用于修改文件内容。
示例
显示文件内容并替换特定字符串:
sed ‘s/oldtext/newtext/’ filename.txt
10,awk 命令(awk 命令是一个强大的文本处理工具,可以用于提取和处理文件中的数据。)
awk 命令是一个强大的文本处理工具,可以用于提取和处理文件中的数据。
示例
提取文件中第一列的内容:
awk ‘{print $1}’ filename.txt
写入内容
1,使用 echo 命令
echo 命令可以用于将字符串输出到文件中。
示例:
覆盖文件内容:
echo "Hello, World!" > file.txt
追加内容到文件:
echo "This is another line." >> file.txt
2,使用 cat 命令
cat 命令可以用于将内容写入文件。
示例:
覆盖文件内容:
cat > file.txt <<EOF
Hello, World!
This is another line.
EOF
追加内容到文件:
cat >> file.txt <<EOF
This is yet another line.
EOF
3,使用 printf 命令
printf 命令可以用于格式化输出并写入文件。
示例
覆盖文件内容:
printf "Hello, World!\n" > file.txt
追加内容到文件:
printf "This is another line.\n" >> file.txt
格式化输出:
printf "Name: %s, Age: %d\n" "John Doe" 30 >> file.txt
4,使用 tee 命令
tee 命令可以用于将输出同时写入文件和标准输出。
示例
覆盖文件内容:
echo "Hello, World!" | tee file.txt
追加内容到文件:
echo "This is another line." | tee -a file.txt
5,使用文本编辑器
你可以使用文本编辑器(如 vi、vim、nano)来编辑文件。
示例
使用 nano 编辑文件:
nano file.txt
在 nano 中编辑完内容后,按 Ctrl + O 保存,按 Ctrl + X 退出。
使用 vim 编辑文件:
vim file.txt
在 vim 中编辑完内容后,按 Esc 键,然后输入 :wq 保存并退出。
6,使用 echo 和 cat 结合
你可以结合 echo 和 cat 命令来写入多行内容。
示例
覆盖文件内容:
echo -e "Hello, World!\nThis is another line." > file.txt
追加内容到文件:
echo -e "This is yet another line.\nOne more line." >> file.txt
7,使用 here document(<<)
here document 可以用于将多行内容写入文件。
示例
覆盖文件内容:
cat <<EOF > file.txt
Hello, World!
This is another line.
EOF
追加内容到文件:
cat <<EOF >> file.txt
This is yet another line.
One more line.
EOF
8,使用 sed 命令
sed 命令可以用于流编辑,也可以用于写入文件内容。
示例
在文件开头插入内容:
sed -i '1i\Hello, World!' file.txt
在文件末尾追加内容:
sed -i '$a\This is another line.' file.txt
总结
echo:简单易用,适合写入简单的字符串。
cat:适合写入多行内容,支持 here document。
printf:提供丰富的格式化选项,适合需要精确控制输出格式的场景。
tee:可以同时将输出写入文件和标准输出。
sed:适合在文件的特定位置插入或追加内容。
awk:适合复杂的文本处理操作
创建文件
1,使用 touch 命令;touch 命令用于创建空文件或更新现有文件的时间戳。
touch 命令用于创建空文件或更新现有文件的时间戳。
示例
创建空文件:
touch newfile.txt
创建多个空文件:
touch file1.txt file2.txt file3.txt
假设你有一个文件 example.txt,你想要更新它的访问时间和修改时间到当前时间:
touch example.txt
如果你想只更新访问时间:
touch -a example.txt
如果你想只更新修改时间:
touch -m example.txt
如果你想将文件的时间戳设置为特定的日期和时间:
touch -d "2023-10-01 12:00:00" example.txt
或者使用时间戳格式:
touch -t 202310011200.00 example.txt
如果你想使用另一个文件的时间戳来更新目标文件的时间戳:
touch -r referencefile.txt example.txt
2,使用 echo 命令
echo 命令可以用于创建文件并写入内容。
示例
创建文件并写入内容:
echo "Hello, World!" > newfile.txt
创建多个文件并写入相同内容:
echo "Hello, World!" > file1.txt
echo "Hello, World!" > file2.txt
3,使用 cat 命令
cat 命令可以用于创建文件并写入多行内容。
示例
创建文件并写入多行内容:
cat > newfile.txt <<EOF
Line 1
Line 2
Line 3
EOF
4,使用 printf 命令
printf 命令可以用于创建文件并写入格式化内容。
示例
创建文件并写入格式化内容:
printf "Name: %s, Age: %d\n" "John Doe" 30 > newfile.txt
5,使用文本编辑器
你可以使用文本编辑器(如 vi、vim、nano)来创建和编辑文件。
示例
使用 nano 创建文件:
nano newfile.txt
在 nano 中编辑完内容后,按 Ctrl + O 保存,按 Ctrl + X 退出。
使用 vim 创建文件:
vim newfile.txt
在 vim 中编辑完内容后,按 Esc 键,然后输入 :wq 保存并退出。
6,使用 touch 和 echo 结合
你可以先使用 touch 创建空文件,然后再使用 echo 写入内容。
示例
创建空文件:
touch newfile.txt
写入内容:
echo "Hello, World!" > newfile.txt
7,使用 dd 命令
dd 命令可以用于创建文件并写入内容,主要用于需要精确控制文件操作的场景。
示例
创建文件并写入内容:
echo "Hello, World!" | dd of=newfile.txt
总结
以上是一些常用的 Linux 命令和方法,用于创建文件。根据你的需求选择合适的方法可以提高效率。以下是一些常见场景的推荐:
创建空文件:使用 touch 命令。
创建文件并写入简单内容:使用 echo 命令。
创建文件并写入多行内容:使用 cat 命令。
需要格式化内容:使用 printf 命令。
需要编辑器进行编辑:使用 nano 或 vim。
需要精确控制文件操作:使用 dd 命令。
删除文件
使用 rm 命令
rm 命令是最常用的删除文件的命令。
基本用法
删除单个文件:
rm file.txt
删除多个文件:
rm file1.txt file2.txt file3.txt
删除目录及其内容:
rm -r directory_name
强制删除文件(不提示确认):
rm -f file.txt
强制删除目录及其内容(不提示确认):
rm -rf directory_name
2,使用 rm 命令的交互模式
如果你希望在删除文件时进行确认,可以使用 -i 选项。
示例
交互式删除文件:
rm -i file.txt
3,使用 find 命令删除文件
find 命令可以用于查找文件并删除。
示例
删除特定目录下的所有 .log 文件:
find /path/to/directory -type f -name “*.log” -exec rm {} ;
删除特定目录下过去 7 天内未修改的文件:
find /path/to/directory -type f -mtime +7 -exec rm {} ;
4,使用 rm 命令删除匹配的文件
可以使用通配符来删除匹配的文件。
示例
删除当前目录下的所有 .tmp 文件:
rm *.tmp
5,使用 trash 命令,trash 命令可以将文件移到回收站而不是直接删除,这样可以在需要时恢复文件。
trash 命令可以将文件移到回收站而不是直接删除,这样可以在需要时恢复文件。
安装 trash-cli
在大多数 Linux 发行版中,需要先安装 trash-cli:
sudo apt-get install trash-cli # Debian/Ubuntu
sudo yum install trash-cli # CentOS/RHEL
示例
将文件移到回收站:
trash file.txt
恢复文件:
trash-restore
清空回收站:
trash-empty
注意事项
谨慎使用 rm -rf:rm -rf 命令会强制删除文件和目录,不会提示确认,一旦误用可能导致重要数据丢失。
备份重要文件:在删除重要文件之前,建议先备份。
使用 rm -i 进行确认:在不确定的情况下,可以使用 rm -i 选项进行交互式删除,以防止误删文件。
总结
rm:最常用的删除文件命令。
rm -r:删除目录及其内容。
rm -f:强制删除文件,不提示确认。
rm -i:交互式删除文件,每次删除前都会提示确认。
find:结合 find 命令可以删除特定条件的文件。
trash:将文件移到回收站,可以恢复
移动文件
mv [选项] 源 目标
如果目标是一个已存在的目录,则源会被移动到该目录下。
如果目标是一个文件名或不存在的路径,则源会被重命名为目标。
常见选项
-i:交互模式,在覆盖已存在的文件之前询问用户。
-v:显示详细的输出,显示移动的过程。
-u:只有当源文件比目标文件新或者目标文件不存在时才进行移动。
示例
移动单个文件到另一个目录
mv file.txt /path/to/directory/
移动多个文件到一个目录
mv file1.txt file2.txt /path/to/directory/
使用-i选项防止意外覆盖文件
mv -i file.txt /path/to/existingfile.txt
使用-v选项查看移动过程
mv -v file.txt /path/to/directory/
使用-u选项只在源文件更新时移动
mv -u file.txt /path/to/directory/
重命名文件
mv oldname.txt newname.txt
复制文件
基本语法
cp [选项] 源文件 目标文件
常见选项
-i:交互模式,在覆盖已存在的文件之前询问用户。
-r 或 -R:递归复制目录及其内容。
-v:显示详细的输出,显示复制的过程。
-p:保留原始文件的属性(如权限、时间戳等)。
-f:强制复制,如果目标文件已存在则覆盖。
-l:创建硬链接而不是复制文件。
示例
复制单个文件
cp file.txt newfile.txt
这条命令将 file.txt 复制到 newfile.txt。
复制多个文件到一个目录
cp file1.txt file2.txt /path/to/directory/
这条命令将 file1.txt 和 file2.txt 复制到 /path/to/directory/ 目录中。
复制目录及其内容
cp -r /path/to/source_directory /path/to/target_directory
这条命令将 source_directory 及其所有内容递归地复制到 target_directory。
保留文件属性复制
cp -p file.txt newfile.txt
这条命令将 file.txt 复制到 newfile.txt,并保留原始文件的属性。
交互模式复制
cp -i file.txt existingfile.txt
这条命令在覆盖已存在的 existingfile.txt 之前会询问用户。
显示详细输出
cp -v file.txt newfile.txt
这条命令将显示复制过程的详细信息。
强制覆盖目标文件
cp -f file.txt existingfile.txt
这条命令将强制覆盖 existingfile.txt,不会提示用户。
创建硬链接
cp -l file.txt newfile.txt
这条命令将在 newfile.txt 创建一个指向 file.txt 的硬链接。
注意事项
使用 cp -r 复制目录时,确保目标目录路径正确,否则可能会导致意外的文件覆盖。
在执行涉及重要文件的操作前,建议先备份相关文件,以防止误操作导致的数据丢失。
文件目录解压
解压
.zip 文件
使用 unzip 命令解压 .zip 文件。
示例
unzip file.zip -d /path/to/destination_directory
file.zip:要解压的压缩文件。
-d /path/to/destination_directory:指定解压后的文件存放目录。
.tar 文件
使用 tar 命令解压 .tar 文件。
示例
tar -xvf file.tar -C /path/to/destination_directory
file.tar:要解压的压缩文件。
-x:解压选项。
-v:显示详细输出。
-f:指定文件名。
-C /path/to/destination_directory:指定解压后的文件存放目录。
.tar.gz 或 .tgz 文件
使用 tar 命令解压 .tar.gz 或 .tgz 文件。
示例
tar -zxvf file.tar.gz -C /path/to/destination_directory
file.tar.gz 或 file.tgz:要解压的压缩文件。
-z:处理 gzip 压缩。
-x:解压选项。
-v:显示详细输出。
-f:指定文件名。
-C /path/to/destination_directory:指定解压后的文件存放目录。
.tar.bz2 文件
使用 tar 命令解压 .tar.bz2 文件。
示例
tar -jxvf file.tar.bz2 -C /path/to/destination_directory
file.tar.bz2:要解压的压缩文件。
-j:处理 bzip2 压缩。
-x:解压选项。
-v:显示详细输出。
-f:指定文件名。
-C /path/to/destination_directory:指定解压后的文件存放目录。
.rar 文件
使用 unrar 命令解压 .rar 文件。
示例
unrar x file.rar /path/to/destination_directory
file.rar:要解压的压缩文件。
x:解压选项。
/path/to/destination_directory:指定解压后的文件存放目录。
.7z 文件
使用 7z 命令解压 .7z 文件。
示例
7z x file.7z -o/path/to/destination_directory
file.7z:要解压的压缩文件。
x:解压选项。
-o/path/to/destination_directory:指定解压后的文件存放目录。
注意事项
确保安装了解压工具。例如,unzip、tar、unrar 和 7z 等工具可能需要单独安装。
使用 -C 或 -o 选项指定解压目录,以避免文件解压到当前目录导致混乱。
在解压大型文件或目录时,建议先查看压缩文件的内容,可以使用 tar -tf file.tar.gz 或 unzip -l file.zip 等命令
压缩
.zip 文件
使用 zip 命令压缩文件和目录。
示例
zip -r archive.zip /path/to/directory
archive.zip:生成的压缩文件名。
-r:递归压缩目录。
/path/to/directory:要压缩的目录或文件。
.tar 文件
使用 tar 命令压缩文件和目录。
示例
tar -cvf archive.tar /path/to/directory
archive.tar:生成的压缩文件名。
-c:创建新的压缩文件。
-v:显示详细输出。
-f:指定文件名。
/path/to/directory:要压缩的目录或文件。
.tar.gz 或 .tgz 文件
使用 tar 命令压缩文件和目录,并使用 gzip 压缩。
示例
tar -czvf archive.tar.gz /path/to/directory
archive.tar.gz 或 archive.tgz:生成的压缩文件名。
-c:创建新的压缩文件。
-z:使用 gzip 压缩。
-v:显示详细输出。
-f:指定文件名。
/path/to/directory:要压缩的目录或文件。
.tar.bz2 文件
使用 tar 命令压缩文件和目录,并使用 bzip2 压缩。
示例
tar -cjvf archive.tar.bz2 /path/to/directory
archive.tar.bz2:生成的压缩文件名。
-c:创建新的压缩文件。
-j:使用 bzip2 压缩。
-v:显示详细输出。
-f:指定文件名。
/path/to/directory:要压缩的目录或文件。
.7z 文件
使用 7z 命令压缩文件和目录。
示例
7z a archive.7z /path/to/directory
archive.7z:生成的压缩文件名。
a:添加文件到压缩文件。
/path/to/directory:要压缩的目录或文件。
.rar 文件
使用 rar 命令压缩文件和目录。
示例
rar a archive.rar /path/to/directory
archive.rar:生成的压缩文件名。
a:添加文件到压缩文件。
/path/to/directory:要压缩的目录或文件。
注意事项
确保安装了相应的压缩工具。例如,zip、tar、7z 和 rar 等工具可能需要单独安装。
使用 -r 或 -c 选项递归压缩目录,以确保目录中的所有文件和子目录都被压缩。
使用 -v 选项显示详细输出,以便跟踪压缩过程。
在压缩大型文件或目录时,建议先测试压缩命令,以确保生成的压缩文件符合预期。
软连接
格式
ln -s target link_name
target:目标文件或目录的路径。
link_name:要创建的符号链接的名称。
示例
创建指向文件的软连接
假设你有一个文件 file.txt,并且想在当前目录下创建一个指向它的软连接 file_link.txt。
ln -s /path/to/file.txt file_link.txt
创建指向目录的软连接
假设你有一个目录 documents,并且想在当前目录下创建一个指向它的软连接 docs。
ln -s /path/to/documents docs
创建绝对路径的软连接
如果你希望软连接使用绝对路径,可以直接指定目标文件的完整路径。
ln -s /home/user/documents/file.txt /home/user/links/file_link.txt
创建相对路径的软连接
如果你希望软连接使用相对路径,可以在目标文件路径中使用相对路径。
ln -s …/documents/file.txt file_link.txt
注意事项
路径问题:
绝对路径:使用目标文件或目录的完整路径。
相对路径:使用相对于软连接位置的路径。
覆盖现有文件:
如果目标位置已经存在文件或目录,ln -s 命令会失败。可以使用 -f 选项强制删除现有的文件或目录并创建新的软连接。
ln -sf /path/to/file.txt file_link.txt
检查软连接:
使用 ls -l 命令可以查看软连接的详细信息,包括它指向的目标文件或目录。
ls -l file_link.txt
示例输出
假设你创建了一个软连接 file_link.txt 指向 file.txt,使用 ls -l 命令查看结果:
ls -l file_link.txt
输出可能如下所示:
lrwxrwxrwx 1 user user 15 Oct 10 12:34 file_link.txt -> /path/to/file.txt
lrwxrwxrwx:表示这是一个符号链接。
15:符号链接的长度。
Oct 10 12:34:符号链接的创建时间。
file_link.txt -> /path/to/file.txt:表示 file_link.txt 是一个指向 /path/to/file.txt 的符号链接。
删除软连接
要删除软连接,可以使用 rm 命令:
rm file_link.txt
创建文件夹
基本语法
mkdir [选项] 目录名
常用选项
-p:创建多级目录,如果父目录不存在,会自动创建。
-m:设置创建目录的权限(mode)。
示例
1, 创建单个目录
mkdir myfolder
这条命令会在当前目录下创建一个名为 myfolder 的目录。
2, 创建多级目录
mkdir -p path/to/myfolder
这条命令会创建多级目录 path/to/myfolder,如果中间的目录(如 path 和 to)不存在,也会自动创建。
3, 设置目录权限
mkdir -m 755 myfolder
这条命令会在当前目录下创建一个名为 myfolder 的目录,并设置权限为 755。权限 755 表示所有者有读、写、执行权限,而组和其他用户只有读和执行权限。
创建多个目录
mkdir folder1 folder2 folder3
这条命令会在当前目录下创建三个目录:folder1、folder2 和 folder3。
创建带权限的多级目录
mkdir -m 755 -p path/to/myfolder
这条命令会创建多级目录 path/to/myfolder,并设置权限为 755。
查看目录是否创建成功
可以使用 ls 命令查看目录是否创建成功:
ls -ld myfolder
这条命令会显示 myfolder 目录的详细信息,包括权限、所有者、组等。
总结
1,mkdir myfolder:创建一个名为 myfolder 的目录。
2,mkdir -p path/to/myfolder:创建多级目录 path/to/myfolder。
3,mkdir -m 755 myfolder:创建一个权限为 755 的目录 myfolder。
文件权限,组管理
设置文件权限
修改文件权限
使用符号模式
chmod 命令可以使用符号模式来修改文件权限。
chmod [who][operator][permission] filename
who:指定用户类别(u 表示所有者,g 表示所属组,o 表示其他用户,a 表示所有用户)。
operator:操作符(+ 表示增加权限,- 表示减少权限,= 表示设置权限)。
permission:权限(r 表示读权限,w 表示写权限,x 表示执行权限)。
示例:
增加所有者的执行权限
chmod u+x filename
增加所有用户的所有权限
chmod a+rwx filename
移除所有用户的写权限
chmod a-w filename
设置所有者读写权限,所属组只读权限,其他用户无权限
chmod u=rw,g=r,o= filename
使用八进制模式
chmod 命令也可以使用八进制模式来修改文件权限。
chmod [mode] filename
mode:三位八进制数,分别表示所有者、所属组和其他用户的权限。
4 表示读权限(r)。
2 表示写权限(w)。
1 表示执行权限(x)。
示例:
设置所有者读写执行权限,所属组和其它用户只读权限
chmod 744 filename
设置所有者读写权限,所属组只读权限,其他用户无权限
chmod 640 filename
设置所有用户读写执行权限
chmod 777 filename
设置文件 filename 的 SUID 权限,SUID 权限允许用户在执行文件时临时获得文件所有者的权限。
chmod u+s filename
设置文件 filename 的 SGID 权限,SGID 权限允许用户在执行文件时临时获得文件所属组的权限。
SGID(Set Group ID)
SGID 权限允许用户在执行文件时临时获得文件所属组的权限。
示例:
chmod g+s filename
示例:
设置目录 directory 的 Sticky Bit,Sticky Bit 通常用于目录,防止其他用户删除不属于他们的文件。
Sticky Bit
Sticky Bit 通常用于目录,防止其他用户删除不属于他们的文件。
chmod +t directory
chmod +t directory
总结
修改文件权限:
符号模式:chmod [who][operator][permission] filename
八进制模式:chmod [mode] filename
修改文件所有者:chown newowner filename
修改文件所属组:chgrp newgroup filename
同时修改所有者和所属组:chown newowner:newgroup filename
设置特殊权限:
SUID:chmod u+s filename
SGID:chmod g+s filename
Sticky Bit:chmod +t director
设置文件所有者和所属组
修改文件所有者和所属组
修改文件所有者,chown
使用 chown 命令修改文件的所有者。
chown newowner filename
示例:
将文件 filename 的所有者改为 newowner
chown newowner filename
修改文件所属组
使用 chgrp 命令修改文件的所属组。
chgrp newgroup filename
将文件 filename 的所属组改为 newgroup,chgrp
chgrp newgroup filename
同时修改所有者和所属组
使用 chown 命令同时修改所有者和所属组。
chown newowner:newgroup filename
示例:
将文件 filename 的所有者改为 newowner,所属组改为 newgroup
chown newowner:newgroup filename
递归修改文件和目录的所有者和所属组
# 递归地将目录 directory 及其所有内容的所有者改为 newowner
chown -R newowner directory
# 递归地将目录 directory 及其所有内容的所属组改为 newgroup
chgrp -R newgroup directory
# 递归地将目录 directory 及其所有内容的所有者和所属组改为 newowner 和 newgroup
chown -R newowner:newgroup directory
时间日期类
查看当前时间
查看当前时间和日期
date 命令
date 命令用于显示和设置系统的日期和时间。
基本用法
date
输出示例:
Thu Oct 12 14:30:00 CST 2023
格式化输出
你可以使用 date 命令的格式化选项来定制输出格式。
常用格式化选项:
%Y:四位数的年份(例如,2023)
%m:两位数的月份(例如,10)
%d:两位数的日期(例如,12)
%H:两位数的小时(24小时制,例如,14)
%M:两位数的分钟(例如,30)
%S:两位数的秒(例如,00)
%a:星期几的缩写(例如,Thu)
%b:月份的缩写(例如,Oct)
%c:本地日期和时间表示(例如,Thu Oct 12 14:30:00 2023)
%x:本地日期表示(例如,10/12/23)
%X:本地时间表示(例如,14:30:00)
示例:
# 显示年月日
date +%Y-%m-%d
# 输出示例:2023-10-12
# 显示小时分钟秒
date +%H:%M:%S
# 输出示例:14:30:00
# 显示完整的日期和时间
date +"%Y-%m-%d %H:%M:%S"
# 输出示例:2023-10-12 14:30:00
时间戳转换
将时间戳转换为日期和时间
date -d @timestamp
示例
# 将时间戳1697127000转换为日期和时间
date -d @1697127000
输出示例:
Thu Oct 12 14:30:00 CST 2023
将日期和时间转换为时间戳
date -d “YYYY-MM-DD HH:MM:SS” +%s
示例
# 将2023年10月12日14:30:00转换为时间戳
date -d "2023-10-12 14:30:00" +%s
输出示例:
1697127000
使用 awk 命令
将时间戳转换为日期和时间
echo “timestamp” | awk ‘{print strftime(“%Y-%m-%d %H:%M:%S”, $1)}’
示例
# 将时间戳1697127000转换为日期和时间
echo "1697127000" | awk '{print strftime("%Y-%m-%d %H:%M:%S", $1)}'
输出示例:
2023-10-12 14:30:00
将日期和时间转换为时间戳
echo “YYYY-MM-DD HH:MM:SS” | awk ‘{print mktime(gensub(/[-:]/," ",“g”,$0))}’
示例
# 将2023年10月12日14:30:00转换为时间戳
echo "2023-10-12 14:30:00" | awk '{print mktime(gensub(/[-:]/," ","g",$0))}'
输出示例:
1697127000
设置系统时间和日期
使用 timedatectl 命令
timedatectl 是一个用于管理系统时间和日期的命令行工具,适用于现代Linux发行版。
设置日期和时间
sudo timedatectl set-time "YYYY-MM-DD HH:MM:SS"
示例
# 设置日期为2023年10月12日,时间为14:30:00
sudo timedatectl set-time "2023-10-12 14:30:00"
2,通过date命令
date 命令
date 命令也可以用于设置系统的日期和时间。需要超级用户权限(root)才能设置系统时间。
设置日期和时间
sudo date MMDDhhmm[[CC]YY][.ss]
示例:
# 设置日期为2023年10月12日,时间为14:30:00
sudo date 101214302023.00
同步网络时间
同步阿里云网络时间命令
阿里云提供了NTP服务器,可以用于同步系统时间。以下是使用阿里云NTP服务器同步系统时间的几种方法。
1, 使用 ntpdate 命令
ntpdate 是一个简单的命令行工具,用于从NTP服务器同步系统时间。需要注意的是,ntpdate 通常需要超级用户权限(root)来运行。
基本语法
sudo ntpdate [options] ntp_server
阿里云NTP服务器地址
ntp1.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com
ntp4.aliyun.com
ntp5.aliyun.com
ntp6.aliyun.com
ntp7.aliyun.com
示例
# 同步系统时间到阿里云 NTP 服务器 ntp1.aliyun.com
sudo ntpdate ntp1.aliyun.com
# 使用多个 NTP 服务器同步系统时间
sudo ntpdate ntp1.aliyun.com ntp2.aliyun.com ntp3.aliyun.com
2, 使用 ntpd 服务
ntpd 是一个NTP守护进程,可以在后台持续同步系统时间。它通常作为系统服务运行。
安装 ntpd
在大多数Linux发行版中,ntpd 已经预安装。如果没有安装,可以使用包管理器进行安装。
Debian/Ubuntu
sudo apt-get install ntp
CentOS/RHEL
sudo yum install ntp
配置 ntpd
编辑 /etc/ntp.conf 文件,添加或修改NTP服务器地址。
示例:
server ntp1.aliyun.com
server ntp2.aliyun.com
server ntp3.aliyun.com
启动和启用 ntpd 服务
# 启动 ntpd 服务
sudo systemctl start ntpd
# 设置 ntpd 服务开机启动
sudo systemctl enable ntpd
3, 使用 chrony 服务
chrony 是一个更现代的NTP客户端和服务,比 ntpd 更高效,更适合在网络不稳定的情况下使用。
安装 chrony
在大多数Linux发行版中,chrony 已经预安装。如果没有安装,可以使用包管理器进行安装。
Debian/Ubuntu
sudo apt-get install chrony
CentOS/RHEL
sudo yum install chrony
配置 chrony
编辑 /etc/chrony/chrony.conf 文件,添加或修改NTP服务器地址。
示例:
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
启动和启用 chrony 服务
# 启动 chronyd 服务
sudo systemctl start chronyd
# 设置 chronyd 服务开机启动
sudo systemctl enable chronyd
4, 使用 timedatectl 命令
timedatectl 是一个用于管理系统时间和日期的命令行工具,可以用来同步系统时间。
同步系统时间
sudo timedatectl set-ntp true
查看当前时间同步状态
timedatectl status
总结
-
使用 ntpdate 命令:适用于一次性同步系统时间。
- sudo ntpdate ntp1.aliyun.com
-
使用 ntpd 服务:适用于持续同步系统时间。
安装:sudo apt-get install ntp 或 sudo yum install ntp
配置:编辑 /etc/ntp.conf 文件,添加阿里云NTP服务器地址
启动和启用:sudo systemctl start ntpd 和 sudo systemctl enable ntpd
-
使用 chrony 服务:适用于更高效的同步,特别是在网络不稳定的情况下。
安装:sudo apt-get install chrony 或 sudo yum install chrony
配置:编辑 /etc/chrony/chrony.conf 文件,添加阿里云NTP服务器地址
启动和启用:sudo systemctl start chronyd 和 sudo systemctl enable chronyd
-
使用 timedatectl 命令:适用于管理系统时间和日期。
sudo timedatectl set-ntp true
硬件时钟
硬件时钟(也称为RTC,Real-Time Clock)是计算机中的一种硬件组件,用于在计算机关闭或断电后仍然保持准确的时间。硬件时钟的作用非常重要,尤其在确保系统时间和日期的准确性方面。以下是硬件时钟的主要作用和相关概念:
1, 保持时间的连续性
断电后的时间保持:硬件时钟通常由一个小电池供电,即使计算机关闭或断电,硬件时钟也能继续运行并保持准确的时间。
系统启动时的时间初始化:当计算机启动时,操作系统会从硬件时钟读取当前的时间和日期,以初始化系统时间。
2, 系统时间的基准
系统时间的参考:硬件时钟提供了一个可靠的基准时间,操作系统可以依赖这个基准来设置和校准系统时间。
时间同步:==在某些情况下,系统时间可能会因为各种原因(如手动设置错误、时钟漂移等)变得不准确。==硬件时钟可以作为一个参考点,用于校准系统时间。
3, 确保时间的一致性
多系统一致性:在多系统或多设备环境中,硬件时钟可以帮助确保所有系统的时间保持一致,这对于分布式系统、网络同步等非常重要。
日志记录和审计:许多系统和服务依赖于准确的时间戳来进行日志记录和审计。硬件时钟确保了这些时间戳的准确性。
4, 特定应用的需求
嵌入式系统:在嵌入式系统中,硬件时钟是不可或缺的组件,用于确保设备在长时间运行或断电后仍能保持准确的时间。
服务器和数据中心:在服务器和数据中心中,硬件时钟有助于确保所有服务器的时间同步,从而避免因时间不一致导致的问题。
查看和设置硬件时钟
hwclock 命令
hwclock 命令用于查看和设置硬件时钟(RTC,Real Time Clock)。
查看硬件时钟
sudo hwclock
将系统时间同步到硬件时钟
sudo hwclock --systohc
将硬件时钟同步到系统时间
sudo hwclock --hctosys
5, 查看硬件时钟的时间(本地时间)
基本用法
sudo hwclock --localtime
6, 设置硬件时钟的时间
基本用法
sudo hwclock --set --date=“YYYY-MM-DD HH:MM:SS”
示例:
# 设置硬件时钟为2023年10月12日14:30:00
sudo hwclock --set --date=“2023-10-12 14:30:00”
7, 查看硬件时钟的状态
基本用法
sudo hwclock --show
8, 调整硬件时钟的精度
基本用法
sudo hwclock --adjust
总结
查看硬件时钟的时间:sudo hwclock
将系统时间同步到硬件时钟:sudo hwclock --systohc
将硬件时钟同步到系统时间:sudo hwclock --hctosys
设置硬件时钟的时间:sudo hwclock --set --date=“YYYY-MM-DD HH:MM:SS”
查看硬件时钟的时间(UTC时间):sudo hwclock --utc
查看硬件时钟的时间(本地时间):sudo hwclock --localtime
查看硬件时钟的状态:sudo hwclock --show
调整硬件时钟的精度:sudo hwclock --adjust
查看硬件时钟的时区设置:sudo hwclock --debug
定时任务(crontab,at)
at和cron命令的具体使用及区别
at 和 cron 是Linux和Unix系统中用于调度任务的两个重要命令。它们各有特点和适用场景。下面详细介绍这两个命令的具体使用方法及其区别。
1, at 命令
功能
at 命令用于在指定的时间执行一次性的任务。它适用于需要在未来某个特定时间点执行的任务。
基本语法
at [options] time [date]
常用选项
-f file:从指定的文件中读取命令。
-m:任务完成后发送邮件通知。
-l 或 atq:列出当前排队的 at 作业。
-d 或 atrm:删除指定的 at 作业。
示例
在明天上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 tomorrow
在今天下午3点30分执行一个脚本
at 15:30 today
在提示符下输入要执行的命令或脚本路径:
/path/to/script.sh
从文件中读取命令并在明天下午2点执行
at -f /path/to/command_file 14:00 tomorrow
列出当前排队的 at 作业
atq
删除指定的 at 作业
atrm <job_number>
at [options] time [date] 中的 date
1.1 相对日期
today:今天。
tomorrow:明天。
next week:下周。
next month:下个月。
next year:明年。
示例:
# 在明天上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 tomorrow
# 在下周三上午9点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 9:00 next wednesday
1.2 绝对日期
MMDD:月和日(例如,1012 表示10月12日)。
YYYY-MM-DD:完整的年月日(例如,2023-10-12 表示2023年10月12日)。
示例:
# 在2023年10月12日上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 2023-10-12
# 在10月12日上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 1012
1.3 自然语言日期
October 12:10月12日。
Oct 12:10月12日。
12 Oct:10月12日。
示例:
# 在10月12日上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 October 12
# 在10月12日上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 Oct 12
# 在10月12日上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 12 Oct
2, 组合时间日期
你可以将时间(HH:MM)和日期(date)组合在一起,以指定一个完整的时间点。
示例:
# 在2023年10月12日上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 2023-10-12
# 在10月12日上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 1012
# 在10月12日上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 October 12
3, 特殊时间点
3.1 午夜
midnight:午夜(00:00)。
示例:
# 在明天午夜执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at midnight tomorrow
3.2 正午
noon:正午(12:00)。
示例:
# 在明天正午执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at noon tomorrow
总结
相对日期:today、tomorrow、next week 等。
绝对日期:MMDD、YYYY-MM-DD 等。
自然语言日期:October 12、Oct 12、12 Oct 等。
组合时间日期:HH:MM YYYY-MM-DD 等。
特殊时间点:midnight、noon 等。
1.1 相对日期
today:今天。
tomorrow:明天。
next week:下周。
next month:下个月。
next year:明年。
示例:
在明天上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 tomorrow
在下周三上午9点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 9:00 next wednesday
1.2 绝对日期
MMDD:月和日(例如,1012 表示10月12日)。
YYYY-MM-DD:完整的年月日(例如,2023-10-12 表示2023年10月12日)。
示例:
在2023年10月12日上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 2023-10-12
在10月12日上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 1012
1.3 自然语言日期
October 12:10月12日。
Oct 12:10月12日。
12 Oct:10月12日。
示例:
在10月12日上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 October 12
在10月12日上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 Oct 12
在10月12日上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 12 Oct
2, 组合时间日期
你可以将时间(HH:MM)和日期(date)组合在一起,以指定一个完整的时间点。
示例:
在2023年10月12日上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 2023-10-12
在10月12日上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 1012
在10月12日上午10点执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at 10:00 October 12
3, 特殊时间点
3.1 午夜
midnight:午夜(00:00)。
示例:
在明天午夜执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at midnight tomorrow
3.2 正午
noon:正午(12:00)。
示例:
在明天正午执行一个命令
echo "echo 'Hello, World!' > /tmp/hello.txt" | at noon tomorrow
总结
相对日期:today、tomorrow、next week 等。
绝对日期:MMDD、YYYY-MM-DD 等。
自然语言日期:October 12、Oct 12、12 Oct 等。
组合时间日期:HH:MM YYYY-MM-DD 等。
特殊时间点:midnight、noon 等。
2, cron 命令
功能
cron 命令用于定期执行任务,适用于需要周期性执行的任务。cron 使用守护进程 crond 来管理定时任务。
基本语法
cron 任务通常通过编辑 crontab 文件来设置。
编辑 crontab 文件
crontab -e
crontab 文件格式
crontab 文件的每一行代表一个定时任务,格式如下:
* * * * * command_to_execute
第一字段:分钟(0-59)
第二字段:小时(0-23)
第三字段:日期(1-31)
第四字段:月份(1-12)
第五字段:星期几(0-7,其中0和7都表示周日)
第六字段:要执行的命令
示例
每天凌晨1点执行备份脚本
0 1 * * * /path/to/backup_script.sh
每周一上午10点发送邮件
0 10 * * 1 /usr/bin/mail -s "Weekly Report" user@example.com < /path/to/report.txt
每5分钟检查一次磁盘空间
*/5 * * * * /path/to/check_disk_space.sh
每月最后一天晚上12点清理日志
0 0 31 * * /path/to/cleanup_logs.sh
列出当前用户的 cron 任务
crontab -l
删除当前用户的 cron 任务
crontab -r
多时间格式设置
1, 使用逗号分隔多个值
可以在一个字段中使用逗号分隔多个值,表示多个时间点。
示例
每天的10点和15点执行任务
cron
0 10,15 * * * /path/to/script.sh
每周一、周三和周五的10点执行任务
cron
0 10 * * 1,3,5 /path/to/script.sh
2, 使用连字符表示范围
可以使用连字符表示一个时间范围。
示例
每天的10点到15点每小时执行任务
cron
0 10-15 * * * /path/to/script.sh
每月的1号到10号每天的10点执行任务
cron
0 10 1-10 * * /path/to/script.sh
3, 使用星号表示任意值
星号表示该字段可以取任何值。
示例
每分钟执行任务
cron
* * * * * /path/to/script.sh
每天的每个小时的第10分钟执行任务
cron
10 * * * * /path/to/script.sh
4, 使用斜杠表示步长
可以使用斜杠表示一个时间间隔。
示例
每5分钟执行任务
cron
*/5 * * * * /path/to/script.sh
每2小时执行任务
cron
0 */2 * * * /path/to/script.sh
每天的每个小时的第10分钟和第30分钟执行任务
cron
10,30 * * * * /path/to/script.sh
5, 组合使用
可以组合使用上述多种格式来定义更复杂的时间规则。
示例
每天的10点到15点每小时的第10分钟和第30分钟执行任务
cron
10,30 10-15 * * * /path/to/script.sh
每周一、周三和周五的10点到15点每小时的第10分钟执行任务
cron
10 10-15 * * 1,3,5 /path/to/script.sh
特殊字符
1, *(星号)
表示该字段可以取任何值。
2, ,(逗号)
用于分隔多个值。
3, -(连字符)
用于表示一个时间范围。
4, /(斜杠)
用于表示一个时间间隔。
示例总结
每天的10点和15点执行任务
cron
0 10,15 * * * /path/to/script.sh
每周一、周三和周五的10点执行任务
cron
0 10 * * 1,3,5 /path/to/script.sh
每天的10点到15点每小时执行任务
cron
0 10-15 * * * /path/to/script.sh
每月的1号到10号每天的10点执行任务
cron
0 10 1-10 * * /path/to/script.sh
每5分钟执行任务
cron
*/5 * * * * /path/to/script.sh
每2小时执行任务
cron
0 */2 * * * /path/to/script.sh
每天的每个小时的第10分钟和第30分钟执行任务
cron
10,30 * * * * /path/to/script.sh
区别
任务执行频率
at:用于执行一次性的任务,任务执行后自动删除。
cron:用于执行周期性的任务,任务会按照设定的时间间隔重复执行。
任务管理
at:任务列表可以通过 atq 命令查看,任务可以通过 atrm 命令删除。
cron:任务列表可以通过 crontab -l 命令查看,任务可以通过编辑 crontab 文件来添加、修改或删除。
任务调度灵活性
at:适合需要在未来某个特定时间点执行的任务。
cron:适合需要定期执行的任务,支持复杂的调度规则,如每5分钟、每周一、每月最后一天等。
总结
at:适用于一次性任务,任务执行后自动删除。
cron:适用于周期性任务,任务会按照设定的时间间隔重复执行。
磁盘挂载,分区
在Linux中增加磁盘并进行分区是一个常见的任务,通常涉及以下几个步骤:识别新磁盘、创建分区、格式化分区、挂载分区以及更新 /etc/fstab
文件以确保系统重启后分区仍然挂载
1,识别新磁盘
首先,你需要识别新添加的磁盘。可以使用 lsblk 或 fdisk 命令来查看系统中的磁盘和分区信息。
使用 lsblk 命令
lsblk
使用 fdisk 命令
sudo fdisk -l
这两个命令都会列出系统中所有的磁盘和分区。新添加的磁盘通常会显示为 /dev/sdX(其中 X 是一个字母,如 a, b, c 等)。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part /
sdb 8:16 0 100G 0 disk
└─sdb1 8:17 0 100G 0 part
2, 创建分区
使用 fdisk 或 parted 命令来创建分区。这里以 fdisk 为例。
使用 fdisk 创建分区
启动 fdisk:
sudo fdisk /dev/sdX
其中 /dev/sdX 是你要分区的磁盘。
2.1 创建新分区:
- 输入 n 创建新分区。
- 选择分区类型(主分区 p 或扩展分区 e)。
- 选择分区编号。
- 输入起始扇区(默认即可)。
- 输入结束扇区或分区大小(例如 +10G 表示10GB)。
2.2设置分区类型(可选):
- 输入 t 设置分区类型。
- 输入分区编号。
- 输入分区类型代码(例如 83 表示Linux分区)。
- 保存并退出:输入 w 保存更改并退出 fdisk。
3, 格式化分区
创建分区后,需要对其进行格式化。常用的文件系统格式有 ext4、xfs 等。
例如:
格式化为 ext4 文件系统
sudo mkfs.ext4 /dev/sdX1
格式化为 xfs 文件系统
sudo mkfs.xfs /dev/sdX1
各种文件系统格式
ext4 (Fourth Extended File System)
特点:
日志功能:支持日志功能,可以提高文件系统的可靠性和恢复速度。
大文件支持:支持最大文件大小为16TB,最大文件系统大小为1EB(Exabyte)。
延迟分配:延迟分配可以减少文件碎片,提高性能。
快速扩展:支持在线扩展文件系统。
元数据校验:支持元数据校验,提高数据完整性。
多块分配:支持一次分配多个数据块,提高性能。
适用场景:
通用用途,适用于大多数Linux系统。
对文件系统可靠性和性能有较高要求的场景。
2, XFS (Extended File System)
特点:
高性能:设计用于高性能和大规模数据存储,特别适合大量并发I/O操作。
日志功能:支持日志功能,提高文件系统的可靠性和恢复速度。
大文件支持:支持非常大的文件和文件系统,最大文件大小为8EB(Exabyte),最大文件系统大小为8EB。
在线扩展:支持在线扩展文件系统。
预分配:支持预分配空间,减少碎片。
延展属性:支持延展属性,允许存储额外的元数据。
适用场景:
高性能计算和大规模数据存储。
数据库服务器和其他需要高I/O性能的应用。
3, Btrfs (B-Tree File System)
特点:
高级功能:支持快照、克隆、透明压缩、数据校验等功能。
日志功能:支持日志功能,提高文件系统的可靠性和恢复速度。
子卷:支持子卷,可以更灵活地管理文件系统。
数据校验:支持数据校验,提高数据完整性。
在线修复:支持在线修复损坏的数据。
透明压缩:支持透明压缩,节省存储空间。
适用场景:
需要高级文件系统功能的场景,如数据备份、虚拟化等。
对数据完整性和可靠性有较高要求的场景。
ReiserFS
特点:
高性能:设计用于高性能和小文件处理。
日志功能:支持日志功能,提高文件系统的可靠性和恢复速度。
小文件优化:对小文件的处理性能较好。
适用场景:
需要处理大量小文件的场景。
对文件系统性能有较高要求的场景。
7, F2FS (Flash-Friendly File System)
特点:
闪存优化:专门为闪存存储设备设计,减少擦除次数,提高寿命。
快速随机写入:优化随机写入性能。
垃圾回收:支持垃圾回收机制,提高性能和寿命。
适用场景:
移动设备和固态硬盘(SSD)。
需要高性能和长寿命的存储设备
总结
ext4:通用用途,适合大多数Linux系统,对文件系统可靠性和性能有较高要求。
XFS:高性能计算和大规模数据存储,适合高I/O性能需求。
Btrfs:高级功能丰富,适合需要快照、克隆、数据校验等高级特性的场景。
ReiserFS:处理大量小文件的高性能需求。
F2FS:闪存优化,适合移动设备和固态硬盘
4,挂载分区
创建并格式化分区后,需要将其挂载到一个目录上。
创建挂载点:
sudo mkdir /mnt/newdisk
挂载分区:
sudo mount /dev/sdX1 /mnt/newdisk
5,更新 /etc/fstab 文件
为了确保系统重启后分区仍然挂载,需要将挂载信息添加到 /etc/fstab 文件中。
获取分区的UUID(推荐使用UUID,因为它更稳定):
sudo blkid /dev/sdX1
编辑 /etc/fstab 文件:
sudo nano /etc/fstab
添加挂载条目:
Plaintext
UUID=your-uuid /mnt/newdisk ext4 defaults 0 0
其中 your-uuid 是上一步中获取的UUID,ext4 是文件系统类型,defaults 是挂载选项,0 是备份选项,0 是文件系统检查顺序。
示例
假设新磁盘是 /dev/sdb,并且你已经创建了一个分区 /dev/sdb1,格式化为 ext4 文件系统,并且挂载点为 /mnt/newdisk。
创建分区:
sudo fdisk /dev/sdb
格式化分区:
sudo mkfs.ext4 /dev/sdb1
创建挂载点:
sudo mkdir /mnt/newdisk
挂载分区:
sudo mount /dev/sdb1 /mnt/newdisk
获取UUID:
sudo blkid /dev/sdb1
编辑 /etc/fstab 文件:
sudo nano /etc/fstab
添加挂载条目:
Plaintext
UUID=your-uuid /mnt/newdisk ext4 defaults 0 0
验证挂载
重启系统或重新加载 fstab 文件以验证挂载是否成功。
重新加载 fstab 文件
sudo mount -a
检查挂载情况
df -h
如果一切正常,你应该能看到新的分区已经挂载到指定的目录上