****** Tricks ****** ============= Mysql操作技巧 ============= 2. 关于用户变量:用户变量是在用于临时存储一个值以便于在之后引用它的 3. 又学会了一招,可以用concat拼接字符串来使用like语句,比如 ``gmt_create LIKE concat(LEFT(date_add(now(), INTERVAL -1 day), 10), "%")`` 4. mac上开启mysql服务 ``mysql.server start`` 5. 使用 ``show columns from tbl_name`` 可以查看数据表结构,也可以使用 ``show create table tbl_name`` 6. 使用 ``create table like table `` 可以复制表格式,应该是相当于创建类似表 7. 使用 ``alter table change `` 可以修改表字段 =========== vim操作技巧 =========== 1. 复制粘贴:先使用xdd复制x行,再按p进行粘贴 2. 保存只读文件:``:w !sudo tee %`` 3. 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 ============= 1. 寻找自己想要安装的包的名字: ``apt-cache search [pkgname]`` 2. 从源代码安装软件: | (1)阅读安装引导 | (2)进行配置 ``./configure`` | (3)编译源码 ``make`` | (4)安装 ``sudo make install`` 4. Linux命令格式: ``command[options][arguments]`` ,command是命令,options是选项,有两种选项 ``--单词`` 和 ``-单字`` ,单字很多都是单词的缩写, 查看命令文档时, ``[]`` 表示可选的, ``<>`` 表示可变化的, ``x|y|z`` 表示只可选择一个的, ``-abc`` 表示三个参数的混合使用,帮助命令一共有三种 | (1) ``command --help`` | (2) ``whatis command`` | (3) ``man command`` 5. 执行历史命令: ``!n`` 6. 找可执行程序的位置可以用which,比如 ``which python3`` 7. 可以使用 ``cd -`` 进入上一次进入的目录 8. 可以使用mv命令修改文件名 9. 可以使用 ``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的花括号展开 .. code:: shell [me@linuxbox ~]$ echo Front-{A,B,C}-Back Front-A-Back Front-B-Back Front-C-Back 27. 双引号禁止除 ``$ \ ``` 三种符号之外的展开,而单引号则禁止所有展开 #. 可以通过 ``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 ============== 1. 域名是对于ip地址的一个别名,域名与ip地址的关系存储在域名服务系统(DNS)当中 2. 端口号掌管不同程序的通信 3. 可以利用python来完成一个简易的Web服务器 ``python -m http.server 8000`` 原理上我认为应该是这个Web服务器是python写的且自带的,不过其中-m参数为什么要这么用呢?这是一个问题。了解了一下,这个就相当于以__main__的方式运行指定的模块,并且将其路径加入到sys.path当中。这样的话实际用途有两方面,一方面是可以直接引用该路径下所有的python模块而不报错(同目录可以直接引用,但两个文件在不同子目录下肯定是不行的),另一方面可以运行一些python自带的程序,比如简易的webserver 4. mac os当中要通过 ``lsof -i:8080`` 这样才能查看端口被什么程序占用 5. 重启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. 通过 .. code:: shell git fetch --all git reset --hard origin/master git pull 可以强制pull,其实感觉就是把当前工作目录reset到origin/master,自然就可以pull了 14. 使用 ``git reset head file`` 可以将暂存区该文件的修改回退到工作区 15. 使用 ``git checkout --file`` 可以丢弃暂存区中的修改,git checkout的本质是用版本库里的版本替换工作区当中的版本 16. ``git merge`` 命令用于合并指定的分支到当前分支,如果两个分支在一条时间线上,那么就会使用快速合并,快速合并的话会直接把指向当前分支的指针指向指定分支 17. 分支策略,从今以后就这样搞 .. image:: _static/91D27D6A-131F-4674-A6FE-4765012FA960.png 18. 如果在没有stash的情况下就checkout分支,貌似会把工作区的改动带到新分支中,这个点要注意 19. 使用git push的时候,如果远程分支的版本在你之前,那么就会导致合并不成功, **需要先把远程分支pull下来然后把合并到当前分支才行,还是不太懂** ,应该是需要你的分支 **完全覆盖** 远程分支最新版本才能push成功 20. 使用 ``git --no-ff`` 可以实现非fastfoward合并 21. 可以通过 ``git checkout .`` 恢复所有文件到工作区,相当于丢弃当前未add的内容 22. 对于不想要同步但是要保留的文件,加入gitignore之后双边都git rm掉,然后服务端再pull,这样就可以了 23. fetch之后可以通过 ``git diff origin/master`` 查看本地库和远程库的不同 24. 可以通过 ``git log origin/master`` 查看远程库的日志 25. 可以使用 ``git branch -r`` 查看远程分支 26. git merge应该是有共同祖先版本,而且其中一个的最新版被包含在另一个当中才会直接merge,不然就会有冲突 27. 使用 ``git commit --amend`` 可以修改上次提交过的注释 ============== PyCharm tricks ============== 2. ``command + shift + -`` 可以折叠所有代码 3. 使用 ``ctrl+R`` 可以立即运行程序 4. 修改变量名用refactor(重构)会简单很多(甚至修改变量类型也可以使用这个) 5. 使用 ``command+d`` 可以复制当前行 6. ``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)``