Bash 快捷操作

Bash 快捷操作 GUN Bash 是现代操作系统一般都默认自带的 Shell,它兼容 sh 并提供了更多的 feature,如果我们常用命令行那么记住一些快捷键和 trick 能大大提高我们的工作效率,这篇文章就介绍下本人常用的快捷键和一些技巧。 Bash 默认的是 emacs 模式,这里的快捷键以默认的为准,可以使用set -o命令查看,使用set -o emacs设置。 移动光标 快捷键 描述 Ctrl + a 移动光标到行首 Ctrl + e 移动光标到行尾 Alt + b 移动光标后退一个单词(词首) Alt + f 移动光标前进一个单词(词首) Ctrl + f 光标前进一个字母 Ctrl + b 光标后退一个字母 Ctrl + xx 当前位置与行首之间光标切换 一般配合Ctrl的是单字符移动,Alt是单词为边界。建议将键盘上的caps lock键改成Ctrl这样手指移动距离更短按起来也更加舒服方便。 剪切(删除)粘贴 快捷键 描述 Ctrl + k 剪切从光标到行尾 Ctrl + u 剪切从光标到行首 Ctrl + w 从光标向前剪切一个单词 Alt + Backspace 与 Ctrl + w 类似,但分隔符是一些特殊字符 Alt + d 从光标向后剪切一个单词 Ctrl + d 删除光标下一个字母,如果没有字符存在,ctrl+d 则会登出该会话 Ctrl + h 删除光标前一个字母 Alt + t swap(当前单词, 上一个单词) Ctrl + t swap(当前字母, 上一个字母) Ctrl + y 粘贴上一次剪切的文本,配合 Ctrl-u、Ctrl-k 效果极好 大小写转换 快捷键 描述 Alt + c 大写当前字母,并移动光标到单词尾 Alt + u 大写从当光标到单词尾 Alt + l 小写从当光标到单词尾 历史命令 快捷键 描述 Ctrl + r 向后搜索历史命令 Ctrl + g 退出搜索 Ctrl + p 历史中上一个命令,代替向上方向键 Ctrl + n 历史中下一个命令,代替乡下方向键 Alt + ....

July 14, 2020 · 3 min · 459 words · Fython

使用 Core dump 解密加密的sh脚本

使用 Core dump 解密加密的脚本 之前遇到网上的集成的shell脚本有点问题想手动修改下,发现脚本是加密的,网上找了好久发现有gzexe、shc加密方法都尝试了一遍,可惜解密都不成功,最后用了一个粗暴的办法就是任何程序总要加载到内存运行的吧,那就直接中断coredump查看内存里的内容,以下是具体方法。 root用户执行如下命令 ulimit -c unlimited echo "/core_dump/%e-%p-%t.core" > /proc/sys/kernel/core_pattern mkdir /core_dump 以上第一句是设置内核coredump大小,这里设置不限制。第二句是设置coredump存储位置和格式,%e代表可执行程序名,%p代表pid, %t代表生成时间。然后去执行脚本如xxx.sh ./xxx.sh 6 start & (sleep 0.01 && kill -SIGSEGV $!) 之后会输出类似[1]+ Segmentation fault (core dumped)...的提示,然后查看/core_dump文件夹下,就会有dump出来的文件了,直接vim打开查看会有一些乱码手动处理一下就可以了。 如果在core_dump文件夹下没有dump出来的文件,可使用如下命令测试然后查看是否有文件生成。 sleep 15 & killall -SIGSEGV sleep 正常情况下core_dump文件夹下会有以sleep开头的文件。

October 16, 2019 · 1 min · 40 words · Fython

Mysql数据库备份脚本(使用mysqldump)

Mysql(mysqldump)备份脚本 记录下服务器上一个备份 mysql 数据库的脚本,使用 mysql 自带的mysqldump命令 !/usr/bin/env bash USER=username PASSWORD=password MAXIMUM_BACKUP_FILES=10 BACKUP_FOLDER=/path/to/save/folder DATABASES=( db_name_0 db_name_1 ) # check mysqldump instlled _=$(command -v mysqldump) if [[ $? != 0 ]] then printf "You don't seem to mysqldump installed, exit..\n" exit 1 fi # create backup folder if [ ! -d $BACKUP_FOLDER ] then mkdir $BACKUP_FOLDER fi # backup for DB in ${DATABASES[@]} do echo backing up ${DB} database ... if $(mysqldump --host=localhost --user=${USER} --password=${PASSWORD} ${DB} | gzip -9 > ${BACKUP_FOLDER}/db_${DB}_$(date +"%Y%m%d")....

November 8, 2018 · 2 min · 260 words · Fython

Systemd 中的timer单元

Systemd 中的 timer 单元 上一篇讲了 systemd 中的 service 单元,这次记录一下 timer 单元。timer 必须依赖 service 单元来配置,可以用来做替代 crontab 的选择。 timer 单元以.timer结尾,中间包含[Timer]块如下面所示是 Ubuntu 下的apt-daily.timer,该目录下也存在一个apt-daily.service服务文件配合一起使用。 [Unit] Description=Daily apt activities [Timer] OnCalendar=*-*-* 6,18:00 RandomizedDelaySec=12h AccuracySec=1h Persistent=true [Install] WantedBy=timers.target 上面的[Timer]块代表每天上午 6 点和下午 6 点都运行 apt 脚本,具体[Timer]块可配置以下参数 单调定时器(Monotonic timer) Option Description OnActiveSec= 相对计时器开始后多少时间执行,格式如 2h、2s、2w、2d OnBootSec= 相对系统启动后多少时间执行 OnStartupSec= 相对 systemd 启动多少时间后执行 OnUnitActiveSec= 每隔多少时间再次运行一次 OnUnitInactiveSec= 服务在最后一次停止后,隔多久再执行一次 可以两个参数一起使用,如下每周开机 15 分钟后执行 foo [Unit] Description=Run foo weekly and on boot [Timer] OnBootSec=15min OnUnitActiveSec=1w [Install] WantedBy=timers....

August 16, 2018 · 1 min · 210 words · Fython

Systemd中Service单元介绍

Systemd中Service单元介绍 Systemd是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程,集中管理和配置类UNIX系统,可见它非常的强大。 Systemd分为多个单元(unit)如服务(.service),挂载点(.mount),套接口(.socket)和设备(.device)等,这里记录使用最多的服务(service)文件的编写。用户自定义的一般存放在/etc/systemd/sytem/文件夹下,还有另外的文件夹类debian系列的如下。 Directory Description /lib/systemd/system/ 系统自带的或者程序自带安装的单元存放在此 /etc/systemd/system/ 用户自定义的,此文件夹优先级最高,可以覆盖上面文件夹的内容 下面是系统安装openssh-server后,在/lib/systemd/system/ssh.service下的服务。 [Unit] Description=OpenBSD Secure Shell server After=network.target auditd.service ConditionPathExists=!/etc/ssh/sshd_not_to_be_run [Service] EnvironmentFile=-/etc/default/ssh ExecStart=/usr/sbin/sshd -D $SSHD_OPTS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartPreventExitStatus=255 Type=notify [Install] WantedBy=multi-user.target Alias=sshd.service 如上所示一般每个Unit都有各个块(section)组成,由[]包裹就是块名。下面的就是配置,直到另一个块开始为止。 [Unit] section [Unit]一般是第一个块文件配置,配置各种元数据(metadata)和其他单元的关系 Option Description Description= 这个单元的描述字符串 Documentation= 文档链接 Requires= 运行这个单元所需要的依赖单元,否则启动失败 Wants= 和上面Requires相似,但是非强限制。如果列出在此的单元没有启动,本单元也还是能启动持续运行 BindsTo= 和上面Requires相似,区别是列出在此的单元终止了,本单元也会停止 Before= 在此列出的单元,只有在本单元启动后才会启动。但不是依赖关系,如需依赖配置上述Requires命令 After= 在启动本单元之前,先要启动在此列出的单元。但不是依赖关系,如需依赖配置上述Requires命令 Conflicts= 在此列出的单元,不能和本单元同时运行,和Requires相反 OnFailure= 在此列出的单元将会在本单元失败后激活 还有很多的如Condition...和Assert...配置详情可以查看手册man 5 systemd.unit [Install] section [Install]一般是最后一个块文件配置,这个是可选项,也就是说可以不配置。只有在开机启动激活(enable)时触发。 Option Description WantedBy= 指定该单元如何开机启动(enable),依赖在此列出的单元,有点类似[Unit]块中的Wants,不同的是它会创建软链接到.wants文件夹,如上sshd如果被enable,该单元会创建一个软链接到/etc/systemd/system/multi-user.target.wants文件夹下,如果文件夹不存在则创建文件夹再软链接。 RequiredBy= 和上面WantedBy类似,但如果在此列出的单元没有激活,本单元会激活失败,同样在.requires文件夹下创建软链接。 Alias= 设置改单元的别名,可以给systemctl使用,例如上面sshd的开机启动可以使用 systemctl enable ssh....

July 8, 2018 · 2 min · 315 words · Fython