命令行艺术 (1) ~~ 基础篇
Table of Contens
什么命令行
每个学习计算机的人都应该知道命令行,因为它是计算机相关从事人员比不可少的一项技能。
通常所说的命令行就是在 linux
下使用 shell
或者 windows
下的 powershell
输入的命令进行工作的过程,这些可以是系统程序或者用户程序,也可以为指向可执行文件
的链接文件。
让命令行人性化
这里主要说的汉化,可以通过发行版对应的软件包管理工具(apt-get, yum, pacman等)安装对应的汉化包,然后将系统 语言设置为中文即可。
基础命令
私人神器zsh
在本人之前的 动手写 手把手实现一个 LINUX SHELL 中介绍到常用的 shell
. 这一系列
的命令将会在 zsh
下完成,几乎所有的基础教程都用的 bash
。但是 zsh
配合
oh-my-zsh
可以让效率提升数倍。这对于私人工作环境是不错的选择,但是如果在
公用服务器工作的还是使用 bash
吧。
声明:这里没有上下之分,只是本人用 zsh 用习惯了,而且有现成提升效率的配置 oh-my-zsh。节省 打造得心称手
shell
工具的时间。工欲善其事,必先利其器。在 linux 下的大部分常用的工具没有配置功能会很简陋,但是强大的可配置性使其可以用 起来很效率。
这份学习单中将会给出一些好的配置,免得新手把时间浪费在配置上。学习到一定程度后可 以自己阅读一些配置文件,根据需求配置自己的配置。
一般系统不会自带 zsh
, 因此需要自己安装。
如使用 pacman
:
# zsh
sudo pacman -S --noconfirm zsh
# oh-my-zsh
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
注:在安装 oh-my-zsh 的时候会提示切换默认的 shell, 这时需要输入密码。如果不需要 设置默认直接 Ctrl+c 结束即可,在 bash 中运行 zsh 即可进入 zsh 环境。
之后如果需要设置默认 shell :
chsh -s /usr/bin/zsh
即可。
熟悉环境
我们要想在 zsh
中愉快的工作,那么先的熟悉它。在我们能够驾驭 zsh
之后,那么学习
命令行将是一个非常轻松愉快的事情。下面从最基础的开始。
帮助命令
man
: 如我们想知道zsh
是什么,man zsh
.apropos
: 根据关键字在系统帮助文档里查找,apropos man
. 注:它会显示所有结果,所以最 好使用正则匹配最想要的关键字。type
: 判断是否为可执行程序或是命令的别名,type apropos
。- tldr : 获取命名的常见用法,
tldr type
.
说明 : 等宽表示系统自带的命令, 粗体表示需要自己安装的软件。后面不再解释。
编辑命令
vi(m)
, emacs
至少熟悉一个。刚开始的时候可以使用 nano
进行过渡,因为这俩
都有一定的学习曲线,但是学会之后可以起到事半功倍的效果。大部分人会学习 vim
,
配合 SpaceVim 是个不错的选择。这里推荐新的 vimer 可以尝试一下 emacs
+ vim
模
器, 如配合 spacemacs 就不错,顺便说一下, SpaceVim 借鉴了 spacemacs 的快捷键布
局。emacser 有一定基础的可以尝试 doom-emacs ,这个启动速度很快。定制性和前者一样
很方便,本人也在其基础上定制了私人配置,主要面向 C++ 开发 — doom 。
重定向
>
: 输出重定向,tldr type > out.txt
>>
: 追加方式重定向,不会覆盖原有的内容<
: 输入重定向,tldr < in.txt
|
: 重定向管道- 了解标准输入
stdin
, 标准输出stdout
, 标准出错stderr
。在每个进程中对应 的描述符分别为0, 1, 2
。
通配符
了解常用的通配符,如 *
, ?
, [...]
。还有引用以及引用中的 '
和 "
。
任务管理工具
&
: 在当前会话后台运行,退出会话会被杀死nohup
: 在系统后台运行,会话退出不会被杀死ctrl+z
: 挂起运行的进程bg
: 和ctrl+z
功能一样fg
: 恢复挂起的进程jobs
: 查看当前会话的后台任务kill
: 杀死运行的进程
远程登录
使用 ssh
进行远程管理服务器,最好使用 ssh-agent
, ssh-add
实现免密码登录。
常见的基本用法如下:
➜ ~ tldr ssh
# ssh
Secure Shell is a protocol used to securely log onto remote systems.
It can be used for logging or executing commands on a remote server.
- Connect to a remote server:
ssh username@remote_host
- Connect to a remote server with a specific identity (private key):
ssh -i path/to/key_file username@remote_host
- Connect to a remote server using a specific port:
ssh username@remote_host -p 2222
- Run a command on a remote server:
ssh remote_host command -with -flags
- SSH tunneling: Dynamic port forwarding (SOCKS proxy on localhost:9999):
ssh -D 9999 -C username@remote_host
- SSH tunneling: Forward a specific port (localhost:9999 to slashdot.org:80) along with disabling pseudo-[t]ty allocation and executio[n] of remote commands:
ssh -L 9999:slashdot.org:80 -N -T username@remote_host
- SSH jumping: Connect through a jumphost to a remote server (Multiple jump hops may be specified separated by comma characters):
ssh -J username@jump_host username@remote_host
- Agent forwarding: Forward the authentication information to the remote machine (see `man ssh_config` for available options):
ssh -A username@remote_host
文件管理工具
- 列出文件命令,如
ls
,ll
orls -l
- 查看文件命令,如
more
,less
,head
,tail
。前两者的区别是more
不支 持回退,后者可以。 - 软链接
ln
, 硬链接ln -s
的区别:前者共享文件的inode
, 即还是同一文件; 后者是新建了一个文件用来保存指向文件的路径,和 windows 的快捷方式一样,不共享inode
。 - 权限管理, 改变属主
chown
, 改变权限chmod
。 - 磁盘管理, 如查看文件磁盘占用:
du -hs *
- 文件系统管理,如查看所有文件系统和利用率:
df
, 挂载文件系统mount
, 格式 文件系统mkfs
, 列出磁盘分区的树形结构lsblk
。
网络管理工具
ifconfig
: 最基本的查看 ip 地址, 这是早期的管理工具,比较新的系统基本改用iproute2
了,需要使用的话要安装net-tools
。ip
: 功能更强的网络管理工具。dig
: DNS 服务查看工具。
版本控制
软件版本更迭怎么能少了版本控制软件呢,就目前来说 git
再适合不过了。还有其它小
众的如 svn
等。
正则表达式
使用 grep/egrep
结和正则表达式搜索文件内容。下面为常用的参数:
i
: 忽略大小写o
: 只显示被模式匹配到的字符串v
: 显示不匹配的A NUM
: 示匹配到的字符串所在的行及其后NUM行B NUM
: 显示匹配到的字符串所在的行及其前NUM行C NUM
: 显示匹配到的字符串所在的行及其前后各NUM行
软件包管理工具
debian/ubuntu/mint/deepin | redhat/centos/fedora | arch/manjaro | gentoo |
---|---|---|---|
apt/apt-get | yum/dnf | pacman/yaourt | emerge |
总结
好了,今天的基础部份就学完了,有了这些基础,基本上管理方面已经绰绰有余。但是要想 真正的使用,光只有管理是不够的,这会很无聊。之后会继续给出日常使用的命令和软件, 打造比较舒适的学习工作环境。