Tricks¶
Mysql操作技巧¶
- 关于用户变量:用户变量是在用于临时存储一个值以便于在之后引用它的
- 又学会了一招,可以用concat拼接字符串来使用like语句,比如
gmt_create LIKE concat(LEFT(date_add(now(), INTERVAL -1 day), 10), "%")
- mac上开启mysql服务
mysql.server start
- 使用
show columns from tbl_name
可以查看数据表结构,也可以使用show create table tbl_name
- 使用
create table <tablename> like table <tablename>
可以复制表格式,应该是相当于创建类似表 - 使用
alter table <table_name> change <column_name> <column_name2>
可以修改表字段
vim操作技巧¶
- 复制粘贴:先使用xdd复制x行,再按p进行粘贴
- 保存只读文件:
:w !sudo tee %
- vim多行缩进技巧:点击v进入visual模式,然后选择多行,点击
>
进行缩进 - 打开多个文件并横向分割
vim -o filename1 filename2
- 已经打开一个文件后同时再打开一个,并横向分割
vs filename
- 多文件窗口切换ctrl+ww
- 关闭除光标所在窗口之外的其他窗口
:only
- 关闭所有窗口
:qa
- 查找替换实例
%s/Line/line/gc
- 删除光标后面的一整行内容:D
- 复制:y
- 剪切:在v模式下按d
- 直接在行末进行追加:A
- 跳转到文档尾部:G
- 跳转到任意一行:numberG
- 在一行的上部打开一行:O
- 取消撤回:ctrl+r
sublime快捷键汇总¶
linux tricks¶
- 寻找自己想要安装的包的名字:
apt-cache search [pkgname]
- 从源代码安装软件:
(1)阅读安装引导(2)进行配置./configure
(3)编译源码make
(4)安装sudo make install
- Linux命令格式:
command[options][arguments]
,command是命令,options是选项,有两种选项--单词
和-单字
,单字很多都是单词的缩写, 查看命令文档时,[]
表示可选的,<>
表示可变化的,x|y|z
表示只可选择一个的,-abc
表示三个参数的混合使用,帮助命令一共有三种
(1)command --help
(2)whatis command
(3)man command
- 执行历史命令:
!n
- 找可执行程序的位置可以用which,比如
which python3
- 可以使用
cd -
进入上一次进入的目录 - 可以使用mv命令修改文件名
- 可以使用
sed -n 'a, bp' filename
来获取该file中a-b行的内容,用来复制文件挺好用,如果a>=b那么只会获取第a行的内容 - env是环境(environment)的意思,这样的话
/usr/bin/env
目录就有点理解了 - 给crontab打日志的时候可以使用
2>&1
来将标准错误当做标准输出用,从而得到错误日志 - 如果用了连续两个>>的话,中间那个命令会接受不到标准输出,这是我从
* * * * * echo hello >> test.txt >> mylog.log 2>&1
这个命令的实验当中得出的结论,test.txt一直都没有被写入,这个和pipe其实是同一个原理,所以多个pipe之间的部分会被视作过滤器,可以使用tee来解决这个问题 - 可以使用export语句为当前shell增加环境变量
- pbcopy命令可以将文件中的内容定向至剪切板,只要使用
<
这个重定向符号就行了(这个重定向符号的意思是用文件中的内容来取代标准输入,因为如果pbcopy不加参数的话其文本来源于标准输入),感觉更好的方法还是用管道传输到pbcopy命令当中 - 重定向符号
>
是覆写,>>
是追加 - 如果多个命令要用到sudo,那么可以直接用
sh -c``来进行执行,例如 ``sudo sh -c "cat /dev/null > messages"
(感觉这里是相当于执行一个shell脚本) - shell当中.号相当于source命令,其实就是在当前shell环境下读取并执行文件中的命令
- 学了shell编程之后,发现了一个进入ssh的更简单的方法:
ssh $(cat ~/ssh.txt)
,这样就简单多了,这是一种“命令替换”方式,$()是一个变量,而这个变量的展开是一个命令的输出 $variable
其实是${variable}
的简写形式- 关于环境变量:在通常情况下,每个进程都有自己的“环境”,这个环境是由一组变量组成的,这些变量中存有进程可能需要引用的信息。在这种情况下,shell与一个一般的进程没什么区别。
- date命令的时候可以用
\+空格
来代替要显示在时间戳内的空格 - 使用netstat -an命令可以查看哪些端口正在被监听,mac下的话可以使用
lsof -i tcp:port
- 使用ln命令可以创建链接,用来快速执行命令等
- wc命令可以用来统计行数、字数、字节数
- tee命令其实是"T"型的意思,能够接受标准输入,并同时传递到标准输出和文件,适合用来打印中间过程到文件
- linux的花括号展开
[me@linuxbox ~]$ echo Front-{A,B,C}-Back Front-A-Back Front-B-Back Front-C-Back
- 双引号禁止除
$ \ `
三种符号之外的展开,而单引号则禁止所有展开 - 可以通过
dpkg --list
来查看系统当中所有安装的软件 - 通过
update-alternatives
命令可以增加软件的替代版本,主要是用来切换python版本 将Linux下python默认版本切换成替代版本 - vv鱼儿vv - 博客园 - 使用
rsnyc --exclude-from=
可以在同步的时候排除某些文件,可以将这些文件的 相对路径 (应该是执行命令时候的相对路径,没有实验过)统一放在一个exclude.list当中,这样用起来会比较方便 - brew与brew cast的区别,brew主要用来下载带界面的应用软件
- 可以使用
tar zxvf FileName.tar.gz
命令来解压tar.gz文件 - apt-get install找不到源的话要update一下
- 发现一个很好用的使用命令的方式就是使用
\
进行换行,这样可以使得命令结构更加清晰 - 还有一个经验,对于环境变量的export可以使用引号,特别是一些秘钥什么的
- 创建符号链接要使用
ln -s
,软链的名称和源文件的名称是可以不一致的,而且要注意源文件的链接千万不能使用相对路径,一定要使用绝对路径。而且软链只是一个类似指针的东西,如果目标文件改名字了,那么这个指针就无效了 - ubuntu下重启mysql
sudo /etc/init.d/mysql restart
- 使用free命令可以查看内存占用情况
- 使用du -ah –max-depth=1查看目录下文件的磁盘占用空间
- 使用locate命令要比find方便很多
网络编程tricks¶
- 域名是对于ip地址的一个别名,域名与ip地址的关系存储在域名服务系统(DNS)当中
- 端口号掌管不同程序的通信
- 可以利用python来完成一个简易的Web服务器
python -m http.server 8000
原理上我认为应该是这个Web服务器是python写的且自带的,不过其中-m参数为什么要这么用呢?这是一个问题。了解了一下,这个就相当于以__main__的方式运行指定的模块,并且将其路径加入到sys.path当中。这样的话实际用途有两方面,一方面是可以直接引用该路径下所有的python模块而不报错(同目录可以直接引用,但两个文件在不同子目录下肯定是不行的),另一方面可以运行一些python自带的程序,比如简易的webserver
- mac os当中要通过
lsof -i:8080
这样才能查看端口被什么程序占用 - 重启nginx
nginx -s reload
6. nginx配置,如果是root的话,会在root的后面的地址加上请求的uri形成一个完整的uri,如果是代理的话相当于将规则包含的uri过滤掉形成一个新的uri,两种是不一样的
8. /etc/nginx/conf.d/这个目录只能用来定义server层级的配置,http层级的配置需要到nginx.conf当中定义,这里的conf.d的表示配置目录的意思,.d的意思是directory
9. nginx的reload有个坑,如果端口被占用什么的会导致无法reload成功新配置,但是又没有任何错误提示,很是奇怪(配置sentry过程当中遇到的)
#. linux下使用 netstat -ntupl
可以查看当前监听的端口号
git tricks¶
- 附注标签是仓库中的一个独立引用,建立使用附注标签,加上-a就可以了
- 可以先使用
echo $(git log)
打印所有的commit,再使用git tag
可以给commit来打标签
3. 使用 git tag -d
可以删除标签
5. 查看配置信息 git config --list
6. 跳过stage状态,自动提交所有tracked的文件 git commit -a
7. 删除文件 git rm
,仅在删除对文件的追踪 git rm --cached
8. 强制切换分支,丢弃未commit的修改 git checkout -f
9. 使用 git reflog
可以查看操作的历史记录
10. 可以使用 git stash save ``来保存当前工作区的内容,从而回到刚刚commit的状态,切换分支,回来之后使用 ``git stash pop
来返回工作区内容,可以使用 git stash list
查看所有备份
11. 可以使用 git diff
查看文件的修改内容
12. 使用 git reset —hard
可以回到某个之前的版本,并把所有的后面的版本都丢弃掉
13. 通过
git fetch --all git reset --hard origin/master git pull可以强制pull,其实感觉就是把当前工作目录reset到origin/master,自然就可以pull了
- 使用
git reset head file
可以将暂存区该文件的修改回退到工作区 - 使用
git checkout --file
可以丢弃暂存区中的修改,git checkout的本质是用版本库里的版本替换工作区当中的版本 git merge
命令用于合并指定的分支到当前分支,如果两个分支在一条时间线上,那么就会使用快速合并,快速合并的话会直接把指向当前分支的指针指向指定分支- 分支策略,从今以后就这样搞
- 如果在没有stash的情况下就checkout分支,貌似会把工作区的改动带到新分支中,这个点要注意
- 使用git push的时候,如果远程分支的版本在你之前,那么就会导致合并不成功, 需要先把远程分支pull下来然后把合并到当前分支才行,还是不太懂 ,应该是需要你的分支 完全覆盖 远程分支最新版本才能push成功
- 使用
git --no-ff
可以实现非fastfoward合并 - 可以通过
git checkout .
恢复所有文件到工作区,相当于丢弃当前未add的内容 - 对于不想要同步但是要保留的文件,加入gitignore之后双边都git rm掉,然后服务端再pull,这样就可以了
- fetch之后可以通过
git diff origin/master
查看本地库和远程库的不同 - 可以通过
git log origin/master
查看远程库的日志 - 可以使用
git branch -r
查看远程分支 - git merge应该是有共同祖先版本,而且其中一个的最新版被包含在另一个当中才会直接merge,不然就会有冲突
- 使用
git commit --amend
可以修改上次提交过的注释
PyCharm tricks¶
command + shift + -
可以折叠所有代码- 使用
ctrl+R
可以立即运行程序 - 修改变量名用refactor(重构)会简单很多(甚至修改变量类型也可以使用这个)
- 使用
command+d
可以复制当前行 command+shift+回车
可以自动补全,在快换行的时候使用即可
idea tricks¶
- 双击shift 在所有目录中查找
- commend+e 查找最近编辑的文件
- shift+f6 快速重命名
- commend+shift+回车 格式化代码
- command+space 智能补全
- control+j 快速查看文档
- command+j 快捷插入
- option+delete 删除一个单词
- command + enter可以自动生成变量名和变量类型,必要性不大,生成的变量名不太喜欢
html tricks¶
- 可以使用position:absolute来使元素脱离文件流,从而形成水平排列,position:relative可以用来简单地控制元素的位置(没有relative是否就不能控制呢?)
docker tricks¶
- 停止所有docker进程
sudo docker rm $(sudo docker ps -a -q)