前端学命令行
写在前面
命令行已经成为前端程序员必备的一项基础技能。如今的前端开发严重依赖命令行,通过 node 部署前端开发环境,通过 git 实现版本管理,命令行还可以更有效地控制操作系统(mac 尤甚)。熟练地掌握命令行,可以极大地提升工作效率,本文将介绍前端开发所需要的常用命令行操作
定义
命令行( command line ) 是一个应用程序,它是一个基于文本(或者说基于命令)的进行文件操作的应用程序,类似于 mac 中的 Finder
或者 Windows 中的资源管理器
,但是没有图形界面
一般地,命令行( command line )又代指命令行界面( command line interface ),简称为CLI,也称为字符用户界面。在 Windows 中称为 cmd
或者 命令提示符
,在 Mac 中称为 终端
或者 控制台
,在 Linux 中称为 shell
(常见的是 bash )
常用命令
DOS 系统和 Linux 系统的命令有些不同,下面主要介绍 Linux 系统下的 bash 命令
一般规则
在了解命令行常用命令之前,要先了解命令行的一般规则。如果命令行正确执行,则界面不会有任何反馈;如果错误执行,则会提示报错信息
特殊符号
#
代表注释
\
代表转义字符,可以将特殊符号变成一般字符
$
代表的是目前这个 Shell 的线程代号,即是所谓的 PID(process ID),使用echo $$
,出现的数字就是 SHELL 的 PID 代码
$ echo $$ # 5477
?
是一个特殊的变量,代表上一个执行的命令所回传的值。如果成功执行该命令,则会回传一个 0 值,如果执行过程发生错误,就会回传一个非 0 的值
$ echo $? # 0
缩写
所谓的命令实际上就是单词的缩写,有以下几种常见缩写方式:
1、最常见的缩写是取每个单词的首字母
cd Change Direcroty 切换目录
2、如果首字母后为h
,则保留h
chmod CHange MODe 切换文件权限
3、 如果只有一个单词,通常取每个音节的首字母
cp Copy 文件拷贝
4、取前几个字母作为缩写
diff DIFFerences 比较文件差异
操作命令
clear 清屏
unset 取消变量
$ unset abc # 取消变量 abc
alias
用来设置别名,单独使用alias
,可以查看当前已经设置的别名;unalias
用来取消设置的别名
$ alias # 查看当前已经设置的别名
$ alias lm='ls -l | more' # 设置别名 lm
$ unalias lm # 取消别名 lm 的设置
open
可以使用默认方式打开文件,使用 alias
和 open
配合,可以使用命令行来打开网页
alias cnblogs='open https://cnblogs.com'
目录命令
【特殊符号】
.
表示当前目录
..
表示上级目录
-
表示前一次目录
~
表示用户目录
【显示目录】
pwd # print work directory 显示当前工作目录的绝对路径
【切换目录】
cd # change directory 切换工作目录
# 如果不带任何参数,或使用波浪号(~),切换到用户目录
【创建目录】
mkdir # make directory 创建目录
$ mkdir a # 创建目录 a
$ mkdir b c # 创建目录 b 和 c
$ mkdir -p a/b/c # 创建有层级的目录(a/b/c),需要使用 -p 选项
【删除目录】
rmdir # 删除空目录
rm -r # 删除目录及该目录下的所有目录及文件
$ rm -r a # 删除目录 a
# 千万不要使用 rm -rf /,该命令会删除所有文件
【复制目录】
cp # copy 复制文件(或目录)
$ cp -r a b # 将目录 a 复制到目录 b
【移动目录】
mv # move 移动文件(或目录)),或者重命名
$ mv a b # 将目录 a 从当前目录移动到目录 b 下
$ mv a b # 如果没有目录 b,则目录 a 重命名为目录 b
文件命令
【特殊符号】
>
表示覆盖
>>
表示累加
【显示目录下文件】
ls # 显示该目录下的所有文件 list files,默认不显示以点开头的文件
ls -a # 显示所有文件,包括隐藏文件
ls -l # 显示每个文件的详细信息
ls ./y # 显示指定路径 ./y 下的所有文件
【查看文件内容】
open # 使用默认软件打开文件
cat # 显示文件内容
其实,更常用的文件查看方式是使用 vscode
$ code a.txt # 使用 vscode 打开 a.txt 文件
要使用上述命令,需要进行如下设置:运行 vscode 并打开命令面板(⇧⌘P ),输入 shell command 找到: Install ‘code' command in PATH,并点击
【新建文件】
touch # 创建文件
$ touch a.txt # 创建空文件a.txt,如果a.txt已经有内容,则修改文件最后更新时间
echo # 输出字符串,也可以新建或改写文件
$ echo 123 # 输入字符串'123'
$ echo -e '111\n222' # 输入多行内容,需要使用-e选项
$ echo 123 > 1.txt # 将1.txt的内容改写为'123'
$ echo abc >> 1.txt # 向1.txt追加内容,则1.txt的内容为'123 \n abc'
【删除文件】
rm # remove 删除文件
rm -f # 强制删除
rm -i # 删除文件之前先询问确认,用户回复y或Y之后,文件才会真的被删除
$ rm a.txt # 删除文件a.txt
【复制文件】
cp # copy 复制文件(或目录)
$ cp 1.txt 2.txt # 将1.txt的内容复制到2.txt
【移动文件】
mv # move 移动文件(或目录),或者重命名
$ mv 1.txt 2.txt # 如果在同一目录下,则将1.txt重命名为2.txt
$ mv 1.txt a # 如果不在同一目录下,则将1.txt移动到指定的目录a下
$ mv 1.txt a/2.txt # 也可以在移动到目录a的同时,重命名为2.txt
快捷键
在 Mac 下,iTerm2 需要设置才能使用 alt 快捷键
打开 Preferences > Profiles > Keys > General,Left Option Key 和 Right Option Key 都选择 Esc+
然后选择 Key Mappings ,点击 + 号,在弹出的对话框中
KeyBoard Shortcut:option + 左箭头
Action: Send Escape Sequence
ESC+: b
KeyBoard Shortcut:option + 右箭头
Action: Send Escape Sequence
ESC+: f
即可完成设置
【光标移动】
ctrl + a 移动到命令行最左侧(ahead)
ctrl + e 移动到命令行最右侧(end)
alt + <- 向左移动一个单词
alt + -> 向右移动一个单词
【内容剪贴】
ctrl + k 剪切从光标位置到行尾的字符 (kill)
ctrl + u 剪切从光标位置到行首的字符 (undo)
ctrl + w 或 alt + backspace 剪切光标前的单词(word)
alt + d 剪切光标后的单词(delete)
ctrl + y 将剪贴板的内容粘贴到光标处
【控制】
ctrl + c 强制终止当前命令
ctrl + l 清屏
一次 tab 补全
两次 tab 提示
命令组合
使用多命令执行符和管道符可以实现命令组合的目的
【多命令执行符】
命令1;命令2
多个命令顺序执行,命令之间没有任何逻辑关系
命令1&&命令2
逻辑与,命令1成功,才会执行命令2
命令1||命令2
逻辑或,命令1不成功,才会执行命令2
【管道符】
命令1 | 命令2
命令1的正确输出作为命令2的操作对象
$ ls -al /etc | less
上面代码中,使用 ls
命令输出后的内容就能够被 less
读取,并利用 less
的功能,就能够前后翻动相关的信息了
脚本文件
脚本文件类似于DOS操作系统中的批处理文件.bat
,它可以将不同的命令组合起来,并按确定的顺序自动连续地执行
比如,一个常见的需求是把 chrome 的下载目录中的 excel 文件存储到专门的文档文件夹里
1、新建并打开脚本文件
$ touch mvExl.txt
$ chmod + x mvExl.txt
$ code mvExl.txt
2、修改脚本文件,将 Downloads 目录下所有的 excel 文件都移动到 backup 目录下的 xls 目录中
mv /Users/xiaohuochai/Downloads/*.xls /Users/xiaohuochai/Desktop/backup/xls
3、执行该文件即可
sh mvExl.txt
# 或者
sh ./mvExl.txt
当然,可以利用传参,将其他类型的文件比如 zip 文件也移动到 backup 目录下的 zip 目录中
# 设置变量
basePath=/Users/xiaohuochai
targetPartPath=Desktop/backup
# 如果不存在 $1 文件夹,则新建 $1 文件夹
# $1 表示第一个参数
# -d 表示该文件名是否存在且是一个目录
if [ -d $basePath/$targetPartPath/$1 ]; then
echo 'exist'
else
cd $basePath/$targetPartPath
mkdir $1
fi
# 移动文件
# 注意,如果加上引号,写成"$basePath/Downloads/*.$1",则 * 只表示 * 本身,而不表示任意字符
mv $basePath/Downloads/*.$1 $basePath/$targetPartPath/$1
echo 'done'
最后
本文只介绍了常用的基本命令,更详细的命令可查看下面的文章
好的代码像粥一样,都是用时间熬出来的