Code Monkey home page Code Monkey logo

common-usage's People

common-usage's Issues

如何美化 git log?

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'

为了方便使用,可以设置 git alias

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'"

如何配置 ssh alias?

vim ~/.ssh/config

host test1
  # 用户名
  user lcpub
  # 主机
  hostname 10.201.5.34      
  # 端口
  port 22
  # 私钥
  identityfile ~/.ssh/id_rsa

如果没有上传公钥到指定服务器,那么私钥无效,需要输入密码,密码无法配置的。

vim 开启系统剪切板的复制与粘贴(ubuntu)

首先,查看vim版本是否支持clipboard

vim --version | grep "clipboard"

clipboard 前面有一个小小的减号(-clipboard,会标红),说明不支持。

如果不支持的话,需要安装 vim-gnome,或者重新编译 vim

sudo apt-get install vim-gnome

如果报错了,安装提示更新下 apt-get update,然后重新运行之前的安装命令。
安装完后运行

vim --version | grep "clipboard"

发现支持了 clipboard 就可以了。

配置 ~/.vimrc

 set clipboard+=unnamed

如果你使用的是 windows wsl 那么无效,linux 子系统默认不跟 windows 的剪贴板共享。

vim 多行编辑

ctrl+v 进入多行编辑模式,其他移动命令不变,然后 r 进入编辑模式,如果想取消按 esc

vim 替换命令

语法

:[range]s/pattern/string/[c,e,g,i]5.1

参数说明

参数 说明
range 指的是范围,1,7 指从第一行至第七行,1,$ 指从第一行至最后一行,也就是整篇文章,也可以 % 代表。% 是目前编辑的文章,# 是前一次编辑的文章。
pattern 就是要被替换掉的字串,可以用 regexp 来表示。
string 将 pattern 由 string 所取代。
c confirm,每次替换前会询问。
e 不提示 error。
g global,不询问,全局替换。
i ignore 不分大小写。

简单例子

  • :s/vivian/sky/ 替换当前行第一个 vivian 为 sky

  • :s/vivian/sky/g 替换当前行所有 vivian 为 sky

  • :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

  • :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

n 为数字,若 n 为 .,表示从当前行开始到最后一行

  • :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

  • :%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

tmux 自定义配置

set -g prefix C-u #
unbind C-b # C-b即Ctrl+b键,unbind意味着解除绑定
bind C-u send-prefix # 绑定Ctrl+x为新的指令前缀

# 从tmux v1.6版起,支持设置第二个指令前缀
#set-option -g prefix2 ` # 设置一个不常用的`键作为指令前缀,按键更快些
# 绑定快捷键为r
bind r source-file ~/.tmux.conf \; display-message "Config reloaded.."

unbind '"'
bind - splitw -v -c '#{pane_current_path}' # 垂直方向新增面板,默认进入当前目录
unbind '%'
bind \ splitw -h -c '#{pane_current_path}' # 水平方向新增面板,默认进入当前目录

set -g mouse on # 开启鼠标功能

# 绑定hjkl键为面板切换的上下左右键
bind -r k select-pane -U # 绑定k为↑
bind -r j select-pane -D # 绑定j为↓
bind -r h select-pane -L # 绑定h为←
bind -r l select-pane -R # 绑定l为→

# 绑定Ctrl+hjkl键为面板上下左右调整边缘的快捷指令
bind -r ^k resizep -U 10 # 绑定Ctrl+k为往↑调整面板边缘10个单元格
bind -r ^j resizep -D 10 # 绑定Ctrl+j为往↓调整面板边缘10个单元格
bind -r ^h resizep -L 10 # 绑定Ctrl+h为往←调整面板边缘10个单元格
bind -r ^l resizep -R 10 # 绑定Ctrl+l为往→调整面板边缘10个单元格

详细文章请看 tmux 灵活的配置性

docker 一些命令

docker images # 查看所有镜像
docker ps -a # 查看所有containers信息
CONTAINER ID   IMAGE           COMMAND         CREATED         STATUS          PORTS                NAMES
1cca4e6667b4   mytensorflow    "bash"          2 minutes ago   Up 2 minutes    6006/tcp, 8888/tcp   wonderful_jang

docker rm container_id  # 删除容器
docker rmi image_id     # 删除镜像

docker commit <CONTAIN-ID> <IMAGE-NAME>  #命令把一个正在运行的容器保存为镜像
docker save IMage_id > /f/image_x.tar  #  再把镜像保存为本地文件
docker load < /f/image_x.tar      # 将本地镜像文件加载

 docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)
 docker tag fd507b1fc7ed tensorflow1.5x:latest  # 重命名images rep和tag
 
 docker run -it --rm  centos6.8 # 运行一个容器在它的进程结束后,立马自动删除
 
 # 获取长Id 
 docker inspect -f '{{.ID}}'  container_id   
 docker inspect -f '{{.ID}}'  NAMES  # NAMES 通过docker ps -a 命令获取最后一列
 # example : docker inspect -f '{{.ID}}' wonderful_jang
 
# 拷贝本地文件夹下test.py 到 container的/home 路径下
docker cp test.py 7f0700a3430595c3049ff436a903fe2f323c36bf4b6ae21ec724a6d507c199ef:/home  
# 拷贝docker 镜像内文件到本地
docker cp 1dc842b17a5adcf22c8a32ff8cb3cc20288d565e29c645d72fe595a86369b49b:/home/test_images/image2_x.jpg /f/

# 获取容器名称及Ip地址
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq) # ip访问不了
docker-machine ip # 可以访问

# 通过DockerFile 创建镜像, -t 指定镜像名
docker build -t imagename ./dockerfolder # 不指定Dokerfile路径,而是/path/to/your/Dockerfile

linux find 名称查找文件

通过 find

find <指定目录> <指定条件> <指定动作>
  • find . -name 'my*'
    搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。

  • find . -name 'my*' -ls
    搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。

通过 locate

locate 命令其实是 find -name 的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。

但较差劲的是 locate 所找到的档案若是最近才建立或 刚更名的,可能会找不到,在内定值中,updatedb每天会跑一次,可以由修改crontab来更新设定值 (etc/crontab),如下我的配置:

# 每天 23:30 分更新 locate 数据库       
30  23  * * * root  updatedb -U /mnt/f    
# 每天 23:40 分更新 locate 数据库                                                                                             
18 40  23  * * * root  updatedb -U /mnt/c/Users/Samo 

也可以手动更新:

updatedb -U /mnt/f  
updatedb -U /mnt/c/Users/Samo 
  • locate /etc/sh
    搜索etc目录下所有以sh开头的文件。

  • locate ~/m
    搜索用户主目录下,所有以m开头的文件。

  • locate -i ~/m
    搜索用户主目录下,所有以m开头的文件,并且忽略大小写。

搞懂 lrwxrwxrwx 、drwxrwxrwx 和 -rwxrwxrwx 的区别

rwx 代表的什么?

首先我们需要了解数字如何表示权限。 首先,我们规定 数字 4 、2 和 1表示读、写、执行权限,即 r=4,w=2,x=1 。

rwx = 4 + 2 + 1 = 7
rw- = 4 + 2 + 0 = 6
r-x = 4 + 0 +1 = 5

若要同时设置 rwx (可读写运行) 权限则将该权限位 设置 为 4 + 2 + 1 = 7
若要同时设置 rw- (可读写不可运行)权限则将该权限位 设置 为 4 + 2 = 6
若要同时设置 r-x (可读可运行不可写)权限则将该权限位 设置 为 4 +1 = 5

权限结构定义

ls -l 可以看到如下结构的信息

drwxrwxrwx 1 root root 4096 Jul 12 13:44  文件夹
-rwxrwxrwx 1 root root 4096 Jul 12 13:44  文件
lrwxrwxrwx 1 root root 4096 Jul 12 13:44  符号连接(即快捷方式)

drwxrwxrwx 结构由四部分组成 文件类型+用户权限+群组权限+其他用户权限

第一位代码的意义

d代表的是目录(directroy)
-代表的是文件(regular file)
s代表的是套字文件(socket)
p代表的管道文件(pipe)或命名管道文件(named pipe)
l代表的是符号链接文件(symbolic link)
b代表的是该文件是面向块的设备文件(block-oriented device file)
c代表的是该文件是面向字符的设备文件(charcter-oriented device file)

权限码值

-rw------- (600)      只有拥有者有读写权限。
-rw-r--r-- (644)      只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700)     只有拥有者有读、写、执行权限。
-rwxr-xr-xr (755)     拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711)     拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666)    所有用户都有文件读、写权限。
-rwxrwxrwx (777)   所有用户都有读、写、执行权限。

如何设置权限?

chmod [可选项] <mode> <file...>

最方便就是直接使用数字设置权限

chmod 777 file # chmod xxx file

详细可以看这篇文章 https://blog.csdn.net/u013197629/article/details/73608613

LF 和 CRLF Git 设置

提交时转换为LF,检出时转换为CRLF

git config --global core.autocrlf true

提交时转换为LF,检出时不转换

git config --global core.autocrlf input

提交检出均不转换

git config --global core.autocrlf false

git rebase -i 合并多个 commit

git rebase -i  [startpoint]  [endpoint]

其中 -i 的意思是 --interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。 在查看到了log日志后,我们运行以下命令。

pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)

合并的 commit 需要修改为 squash,默认都为 pick,需要保留一个 最早的 pick commit 作为合并目标 commit。

linux npm 自动补全设置

如果使用的是 zsh,设置如下

npm completion >> ~/.zshrc # 相当于在 ./zshrc 文件末尾追加一些补全配置
source ~/.zshrc 

如果使用的是 bash,设置如下

npm completion >> ~/.bashrc # 相当于在 ./bashrc 文件末尾追加一些补全配置
source ~/.bashrc 

生成公钥

ssh-keygen

运行命令不断回车即可,然后公钥在 ~/.ssh/id_rsa.pub,私钥在 ~/.ssh/id_rsa

解决 windows子系统下 ls 难看的底色问题

ls 颜色设置一个在实际使用中一个比较困扰我的问题是在bash on windows这边,使用ls显示的目录大都有很难看的底色;而对于正常的linux环境下,则没有这个问题;

这个的原因其实是因为windows的目录在linux这边的权限不同,导致windows的目录在ls的默认颜色中就应该有那种底色;所以只要修改环境变量$LS_COLORS就可以了

具体的不同:在windows下,目录都是ow,即Directory that is other-writable (o+w) and not sticky;而正常linux系统下的目录都是di
默认的$LS_COLORS如下:

rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:

可以看到其中ow的配色是34;42,其中那个42就是指定颜色的底色的意思,我们只要在配置中删掉它就可以啦~修改方式,还是在~/.bashrc文件里加上相关设置,把它放到开头,然后执行source命令就可以了=,=我的修改示例:

# for ls colorsLS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=01;34:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:"export LS_COLORS

样式列表

样式

00 — Normal (no color, no bold)
01 — Bold //粗体

文字颜色

30 — Black //黑色
31 — Red //红色
32 — Green //绿色
33 — Yellow //黄色
34 — Blue //蓝色
35 — Magenta //洋红色
36 — Cyan //蓝绿色
37 — White //白色

背景颜色

40 — Black
41 — Red
42 — Green
43 — Yellow
44 — Blue
45 — Magenta
46 — Cyan
47 – White

白色: 表示普通文件
蓝色: 表示目录
绿色: 表示可执行文件
红色: 表示压缩文件
蓝绿色: 链接文件
红色闪烁:表示链接的文件有问题
黄色: 表示设备文件
灰色: 表示其他文件

如何上传公钥到服务器?

ssh-copy-id user@host

运行上面的命令(user 和 host 根据实际情况填写),用户需要有足够权限,而且开启了 ssh 公钥功能,那么上传后就可以生效了。
ssh user@host 即可连接上服务器。
为了更方便,可以使用 ssh alias。

git status 中文文件名编码问题

在默认设置下,中文文件名在工作区状态输出,查看历史更改概要,以及在补丁文件中,文件名的中文不能正确地显示,而是显示为八进制的字符编码,示例如下:

JavaScript \347\261\273\345\236\213\350\275\254\346\215\242\346\216\242\347\264\242.md

通过将Git配置变量 core.quotepath 设置为false,就可以解决中文文件名称在这些Git命令输出中的显示问题

git config --global core.quotepath false

运行上面的命令,.gitconfig 就会被设置为如下:

[core]
  quotepath = false

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.