常用易忘记命令
AWS EC2 Debian登录后切换到root用户
sudo -snodepadd++ 模糊查找替换
例如要替换sql中的所有AUTO_INCREMENT= 值为1,如果新从数据库导出的结构,该值因为是自增,一般每个表的值会不一样,想将sql导入一个新库,同时让该值设置为1。
CREATE TABLE `canal_jsc_bill_batch` (
`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
...
KEY `idx_State` (`State`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=134191 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='物流商汇款批次表';
CREATE TABLE `canal_jsc_bill_info` (
`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
...
KEY `idx_BatchSN` (`BatchSN`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1228689 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='对账单表';切换查的模式为“正则表达式”。用\d来匹配数字 
因为不知道最长的数字有多少个,可以先把\d的个数设置多一点,当达到某个长度无法查询出结果时,则表示超过了数字的长度,然后从长度减一开始查找替换。直至长度为一,全部完成替换
AUTO_INCREMENT=\d\d\d\d\d\d\d\d\d
# 大括号{}中的数字表示重复几次
AUTO_INCREMENT=\d{9}其它匹配符号
\s
匹配空格. 注意,会匹配标记的末尾. 使用 [[:blank:]] 来避免匹配新一行。
\S
匹配非空白
\w
匹配单词字符
\W
匹配非单词字符
\d
匹配数字字符
\D
匹配非数字字符
\b
匹配单词边界. ‘\bW\w+’ 找到W开头的单词
\B
匹配非单词边界. ‘\Be\B+’ – 找到位于单子中间的字母’e’
Linux 手动释放内存
cat /proc/sys/vm/drop_caches
0
echo 1 > /proc/sys/vm/drop_caches
# 或者使用如下命令来配置
sysctl -w vm.drop_caches=1
drop_caches的值可以是0-3之间的数字,代表不同的含义: 0:不释放(系统默认值) 1:释放页缓存 2:释放[[dentries和inodes]] 3:释放所有缓存
有时在释放内存后,想将drop_caches的值改回0,会发现报如下错误
echo 0 > /proc/sys/vm/drop_caches
-bash: echo: 写错误: 无效的参数
echo 0 > /proc/sys/vm/drop_caches
-bash: echo: write error: Invalid argument实际上只能使用值 1,2 和 3。没有值 0。启动清除缓存的触发器之后,缓存将立即再次开始缓存。
shell 批量注释
用:<< + 一个字符串来标识注释的开头和结尾。则中间部分会全部注释。
#!/bin/bash
:<<eof
echo "1"
echo "2"
echo "3"
echo "4"
eof
echo "5"
延伸用法:
: 表示为空命令,即什么都不做,类似Python中的pass
if [ 0 -eq 0 ]; then
:
else:
echo "something~"<< 可以用做菜单,例如如下脚本执行后会输出1 2 3条内容
cat <<Menu
1.List
2.Help
3.Exit
Menu
#ubuntu
ubuntu18.04 server 手动配置静态IP,使用netplan 严格注意yaml格式
ubuntu@ubuntu:~$ cat /etc/netplan/01-netcfg.yaml
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
# 以下为添加部分
ethernets:
ens160: # 网卡名称,请通过ip ad命令查看
addresses: [ 192.168.2.2/16 ]
gateway4: 192.168.2.1
nameservers:
addresses:
- "223.5.5.5"改好配置之后
sudo netplan apply # 使之生效linux正在运行的前台脚本切换到后台
Ctrl+Z # 将正在前台运行的命令暂停至后台
jobs # 查看所有在后台的任务信息
fg $NUM # fg 加后台任务编号可以将后台暂停任务切回前台继续有多个命令要写入同一文件
echo aa >> 1.log
echo bb >> 1.log
date >> 1.log可以精简为
{
echo aa
echo bb
date
} >> 1.log
shell中,引用某个命令的结果
建议使用$(),而不是`。同时$()建议用双引号引起来,防止命令被空格分割。不过在ubuntu上测试发现加上引号会影响for循环逐行读取
echo `ls | grep abc` > 1.log # 旧
echo $(ls | grep abc) > 1.log # 新
echo "$(ls | grep abc)" > 1.log # 最佳shell中切换目录时,为防止目录不存在,导致后续命令执行错误
可以加上 ||。跟 && 的意思相反,此外,该用法还适用其它命令
cd /111 || exit # 如果/111目录不存在,直接报错并退出脚本,不再执行后面的命令
echo $PWD
linux 用[[ls命令–显示指定工作目录下的内容及属性信息|ls命令]]查看当前目录下文件大小,还可以用[[du命令-统计文件大小]]
ls -lShNCR: no country redirect,google 的 url 参数,不根据国家位置重定向。
linux删除带特殊字符的文件
使用绝对路径加TAB补全文件名,例如tmp目录有一个--.xls文件
cd /tmp/
rm /tmp/--.xlsLinux 踢出登录用户
w # 查看用户操作命令
who -H # 查看用户登录地址及时间
pkill -u username # 踢出指定的所有用户
pkill -kill -t pts/0 # 根据用户访问进程踢出指定用户
[[yum命令]]安装选择版本
yum list --showduplicates kubeadm # 查看指定软件用yum可安装的版本信息
kubeadm.x86_64 1.6.0-0 kubernetes
kubeadm.x86_64 1.6.1-0 kubernetes
kubeadm.x86_64 1.6.2-0 kubernetes
yum install kubeadm-1.6.1-0linux 下通过修改IFS来调整系统默认命令分隔符。可以用来处理linux中文件名有空格的问题。
IFS_OLD=$IFS #將当前值保存
IFS=$'\n' # 指定分隔符。 \n 用换行符当分隔符, IFS=$',' 逗号, IFS=$'"' 双引号
for line in /home/user/test_file
do
echo "$line"
done
IFS=$IFS_OLD #恢復之前保存的值#tar命令
[[Linux命令/tar命令–打包和备份的归档工具|tar命令]] 打包放到指定目录下
环境说明,需要打包的目录在 /tmp/ 下名为 test,打包后的压缩包放到 /usr/src/目录下
tar -czPf /usr/src/test.tar.gz /tmp/test #需要使用参数 -P(大写)来允许我们使用绝对路径进行压缩打包
# -P don't strip leading `/'s from file names # 不要从文件名中删除前导“ /”如果不加-P 或者 -P 参数在 -f 前,那就会报如下错误,虽然不影响打包结果,但说明命令格式是有误的。
tar -czf /usr/src/test.tar.gz /tmp/test
tar: Removing leading `/' from member names 其它用法,参考[[Linux命令/tar命令–打包和备份的归档工具]]
shell 写成一行
每个命令之间用;隔开
while 和 for
ls | while read line; do echo $line;done
ls | grep 2019-12-02 | grep "name" | while read line; do cp $line /tmp/20191202_jscdb; done;
for line in `ls | grep 2019-12-02 | grep "name"`; do cp $line /tmp/20191202_jscdb; done;if
if [ "$a"x = "1"x ]; then sh 1.sh & echo "123"; sh st.sh ;fifor循环写成一行,每行之间用英文分号;隔开即可
例:以下a变量存储的结果为登录系统失败的IP,通过for循环依次打印出来。
a=`lastb -a | head -n -2 | awk -F ' ' '{print $NF}'`
for i in $a; do echo $i; done在centos7中增加脚本开机启动的两种常用的方法:
修改
/etc/rc.d/rc.local文件并修改配置脚本放到
/etc/rc.d/init.d目录下并进行配置
rc.local的用法
以linux下指定sun用户在linux开机时执行/home/sun/startrun.sh为例: 以root登录linux 执行vi /etc/rc.d/rc.local 在文档末尾添加一行语句:su sun -c "/home/sun/startrun.sh" 保存rc.local即可。
rc.local里面的命令开机自启不生效的原因:
/etc/rc.d/rc.local 文件默认没有可执行权限
chmod +x /etc/rc.d/rc.local
# 给该文件添加可执行权限,系统启动后该文件里的命令即可自动执行dirname去除文件名中的非目录部分,例如:
dirname /etc/my.cnf
/etc[[uniq去重命令]]
1、利用Linux wheel组限制只有指定用户可以使用su提权至root
Linux系统下wheel相当于是一个管理员组,配合相应的配置文件可以指定只有该组的用户才能使用su提升至root权限。如果不修改配置文件,跟普通用户组一样
操作步骤
vi /etc/pam.d/su
auth required pam_wheel.so use_uid # 取消该行的注释,保存退出
vi /etc/login.defs
SU_WHEEL_ONLY yes # 在最后一行添加本行内容,指定只有wheel组可以使用su 命令
usermod -G wheel username # 将username加入wheel组,username用户将有使用su命令提升至root的权限。linux挂载windows共享目录
mount -t cifs //192.168.1.181/share /opt/windows -o username=administrater,password=123456
mount --bind 是什么意思?
mount --bind 是将一个目录中的内容挂载到另一个目录上,用法是
mount --bind src_dir dst_dir 这个命令使得自己搭建的FTP要共享某个目录的时候变得特别方便。如果要取消mount用命令:
mount --move src_dir dst_dir 如果mount --bind 也想写入fstab中的话格式如下:
vi /etc/fstab
src_dir dst_dir none bind 0 0centos6如何增加一个服务:
服务脚本必须存放在/etc/ini.d/目录下;放在该目录下的服务脚本即可使用service name start|stop|restart 来控制
cat iso > /dev/sdb # cat 镜像名 > u盘位置 u盘位置无需挂载启动 bind 时,需产生 rndc.key 文件,但长时间无响应
解决办法,建议先手动添加 rndc.key 文件 记得之前版本中, bind 默认会安装该文件,但导致每台机器 key 文件一致 可通过下面先方法手动生成文件
rndc-confgen -r /dev/urandom -a
write key file "/etc/rndc.key"之后启动 bind 服务一切正常
linux 记录命令时间
vim /etc/profile
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "批量结束同一程序进程
以下为批量结束名为webbench的进程,cut -c 9-15 显示第9到15位的字符(也就是PID)。xargs命令用于读取前面的PID,并执行后面的kill命令
ps -ef | grep webbench | cut -c 9-15 | xargs killcentos 7.3直接复制yum源文件到其它服务器,提示以下错误
……
Cannot find a valid baseurl for repo: webtatic/x86_64是因为/var/cache/yum/x86_64/7/目录下没有对应的文件,要一并复制过去
Linux 配置http proxy
vi /etc/profile
export http_proxy=127.0.0.0:8080
export https_proxy=$http_proxy
source /etc/profile给rm 命令加一个回收站
git clone https://github.com/lagerspetz/linux-stuff.git
sudo mv linux-stuff/scripts/saferm.sh /bin
rm -Rf linux-stuff
vi ~/.bashrc
# alias rm='rm -i' #注释旧的rm命令别名
alias rm=saferm.sh #将rm命令设置为该脚本回收站位置,以root为例,在/root/Trash目录下 为了防止长时间不清空,导致回收站文件过多,可以通过crontab来定期清理
crontab -e
0 0 */1 * * /usr/bin/rm -rf /root/Trash #每天0点清除这个目录。生成随机字符串的几种方法
openssl rand -base64 12
date +%s |sha256sum |base64 |head -c 12 ;echo
cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 12tomcat之一:指定tomcat运行时JDK版本
修改$TOMCAT/bin/setclasspath.sh,在最前面加入以下两行(tomcat8.5)
export JAVA_HOME=/usr/local/jdk1.8.0_191/
export JRE_HOME=/usr/local/jdk1.8.0_191/jreTomcat通过%D或%T统计请求响应时间
server.xml使用配置方式
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u [%{yyyy-MM-dd HH:mm:ss}t] %{X-Real_IP}i "%r" %s %b %D %F" />%D 官方解释:Time taken to process the request, in millis,处理请求的时间,以毫秒为单位
%T 官方解释:Time taken to process the request, in seconds,处理请求的时间,以秒为单位
%F 官方解释:Time taken to commit the response, in millis,提交响应的时间,以毫秒为单位
java 环境变量配置
JAVA_HOME=/usr/local/jdk1.8.0_171
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/binLinux环境下java项目后后台登录不了,加入以下环境变量
export CATALINA_OPTS="-Xms512m -Xmx1024m -Xmn768m -Xss2m -XX:NewSize=256M -XX:MaxNewSize=256m -XX:PermSize=256M -XX:MaxPermSize=512m -XX:-UseSplitVerifier"查找、删除符合条件的文件
[[tail命令]]
tail -n 10 filename # 显示最后10行,等于tail -n -10 filename
tail -n +10 # 从tail过滤出来的结果中第10行开始显示例如,有个目录下每天会产生一个.log文件,现需要每天自动删除目录下超过7天的.log日志 思路:过滤出包含log关键字的文件名,并记录行数, 用-gt 判断是否大于7,如果大于7,则用tail -n +8 (用tail 从结果的第8行开始显示)筛选出日志名称,并用xargs 调用该结果,交给/usr/bin/rm -rf 进行删除 if [ ls -l | grep log | wc -l -gt 7 ]; then ls -lt | grep log | tail -n +8 | xargs /usr/bin/rm -rf fi
更合理的方式应该是用[[find命令–查找和搜索文件|find命令]]来判断
find /path/*.log -mtime +7 -exec rm -rf {} \;[[head命令]]
head -n 10 filename # 显示前面10行,等于head -n +10 filename
head -n -10 filename # 不显示head结果的最后10行shell整数比较
-eq # 等于;等于为true,不等于为flase
-ne # 不等于;不等于为true,等于为flase
-gt # 大于;大于为true,小于或等于为flase
-lt # 小于;小于为true,大于或等于为flase
-ge # 大于等于;大于等于为true,小于为flase
-le # 小于等于;小于等于为true,大于为flase
SWAP分区临时开关设置
swapoff -a #临时关闭所有SWAP分区,重启后失效
swapon -a #手动开启所有SWAP分区永久关闭设置
vi /etc/fstab
#禁用swap分区挂载项,并重启系统即可linux登录提示信息修改
vi /etc/motd最后更新于