甜甜圈の杂物间 - Shell
type: channel
link: https://www.nekoneko.best/tag/Shell/
items: Linux常用指令整理(一)
items: 自动备份typecho博客至Github

Linux常用指令整理(一)
type: item
date: 2022-05-27T04:04:00+00:00
description: 头图来源：海行こ？-あるみっく-pixivContent文件相关查看文件属性查找文件从磁盘或指定目录查找从环境变量PATH中查找查找包含指定内容的文件分割文件排序文件文本内容查看文件差异删除文件or文件夹移动文件or文件夹复制文件or文件夹新建文件新建文件夹复制文件中的多行到另一文件磁盘管理查看磁盘占用查看内存\CPU占用进程相关显示进程快照kill命令查看端口占用权限相关更改文件or文件夹用户和组权限授予更改用户网络相关指令设置路由规则DNS解析文件相关查看文件属性$ls [-alrtAFR] [name...]相关参数：-a 显示所有文件及目录（包括.开头的隐藏文件）-l 显示文件型态、权限、拥有者、文件大小等详细信息-r 将文件以相反次序显示（英文字母逆序）-t 将文件建立时间按从旧到新排序-A 同-a，但不列出"."（当前目录）以及".."（父目录）-F 在列出的文件名称后加一符号：可执行文件加"*"，目录加"/"-R 递归地显示当前目录及子目录下的文件查找文件从磁盘或指定目录查找$find path -option [-print] [-exec -ok command] {}相关参数：find根据下列规则判断path和expression，在命令列第一个-{},!之前的部分为path，之后为expression。如果path为空则默认使用目前路径，如果expression为空则使用-print为预设expressionexpression：-mount,-xdev 只检查和指定目录在同一文件系统下的文件，避免列出其他文件系统的文件-amin n 在过去n分钟内被读取过（超过n分钟前则在n前加"+"，下同）-anewer file 比文件file更晚被读过的文件-atime n 在过去n天内被读取过的文件-cmin n 在过去n分钟内创建的文件-cnewer file 比文件file更晚被修改的文件-ctime n 在过去n天内创建的文件-mtime n 在过去n天内被修改过的文件-perm xxx 符合权限表达式的文件-empty 空的文件-gid n gid是n的文件-group name group是name的文件-(i)path p 路径文件符合p的文件，加i表示忽略大小写-(i)name n 文件名称符合n的文件，加i表示忽略大小写-size n 文件大小是n的文件。 n的单位：b 512位元组区块c 表示字元数k 表示kb-type c 文件类型是c的文件。 c的取值：d 目录b 区块装置文件p 具名贮列f 一般文件l 符号链接s 套接字文件-pid n 进程id是n的文件[scode type="blue"]可以使用()将运算式分隔，并使用下列运算exp1 and exp2 同时符合两运算式!exp 不符合指定运算式exp1 or exp2 符合运算式1或运算式2[/scode]从环境变量PATH中查找$which name$whereis name以上两种命令会输出指定name文件在环境变量PATH中配置的路径查找包含指定内容的文件$grep [-abcEFGHilLnqrsvVwxy][-A n][-B n][-C n][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]grep命令用于查找文件里符合条件的字符串，也可以用来查找包含查询字符串的文件。相关参数：-aor--text 不忽略二进制数据-bor--byte-offset 在显示符合范本样式的那一行之前，标出该行第一个字符的编号-A nor--after-context=n 除了显示符合范本样式的那一行之外，并显示该行之后n行的内容-B nor--before-context=n 除了显示符合范本样式的那一行之外，并显示该行之前n行的内容-cor--count 计算符合范本样式的行数-C nor--context=norn 除了显示符合样式的那一行之外，并显示该行之前之后各n行的内容-Eor--extended-regexp 使用正则表达式作为范本样式来匹配-f fileor--file=file 指定规则文件，文件中包含一个或多个范本样式，让grep查找符合规则条件的文件内容，格式为每行一个规则样式-For--fixed-regexp 将范本样式视为固定字符串的列表-Gor--basic-regexp 将范本样式视为普通的表示法来使用-hor--no-filename 在显示范本样式的那一行之前不标出包含该行的文件名称-Hor--with-filename 在显示范本样式的那一行之前标出包含该行的文件名称-ior--ignore-case 忽略字符大小写-lor--file-with…

自动备份typecho博客至Github
type: item
date: 2022-01-12T04:00:00+00:00
description: 之前都是手动进行备份即麻烦又不节能，于是今天心血来潮写了个脚本挂服务器上一到时间让它自己备份到GitHub。话不多说，具体做法如下头图来源：青色の風-みふる-pixiv初始化本地仓库既然要将备份上传到GitHub，那就得先建一个仓库（ps：记得将仓库设置为private），这部分具体过程随便一搜就有于是省略。仓库目录大致如下. ├── .git ├── backup.log #备份日志 ├── db_bak #数据库备份（sql文件）所在路径 │ └── ***.sql ├── README.md └── wwwroot └── yukinekoneko.com ├── config.inc.php ├── admin ├── index.php ├── install ├── install.php ├── LICENSE.txt ├── usr #usr文件夹所在路径 └── var编写脚本对于typecho博客，我们主要备份的就两样东西:数据库和usr文件夹，将这两样备份起来推送至远程仓库即可。为了方便调试排错，可将当前脚本执行动作输出打印至日志文件（backup.log）。采用https的方式推送至远程仓库（这里用ssh的话可能会更方便一点）#! /bin/bash cd 你本地仓库路径 INTERVAL=21 #删除现在距之前指定间隔天数的数据库备份 DB_BAK_DIR= 数据库备份（sql文件）所在路径 BLOG_BAK_DIR= usr文件夹所在路径 DATE=`date +%Y/%m/%d` #当前系统时间 DB_USER= 数据库账户 DB_PWD= 数据库密码 DATABASE= 所要备份的数据库（就是typecho所用的数据库） DEL_DATE=`date -d "${DATE} -${INTERVAL} day" +%Y/%m/%d` #数据库备份 echo "-------$(date +%F_%T) start-------">>backup.log mysqldump -u${DB_USER} -p${DB_PWD} ${DATABASE}>${DB_BAK_DIR}/data_backup_${DATE}.sql echo "--- data backup completed">>backup.log #删除早期的数据库备份 if [ -a "${DB_BAK_DIR}/data_backup_${DEL_DATE}.sql" ];then rm -f ${DB_BAK_DIR}/data_backup_${DEL_DATE}.sql echo "---delete data_backup_${DEL_DATE}.sql">>backup.log fi #推送至远程仓库 echo "---push to remote repository">>backup.log git add ${DB_BAK_DIR} git add ${BLOG_BAK_DIR} echo `git commit -m "bak-${DATE}"`>>backup.log echo `git push -u origin main`>>backup.log echo "---git push completed">>backup.log[scode type="yellow"]即使配置了GitHub账户和邮箱每次推送至远程仓库Github都还会再请求输入账户和Token，此时可以在GitHub配置中添加$ git config --global credential.helper store一项,这样只需输入一次用户名和Token之后就无需再输入[/scode]使用crontab制定定时任务在编写好脚本之后接下来的就是重头戏了，关于crontab的用法这里有一篇文章讲得很仔细crontab 定时任务做法就是输入命令$ crontab -e来设定你所需执行的定时任务，具体格式如下：第1列分钟0～59第2列小时0～23（0表示子夜）第3列日1～31第4列月1～12第5列星期0～7（0和7表示星期天）第6列要运行的命令至于备份的频率按各自喜好设定即可，我更博的频率比较佛系所以就设定一周执行一次备份0 11 * * 3 /root/backup.sh #每周三十一点执行脚本这里我是将备份脚本放在了根路径。设定好定时任务后重启一下crontabsystemctl restart crond.service备份后通知（可做可不做）这一步主要是通过在IFTTT上挂个webhook，这样每次自动备份到GitHub的时候能够通知你博客已经备份完成。创建你的Applet步骤非常简单，当然首先你需要有一个IFTTT帐号，没有的话快速申请一…