关于Linux的一些实用技巧

此博文会分享给大家一些我在使用Linux系统过程中学到或者总结的实用技巧。既然选择了计算机编程这个行业,那么熟练使用Linux是非常有必要的。所以如果你是编程的初学者,建议你要学习使用Linux系统,你可以随便看看一些互联网招聘平台,上面发布的招聘信息里面,其中大部分都提到了对Linux系统的要求。所以,骚年,别犹豫了,就一个字:学!

sudo 命令

Linux 下使用 sudo 命令,可以让普通用户临时执行一些或者全部的 root 命令。
在/etc/sudoers 文件中进行设置哪些用户可以临时获得 root 权限:

vagrant ALL=(ALL) ALL

上面的例子表示:

  • vagrant: 允许vagrant用户使用 sudo
  • ALL: 允许从任何终端(任何机器)使用 sudo(如果只想让vagrant用户在本主机而不能通过诸如ssh等终端使用sudo,就使用yourhostname代替ALL
  • (ALL): 允许以任何用户执行 sudo 命令
  • ALL: 允许 sudo 权限执行任何命令(此处可以指定执行哪些命令)

很多时候我们会遇到这样一种尴尬情况:使用 vim 编辑了一个没有修改权限的文件,准备保存退出的时候才发现忘记添加 sudo 命令了,只好强制退出去,然后重新加上 sudo 命令使用 vim 进行编辑。。。每每遇到这个事儿都情不自禁地对自己竖起中指把眼镜往上推了推。不过现在无需为此烦恼了,在 vim 的普通模式下,想要修改没有权限的文件,只需要输入 :w !sudo tee %(注意:该有的空格一定要有)就可以解决这个问题!我终于不再对自己竖中指了,哎~.~
有时候我们输入了一条很长的命令,按 Enter 之后出现无权限操作的提醒,这时候我们无需使用 Ctrl + P 回到上一条命令,然后在该命令前面加上 sudo 再执行这“该死”的命令,我们只需输入 sudo !! 即可执行上一条命令(这里的 !! 代表上一条命令)。

zsh使用通配符的问题

如果你在Linux系统上使用zsh,你需要特别注意一个独特之处:通配符展开是语言级的,通配符无法匹配是一个语法错误。比如,我想在centos系统(shell使用的是zsh)中查询man手册有没有中文版的,如下:

$ yum list |grep man.*zh
zsh: no matches found: man.*zh

Exiting on Broken Pipe

在使用 grep 和 find 等命令时,如果使用通配符匹配时,默认情况下,bash 在匹配失败时就使用原来的内容,而 zsh 则会报告一个错误。可以执行下面的命令解决这个问题:

$ setopt nonomatch

在 zsh 中执行 setopt nonomatch 则告诉它不要报告 no matches 的错误,而是当匹配失败时直接使用原来的内容。
实际上,不管是 bash 还是 zsh,不管设置了什么选项,只要把 man.*zh 加上引号 "man.*zh",就可以解决问题。

$ yum list |grep "man.*zh"
man-pages-zh-CN.noarch                  1.5.2-4.el7                    @base

关于”man”这个男人的事儿

当我们使用 minimal 的 Centos 或者 Ubuntu 系统时,有些命令没有安装导致无法使用,比如无法使用 man 命令,因为系统没有自带man手册,这时需要我们手动安装man手册(当然是英文版的):

$ sudo yum install man-pages

如果你还想要安装中文版的man手册,以便在看不明白英文的时候使用,那么你可以执行上一节中的相关命令,查询到man手册中文版安装包的名字,然后安装就可以了。
为了更方便在适当的时候使用man中文版手册,我们可以进行一些设置。在~/.bashrc(如果你使用的是zsh,那么在~/.zshrc)中添加:

alias zman='man -M /usr/share/man/zh_CN'
#系统默认公共手册页地址一般在:/usr/share/man下面

然后再执行:

$ source ~/.bashrc    # 或者 source ~/.zshrc

这样就可以使用 zman 命令使用中文版的 man 手册了。这里就不 such as 了 ^.^。

修改Linux系统的时区

如果我们购买了国外的vps用来翻越GFW或者建站,往往需要修改vps的系统时区。有多种方法可以实现修改时区。下面是其中一种:
复制相应的时区文件,替换掉系统时区文件;或者创建链接文件

$ cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime

# 在中国可以使用:
$ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 或者创建软链接
$ rm -rf /etc/localtime #先删除默认的时区设置
$ ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

tmux下Vim colorscheme失效的问题

如果你发现在使用 tmux 的时候,vim 的配色显示和你在 bash 或者 zsh 中显示不一样时,你可以试着这样做:

  • .bashrc 或者 .zshrc 中增加:
    alias tmux='tmux -2'    # 意思是使用256色终端
    
  • .tmux.conf 文件中增加:
    set -g default-terminal "screen-256color"
    

然后执行 source ~/.bashrc # 或者 source ~/.zshrc
什么?!不知道 .tmux.conf 在哪儿?别怕,我最开始使用 tmux 的时候,也不知道在哪儿。这个文件我们可以手动创建并修改,一般存放在下面这两个地方:

  • etc/tmux.conf 系统中所有用户的全局配置
  • ~/.tmux.conf 用户个人的配置

根据自己的情况选择创建的位置,创建之后最好在 .tmux.conf 文件中添加:

# 将 R 设置为加载配置文件,并显示"Config reloaded.."信息
bind R source-file ~/.tmux.conf \; display-message "Config reloaded.."

这样你就可以不重启 tmux ,而使用快捷键 前缀+R 使得 .tmux.conf 配置生效。
Ps: tmux 默认的 prefix 键是 Ctrl+b, 建议修改为 Ctrl+a

tmux 与 Windows 之间的复制粘贴问题

如果我们在 Windows 系统中使用 putty 登录 Linux,并且使用 tmux 进行学习和工作,你会发现之前在 putty 中使用很方便的复制粘贴功能不能用了(复制:鼠标左键选择;粘贴:鼠标右键,很方便在 putty 中和 Windows 中互相复制粘贴)。
解决办法很简单,按住 shift 键就可以使用鼠标方便地复制粘贴了。

保持更新

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器