Linux
Linux
就像 Windows XP、Windows 7、Windows 8 和 Mac OS X 一样,Linux 是一个操作系统。
操作系统是管理与您的台式机或笔记本电脑相关的所有硬件资源的软件。
简单来说 - 操作系统管理着软件和硬件之间的通信。
没有操作系统(通常称为“OS”),软件就无法正常运行。
目录介绍
- 索引结构
root@iZuf60ahcky4k4nfv470juZ:/# ls /
bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
dir | desc |
---|---|
bin | 存放着最经常使用的命令 |
boot | 启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件 |
dev | Linux的外部设备 |
etc | 系统管理所需要的配置文件和子目录 |
home | 用户的主目录 |
lib | 系统最基本的动态连接共享库 |
lost+found | 当系统非法关机后,这里就存放了一些文件 |
media | linux系统会自动识别一些设备,例如U盘、光驱等,linux会把识别的设备挂载到这个目录下 |
mnt | 让用户临时挂载别的文件系统 |
opt | 额外安装软件所摆放的目录 |
proc | 虚拟目录,是系统内存的映射,可通过直接访问这个目录获取系统信息 |
root | 超级权限者的用户主目录 |
run | |
sbin | 统管理员使用的系统管理程序 |
srv | 一些服务启动之后需要提取的数据 |
tmp | 存放一些临时文件的 |
usr | 存放用户的应用程序和文件 |
var | 存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件 |
Linux 命令
cat
cat命令用于将文件内容连接后输出到标准输出(屏幕)或者重定向到另一个文件。
-n 或 --number: 对所有输出的行数进行编号,从1开始。
-b 或 --number-nonblank: 类似于 -n,但是对于空白行不编号。
-s 或 --squeeze-blank: 当遇到连续两行以上的空白行时,将其代换为一行的空白行。
-v 或 --show-nonprinting: 显示非打印字符。
>
重定向,>>
追加
将带有行号的 cat_original.txt
文件内容重定向到 cat_backup.txt
文件:
cat -n cat_original.txt > cat_backup.txt
清空 cat_original.txt
文件的内容:
cat /dev/null > cat_original.txt
chmod
houbinbindeMacBook-Pro:linux houbinbin$ chmod
usage: chmod [-fhv] [-R [-H | -L | -P]] [-a | +a | =a [i][# [ n]]] mode|entry file ...
chmod [-fhv] [-R [-H | -L | -P]] [-E | -C | -N | -i | -I] file ...
mode 参数说明:
[ugoa...][[+-=][rwxX]...][,...]
u 表示文件的拥有者,g 表示与文件的拥有者属于同一个群组的用户,o 表示其他用户,a 表示所有用户
+ 表示添加权限、- 表示移除权限、= 表示设置唯一权限
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当文件是目录或已经被设置为可执行时
cmp
比较两个文件之间的差异。
diff
比较两个文件之间的差异。
"|" 表示前后两个文件内容有不同
"<" 表示后一个文件比前一个文件少了1行内容
">" 表示后一个文件比前一个文件多了1行内容
示例
houbinbindeMacBook-Pro:linux houbinbin$ diff cat_original.txt cat_backup.txt
4a5
> 5
file
获取文件信息。
houbinbindeMacBook-Pro:linux houbinbin$ file cat_original.txt
cat_original.txt: ASCII text
find
Linux 的 find 命令用于在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件,并将查找到的子目录和文件全部显示。
定时执行任务
Q: linux 如何实现 定时执行任务?
在Linux系统中,可以使用cron(cron daemon)来实现定时执行任务。
cron是一个守护进程,它可以周期性地执行预定的任务。以下是使用cron实现定时执行任务的步骤:
-
编辑cron表:使用
crontab
命令编辑cron表。每个用户都有一个cron表,存储了用户定义的定时任务。使用crontab -e
命令编辑当前用户的cron表。 -
指定任务时间:在cron表中,使用cron语法指定任务的执行时间。cron语法的格式如下:
* * * * * command_to_execute
其中,五个星号分别代表分钟、小时、日期、月份和星期几。
command_to_execute
是要执行的命令或脚本。 -
编辑任务:将要执行的命令或脚本添加到cron表中,并指定执行的时间。可以使用文本编辑器编辑cron表。
-
保存并退出:完成编辑后,保存cron表并退出编辑器。
-
检查任务:可以使用
crontab -l
命令查看当前用户的cron表,确认任务是否已经添加。 -
重启cron服务(可选):如果对cron服务进行了更改,可能需要重启cron服务以使更改生效。可以使用
service cron restart
或systemctl restart cron
命令来重启cron服务。
以下是一个示例,演示如何在每天的凌晨1点执行一个备份脚本:
0 1 * * * /path/to/backup_script.sh
这个cron表条目指定了在每天的凌晨1点执行/path/to/backup_script.sh
脚本。
需要注意的是,cron表中的时间是基于系统时钟的,因此确保系统时钟的准确性非常重要。此外,要确保执行的命令或脚本具有适当的权限,并且指定的路径是正确的。
通过使用cron,可以方便地在Linux系统上安排和管理各种定时任务,例如定期备份、定时数据处理、定时报告生成等。
Q: 解设我在 /app/logs/ 文件下面有很多日志,日志命名规则为 app-yyyyMMdd.log,如何写一个定时 shell,每天对3天前的日志进行归档?
你可以编写一个shell脚本,利用Linux的find
命令和tar
命令来实现对3天前的日志文件进行归档。以下是一个示例shell脚本:
#!/bin/bash
# 设置日志文件所在目录
LOG_DIR="/app/logs"
# 设置归档目录
ARCHIVE_DIR="/app/logs/archive"
# 获取三天前的日期
THREE_DAYS_AGO=$(date -d "3 days ago" "+%Y%m%d")
# 搜索三天前的日志文件,并归档
find "$LOG_DIR" -maxdepth 1 -type f -name "app-$THREE_DAYS_AGO.log" -exec tar -cvzf "$ARCHIVE_DIR/app-$THREE_DAYS_AGO.tar.gz" {} \;
# 删除已归档的日志文件
find "$LOG_DIR" -maxdepth 1 -type f -name "app-$THREE_DAYS_AGO.log" -exec rm {} \;
上述脚本会执行以下操作:
- 设置日志文件所在目录为
LOG_DIR
变量,归档目录为ARCHIVE_DIR
变量。 - 使用
date
命令获取三天前的日期,并保存到THREE_DAYS_AGO
变量中。 - 使用
find
命令搜索日志目录中三天前的日志文件(文件名符合规则app-yyyyMMdd.log
),并利用tar
命令将其归档到归档目录中。 - 使用
find
命令删除已归档的日志文件。
你可以将以上代码保存为一个shell脚本文件,比如archive_logs.sh
,然后使用cron定时执行这个脚本,每天执行一次。编辑cron表,添加一条定时任务:
0 0 * * * /path/to/archive_logs.sh
这条定时任务表示每天的午夜零点执行archive_logs.sh
脚本,对三天前的日志进行归档。
确保将/path/to/archive_logs.sh
替换为脚本文件的实际路径。