Tricks

Mysql操作技巧

  1. 关于用户变量:用户变量是在用于临时存储一个值以便于在之后引用它的
  2. 又学会了一招,可以用concat拼接字符串来使用like语句,比如 gmt_create LIKE concat(LEFT(date_add(now(), INTERVAL -1 day), 10), "%")
  3. mac上开启mysql服务 mysql.server start
  4. 使用 show columns from tbl_name 可以查看数据表结构,也可以使用 show create table tbl_name
  5. 使用 create table <tablename> like table <tablename> 可以复制表格式,应该是相当于创建类似表
  6. 使用 alter table <table_name> change <column_name> <column_name2> 可以修改表字段

vim操作技巧

  1. 复制粘贴:先使用xdd复制x行,再按p进行粘贴
  2. 保存只读文件::w !sudo tee %
  3. vim多行缩进技巧:点击v进入visual模式,然后选择多行,点击 > 进行缩进
  4. 打开多个文件并横向分割 vim -o filename1 filename2
  5. 已经打开一个文件后同时再打开一个,并横向分割 vs filename
  6. 多文件窗口切换ctrl+ww
  7. 关闭除光标所在窗口之外的其他窗口 :only
  8. 关闭所有窗口 :qa
  9. 查找替换实例 %s/Line/line/gc
  10. 删除光标后面的一整行内容:D
  11. 复制:y
  12. 剪切:在v模式下按d
  13. 直接在行末进行追加:A
  14. 跳转到文档尾部:G
  15. 跳转到任意一行:numberG
  16. 在一行的上部打开一行:O
  17. 取消撤回:ctrl+r

sublime快捷键汇总

linux tricks

  1. 寻找自己想要安装的包的名字: apt-cache search [pkgname]
  2. 从源代码安装软件:
(1)阅读安装引导
(2)进行配置 ./configure
(3)编译源码 make
(4)安装 sudo make install
  1. Linux命令格式: command[options][arguments] ,command是命令,options是选项,有两种选项 --单词-单字 ,单字很多都是单词的缩写, 查看命令文档时, [] 表示可选的, <> 表示可变化的, x|y|z 表示只可选择一个的, -abc 表示三个参数的混合使用,帮助命令一共有三种
(1) command --help
(2) whatis command
(3) man command
  1. 执行历史命令: !n
  2. 找可执行程序的位置可以用which,比如 which python3
  3. 可以使用 cd - 进入上一次进入的目录
  4. 可以使用mv命令修改文件名
  5. 可以使用 sed -n 'a, bp' filename 来获取该file中a-b行的内容,用来复制文件挺好用,如果a>=b那么只会获取第a行的内容
  6. env是环境(environment)的意思,这样的话 /usr/bin/env 目录就有点理解了
  7. 给crontab打日志的时候可以使用 2>&1 来将标准错误当做标准输出用,从而得到错误日志
  8. 如果用了连续两个>>的话,中间那个命令会接受不到标准输出,这是我从 * * * * * echo hello >> test.txt >> mylog.log 2>&1 这个命令的实验当中得出的结论,test.txt一直都没有被写入,这个和pipe其实是同一个原理,所以多个pipe之间的部分会被视作过滤器,可以使用tee来解决这个问题
  9. 可以使用export语句为当前shell增加环境变量
  10. pbcopy命令可以将文件中的内容定向至剪切板,只要使用 < 这个重定向符号就行了(这个重定向符号的意思是用文件中的内容来取代标准输入,因为如果pbcopy不加参数的话其文本来源于标准输入),感觉更好的方法还是用管道传输到pbcopy命令当中
  11. 重定向符号 > 是覆写, >> 是追加
  12. 如果多个命令要用到sudo,那么可以直接用 sh -c``来进行执行,例如 ``sudo sh -c "cat /dev/null > messages" (感觉这里是相当于执行一个shell脚本)
  13. shell当中.号相当于source命令,其实就是在当前shell环境下读取并执行文件中的命令
  14. 学了shell编程之后,发现了一个进入ssh的更简单的方法: ssh $(cat ~/ssh.txt) ,这样就简单多了,这是一种“命令替换”方式,$()是一个变量,而这个变量的展开是一个命令的输出
  15. $variable 其实是 ${variable} 的简写形式
  16. 关于环境变量:在通常情况下,每个进程都有自己的“环境”,这个环境是由一组变量组成的,这些变量中存有进程可能需要引用的信息。在这种情况下,shell与一个一般的进程没什么区别。
  17. date命令的时候可以用 \+空格 来代替要显示在时间戳内的空格
  18. 使用netstat -an命令可以查看哪些端口正在被监听,mac下的话可以使用 lsof -i tcp:port
  19. 使用ln命令可以创建链接,用来快速执行命令等
  20. wc命令可以用来统计行数、字数、字节数
  21. tee命令其实是"T"型的意思,能够接受标准输入,并同时传递到标准输出和文件,适合用来打印中间过程到文件
  22. linux的花括号展开
[me@linuxbox ~]$ echo Front-{A,B,C}-Back
Front-A-Back Front-B-Back Front-C-Back
  1. 双引号禁止除 $ \ ` 三种符号之外的展开,而单引号则禁止所有展开
  2. 可以通过 dpkg --list 来查看系统当中所有安装的软件
  3. 通过 update-alternatives 命令可以增加软件的替代版本,主要是用来切换python版本 将Linux下python默认版本切换成替代版本 - vv鱼儿vv - 博客园
  4. 使用 rsnyc --exclude-from= 可以在同步的时候排除某些文件,可以将这些文件的 相对路径 (应该是执行命令时候的相对路径,没有实验过)统一放在一个exclude.list当中,这样用起来会比较方便
  5. brew与brew cast的区别,brew主要用来下载带界面的应用软件
  6. 可以使用 tar zxvf FileName.tar.gz 命令来解压tar.gz文件
  7. apt-get install找不到源的话要update一下
  8. 发现一个很好用的使用命令的方式就是使用 \ 进行换行,这样可以使得命令结构更加清晰
  9. 还有一个经验,对于环境变量的export可以使用引号,特别是一些秘钥什么的
  10. 创建符号链接要使用 ln -s,软链的名称和源文件的名称是可以不一致的,而且要注意源文件的链接千万不能使用相对路径,一定要使用绝对路径。而且软链只是一个类似指针的东西,如果目标文件改名字了,那么这个指针就无效了
  11. ubuntu下重启mysql sudo /etc/init.d/mysql restart
  12. 使用free命令可以查看内存占用情况
  13. 使用du -ah –max-depth=1查看目录下文件的磁盘占用空间
  14. 使用locate命令要比find方便很多

网络编程tricks

  1. 域名是对于ip地址的一个别名,域名与ip地址的关系存储在域名服务系统(DNS)当中
  2. 端口号掌管不同程序的通信
  3. 可以利用python来完成一个简易的Web服务器 python -m http.server 8000
原理上我认为应该是这个Web服务器是python写的且自带的,不过其中-m参数为什么要这么用呢?这是一个问题。了解了一下,这个就相当于以__main__的方式运行指定的模块,并且将其路径加入到sys.path当中。这样的话实际用途有两方面,一方面是可以直接引用该路径下所有的python模块而不报错(同目录可以直接引用,但两个文件在不同子目录下肯定是不行的),另一方面可以运行一些python自带的程序,比如简易的webserver
  1. mac os当中要通过 lsof -i:8080 这样才能查看端口被什么程序占用
  2. 重启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

  1. 附注标签是仓库中的一个独立引用,建立使用附注标签,加上-a就可以了
  2. 可以先使用 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了

  1. 使用 git reset head file 可以将暂存区该文件的修改回退到工作区
  2. 使用 git checkout --file 可以丢弃暂存区中的修改,git checkout的本质是用版本库里的版本替换工作区当中的版本
  3. git merge 命令用于合并指定的分支到当前分支,如果两个分支在一条时间线上,那么就会使用快速合并,快速合并的话会直接把指向当前分支的指针指向指定分支
  4. 分支策略,从今以后就这样搞
_images/91D27D6A-131F-4674-A6FE-4765012FA960.png
  1. 如果在没有stash的情况下就checkout分支,貌似会把工作区的改动带到新分支中,这个点要注意
  2. 使用git push的时候,如果远程分支的版本在你之前,那么就会导致合并不成功, 需要先把远程分支pull下来然后把合并到当前分支才行,还是不太懂 ,应该是需要你的分支 完全覆盖 远程分支最新版本才能push成功
  3. 使用 git --no-ff 可以实现非fastfoward合并
  4. 可以通过 git checkout . 恢复所有文件到工作区,相当于丢弃当前未add的内容
  5. 对于不想要同步但是要保留的文件,加入gitignore之后双边都git rm掉,然后服务端再pull,这样就可以了
  6. fetch之后可以通过 git diff origin/master 查看本地库和远程库的不同
  7. 可以通过 git log origin/master 查看远程库的日志
  8. 可以使用 git branch -r 查看远程分支
  9. git merge应该是有共同祖先版本,而且其中一个的最新版被包含在另一个当中才会直接merge,不然就会有冲突
  10. 使用 git commit --amend 可以修改上次提交过的注释

PyCharm tricks

  1. command + shift + - 可以折叠所有代码
  2. 使用 ctrl+R 可以立即运行程序
  3. 修改变量名用refactor(重构)会简单很多(甚至修改变量类型也可以使用这个)
  4. 使用 command+d 可以复制当前行
  5. command+shift+回车 可以自动补全,在快换行的时候使用即可

idea tricks

  1. 双击shift 在所有目录中查找
  2. commend+e 查找最近编辑的文件
  3. shift+f6 快速重命名
  4. commend+shift+回车 格式化代码
  5. command+space 智能补全
  6. control+j 快速查看文档
  7. command+j 快捷插入
  8. option+delete 删除一个单词
  9. command + enter可以自动生成变量名和变量类型,必要性不大,生成的变量名不太喜欢

html tricks

  1. 可以使用position:absolute来使元素脱离文件流,从而形成水平排列,position:relative可以用来简单地控制元素的位置(没有relative是否就不能控制呢?)

docker tricks

  1. 停止所有docker进程 sudo docker rm $(sudo docker ps -a -q)