有sudo权限的用户不输root密码下切换到root用户下

sudo -i         # 以目标用户身份运行一个登录 shell;可同时指定一条命令

sudo -s        # 以目标用户运行 shell;可同时指定一条命令

sudo su

在不知道别人账户密码时切换到别人的账户 

sudo su xxx

查询记录为abcdefg在service.log的情况

cat service.log | grep abcdefg

想查出对应行号,加上-n就行了

cat -n service.log | grep abcdefg 

隐藏bash命令,不被history记录

命令set +o history表示接下来的命令不会记录会history里面,但set +o history这条命令会记录。先用set +o history再配合用vim ~/.bash_history删除不记录的命令

命令history +c会删除当前shell中已记录到history里面的记录,如果优化了history(检查/etc/bashrc中有无history相关内容),即记录了命令的执行时间,该命令可能无效。配合用vim ~/.bash_history删除不记录的命令,然后用history +c可消除你不想被记录的痕迹

#查询110到120行的情况

sed -n "110,120p" service.log

cat -n service.log | tail -n +110 | head -n 20

【一】从第3000行开始,显示1000行。即显示3000~3999行

cat filename | tail -n +3000 | head -n 1000

【二】显示3000~3999行

cat filename |head -n 3999 | tail -n +3000

压缩文件查看内容

zcat agent.log.gz | grep -a Exception -C 10

#如果关键字太多,可以用more或less

cat service.log | grep xxx | more

# less命令查看大文件

less +G -n filename      (+G跳到文件最后一行,-n不显示行号,-N显示行号,-m显示百分比)如果有最新内容也能看到时

使用 less file-name 打开日志文件,执行命令 F,可以实现类似 tail -f 的效果

less命令打开文件后如果想编辑,按v可进入默认编辑器

less命令跳到指定行如100行,则按100g

less搜索时忽略大小时输入-i

less允许你在任何一行中添加标记。你可以在字母后面按下“m”键来加一个记号。

ma

当你想回到这个标记时,只需输入以下命令: 'a

#将查询结果输出到日志

cat service.log | grep xxx > /home/shuangyueliao/tmp

#统计多少行

cat service.log | wc -l

#查询所有tcp、udp端口

#l:listening    n:num    t:tcp    u:udp    p:display PID/Program name for sockets

netstat -lntup

查找目录下的所有文件中是否含有某个字符串

# grep -r递归查找,-n输出匹配的行号,-i不区分大小写,如果最后面再加上-l则表示只打印出文件名

find .|xargs grep -rni "要查找的字符串"                           

grep -rni "要查找的字符串“ *                        # *表示当前目录所有文件,也可以是某个文件名

# git查询log树

git log --oneline --graph --decorate --all

# 查找当前目录下的某文件名

find . -name "hello.txt"

# 查找当前层级下包含hello字符串的文件名

find . -maxdepth 1 -name "*hello*"

# 列出所有文件

find .

# find并执行命令

find -type f -mtime -1 -exec rm {} \;

# find并执行命令前询问

find -name "*.log" -type f -mtime -1 -ok rm {} \;

# 查询当前目录下大于50M且名称以.jar结尾的文件,按时间从大到小排序,取前20条

find . -size +50M -name "*.jar" | xargs ls -lt | head -n 20

# 通过进程名查看端口占用的两种方式

lsof -i -P|grep tomcat

netstat -nap|grep tomcat

mysql数据库定时备份

1、创建脚本文件mysqlbackup.sh,内容如下

#备份数据库
backupdir=/home/jiepeng/mysqlbackup
time=` date +%Y%m%d%H `
/usr/local/mysql/bin/mysqldump -u 数据库用户名 -p数据库密码  数据库名 | gzip > $backupdir/smartheadsetv2$time.sql.gz

#删除7天前保存的数据库文件
find /home/jiepeng/mysqlbackup/ -mtime +7 -name \*.sql.gz -exec  rm -rf {} \;

2、crontab -e添加如下一行,表示每天2点执行上方创建的脚本,后面是脚本存放的位置

0 2 * * * /home/jiepeng/mysqlbackup.sh

docker常用命令

# 查看docker所有镜像
docker images

# 列出docker运行中的容器
docker ps

# 列出docker所有容器
docker ps -a

# docker以交互模式启动镜像容器并运行脚本java -jar /opt/arthas/arthas-demo.jar,-i是交互模式的意思,-t是启动一个伪终端并绑定到标准输出中
docker run --name arthas-demo -it hengyunabc/arthas:latest /bin/sh -c "java -jar /opt/arthas/arthas-demo.jar"

# docker运行在后台

docker run -itd --name ubuntu-test ubuntu /bin/bash

# 使用attach进入容器内部,注意如果从容器退出,会导致容器的停止

docker attach 1e560fca3906


# docker以交互方式进入容器,并运行脚本java -jar ...
docker exec -it arthas-demo /bin/sh -c "java -jar /opt/arthas/arthas-boot.jar"

# docker启动已容器

docker start arthas-demo

 # 查看docker容器日志文件

docker logs -f container_name

可用内存=free的内存+cached内存+buffers

cat /tmp/myfile | grep "mystring" which would run much faster as: grep "mystring" /tmp/myfile 

命令行的艺术

the-art-of-command-line/README-zh.md at master · jlevy/the-art-of-command-line · GitHub

Bash操作:

ctrl-r: 搜索命令行历史记录/ctrl-s:反方向搜索(stty -ixon 屏蔽终端的Ctrl + S快捷键)

ctrl-s:暂停终端

ctrl-q:解除终端暂停状态

ctrl-w: 删除你键入的最后一个单词(emacs: M-<DEL>    移除光标前一个词    M-d    移除光标后一个单词)

ctrl-u/ctrl-k: 删除行内光标所在位置之前内容/之后内容

ctrl-l: 清屏

alt-b/alt-f: 以单词移动光标

ctrl-a/ctrl-e: 将光标移至行首/行尾

ctrl-c: 取消命令

alt-.: 循环移向前一个参数

alt-#:注解当前command

set -o vi/set -o emacs:切到vi风格/切回原来风格

!n(n是命令编号): 再次执行

!$: 上次键入的参数

!!: 上次键入的命令

ssh中使用-L或-D(偶尔需要用-R): 开启隧道,如需要从一台远程服务器上访问web页面

curl -I: 测试响应头和响应码

ctrl-d:无command输入时,关闭终端

emacs命令 

C-h t    查看内置教程(常用)

C-h k xxx    寻找快捷键的帮助信息(常用)

C-h a xxx    相关命令搜索(常用)

C-h f xxx    查看函数说明

C-h v xxx    查看变量说明

C-h c xxx    查看命令说明

C-h ?

C-h m    查看当前主模式的文档

C-x C-c    退出emacs

C-g    退出一个正在运行的命令

C-v    向前移动一屏

M-v    向后移动一屏

C-l    重绘屏幕,并将光标移动到中间、顶端、底部

C-p    上一行

C-n    下一行

C-b    向左移动

C-f    向右移动

M-f    向前移动一个单词

M-b    向后移动一个单词

C-a    移动到行首

C-e    移动到行尾

M-a    移动到句首

M-e    移动到句尾

M-<    移动到最顶端

M->    移动到最底部

C-u(META) 8 C-f    向前移动8个字符

C-u(META) 8 C-v    向下滚动8行

C-u 8 *    这将会插入********

C-u 2 C-k    会所多行连同其后的换行符一起移除,而不仅仅是重复C-k

C-g    取消命令

C-x 1    只保留一个窗格

C-d    删除光标后一个字符

M-<DEL>    移除光标前一个词

M-d    移除光标后一个单词

C-k    移除从光标到"行尾"间的字符

M-k   移除从光标到“句尾”间的字符

C-<SPC>或C-@选中要移除的内容,然后按下C-w,这样就可把位于这两点之间的所有文字移除

C-y    插入你最后移除的文字,如果紧接着按M-y可召回前几次移除的内容

C-/或C-x u    撤销命令

C-x C-f    寻找一个文件

C-x C-s    存储文件

C-x C-b    列出缓冲区

C-x b xxx    回到某个缓冲区

C-x s    保存多个缓冲区

C-x 2    上下划分两个窗格

C-x 3    左右划分两个窗格

C-x o    将光标转移到其它窗格

C-M v    将另一窗格向下移动

C-Shift-M v    将另一窗格向上移动

C-x 4 C-f    将文件在另一个窗格打开

M-x make-frame    创建一个窗口

M-x delete-frame    删除一个窗口

C-z    挂起

M+w    复制

(setq make-backup-files nil)    关闭备份文件(原文件名加上~)临时关闭备份文件M-x customize-variable <Return> make-backup-files <Return>

M-x replace-string<Return>changed<Return>altered<Return>    替换光标后面的内容

M-x recover file <Return> 来恢复你的自动保存文件

M-q    手动执行

C-s    向前搜索

C-r    向后搜索

显示行号    (global-linum-mode t)添加到.emacs文件中              或                      M-x global-linum-mode(临时)

跳转指定行M-g g 或者 M-g M-g或M-x goto-line

注释多行    选中一段区域开头位置到最后一行行首(!很重要!);按 C-x r t ;输入注释内容;

取消注释    选中一段区域开头位置到最后一行,紧挨着注释字符之后的位置(!很重要!);按 c-x r k;

执行 C-g 然后 C-x u 就是向前撤销了

.emacs文件

(global-linum-mode t)
(setq make-backup-files nil)

spacemacs

C-x C-f 打开文件

SPC f e d 打开.spacemacs

SPC f e R 修改.spacemacs后重新初始化

SPC f s 保存一个buffer

SPC f R 重命名当前文件

SPC f L helm-locate查找文件

SPC f S 保存所有buffer

SPC f r 最近打开的文件列表

SPC p f 查找项目文件

SPC f T/t 调出neoTree或隐藏

spc-spc-helm-imenu 查看单个文件结构大纲

SPC 0 光标跳转到侧边栏中(neoTree中)

SPC n 光标跳转到第n个buffer中

SPC w m 最大化buffer

SPC w c buffer居中模式

SPC w d 删除窗口

SPC w - 下分割窗口

SPC w / 右分割窗口

SPC w + 窗口布局切换

SPC w H evil模式下,光标移动到最左边窗口

SPC t f 显示填充列

SPC T M 切换帧最大化

SPC / 全项目搜索

SPC f g 搜索相关函数

SPC t m m minor mode指示器开启关闭

SPC j = 自动对齐

SPC b n 下一个buffer

SPC b N 新建一个buffer

SPC b P 拷贝剪切版内容覆盖整体buffer

SPC b d 删除buffer

SPC b m 删除其它buffer

SPC b W buffer列表

SPC b b 列出所有buffer的hemi-mini

SPC b k 关闭当前buffer

SPC tab 两个buffer切换

CTRL j,h,k,l pattern上下移动

SPC ! shell终端

SPC s s 搜索文件中内容

在根项目中touch .projectile就会认为是一个spacemacs项目或者如果有.git项目也会认为是一个.projectile

通过子shell返回当前目录

运行完一 个命令后自动返回当前位置,加括号即可。如(cd /etc && ls -a)该命令执行完后,当前目录不会改变

rsync --progress -av 或 rsync --progress -avz或rsnyc --progress -avW或rsync -avP可代替scp 

启动一个http服务

python -m http.server 8081 

mysql篇

1、mysql忘记密码,修改mysql的配置文件,在[mysqld]下面加上skip-grant-tables,重启mysql即可免密登录

2、mysql crash recovery:

在[mysqld]加入innodb_force_recovery = 6,重启mysql,dump出sql脚本,重置mysql,再导入sql脚本

innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。

当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。
1(SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页
2(SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash
3(SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。
4(SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。
5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。
6(SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。

mysql死锁解决方法:

方法1:进入mysql命令行界面,show full processlist找出死锁的进程,然后kill Id

方法2:如果方法1看不出哪个线程死锁,执行语句

SELECT * FROM `information_schema`.`innodb_trx` ORDER BY `trx_started`

 then take the value from trx_mysql_thread_id and send it the KILL command

 kill trx_mysql_thread_id

ssh高级篇

-L 本地网卡地址:本地端口:目标地址:目标端口(-L选项中的本地网卡地址是可以省略的)

在本地主机A1登陆远程云主机B1,并进行本地端口转发,访问localhost:2000=1.2.3.4:3000

ssh -L localhost:2000:localhost:3000 root@1.2.3.4

-L选项中的目标地址也可以是其他主机的地址,访问localhost:2000=通过192.168.4.56访问192.168.4.10:3000

ssh -L localhost:2000:192.168.4.10:3000 jiepeng@192.168.4.56

-R 远程网卡地址:远程端口:目标地址:目标端口

场景1:ssh通过跳板机连到内网

lab$ ssh -R 10022:localhost:22 jumpbox 
jumpbox$ ssh user@localhost -p 10022
lab$ 

修改vim /etc/ssh/sshd_config
添加GatewayPorts yes
service sshd restart

lab$ ssh -R 0.0.0.0:10022:localhost:22 jumpbox 
other-machine$ ssh user@jumpbox -p 10022

场景2:

比方说在本地的127.0.0.1:1080运行了HTTP代理服务,现在我想让另一台机子 remote 也能够使用这个HTTP代理

local$ ssh -NRf 11080:localhost:1080 remote
local$ ssh remote
remote$ export http_proxy=http://127.0.0.1:11080/
remote$ export https_proxy=http://127.0.0.1:11080/
remote$ curl cip.cc

场景3:

要是想要在家访问公司内网的一些网站,但是公司又没有提供进入内网的VPN,那怎么办呢?通过 ssh -D 可以在本地建立起一个 SOCKS5 代理:

local$ ssh -ND 1080 workplace

如果 workplace 处在内网,不要忘记前面讲到可以用反向端口转发和跳板机来解决这个问题。现在,你可以在浏览器的设置里面,把代理服务器设成 socks5://127.0.0.1:1080,然后你就可以看到 workplace 能看到的所有网站啦。

 window查询被占用端口:

netstat -aon|findstr "49157"          # 记下pid

tasklist|findstr "2720"                    # 查询pid为2720对应的应用

taskkill /f /t /im Tencentdl.exe 或 taskkill /pid 4136 -t -f      # 杀死进程

Logo

更多推荐