命令行基础

449 阅读5分钟

这篇文章中的命令都是在 Cmder 中运行的,点我获取 Cmder
安利一个网站,可以查看命令及参数的具体含义:explainshell

一、常用单词与命令缩写

英文翻译命令/参数
file文件
make制作mk
movemv
remove删除rm
copy拷贝cp
list列表ls
recursive递归的-r
link链接ln
find找到find
echo回声echo
touch触摸touch
change改变cd 中的 c
directory目录/文件夹cd 中的 d
force强制-f

二、实用小技巧

作用命令快捷键
中断一个命令Ctrl + C
清空命令行clear
复制上一条命令的参数Alt + .
查看历史history

三、用户目录

Windows 系统中,C 盘里边的目录不可以乱动,比如 Program Files、Program Files (x86)、Windows 等(你会发现这些目录甚至不能重命名),你能操作的只有 Users 目录。Users 目录中有个 Administrator 目录(或你给电脑起的名字的目录),这个目录就是用户目录。

在用户目录中,你可以随便玩。所以打开命令行的第一件事,就是进入用户目录(或其他目录,比如项目所在目录)。

cd /c/Users/Administrator

上面的命令输入太麻烦了,换个简单的:

cd ~	# ~ 就相当于 /c/Users/Administrator

四、增删改查

1. 增:创建文件

  • 创建文件
touch 1.txt
  • 创建文件并写入内容
echo hi > 1.txt		# 单大于号表示覆盖
echo hihi >> 1.txt	# 双大于号表示追加
echo -e "hello\nworld" >> 1.txt	 # 输入多行内容,需要参数 -e,需要双引号,\n 表示换行
  • 同时创建多个文件
touch 1.txt 2.txt
  • 创建目录
mkdir a
mkdir -p a/b/c		# 创建多级目录
  • 同时创建多个目录
mkdir a b c
mkdir -p a/b/c d/e/f	# 创建多个多级目录
  • 复制文件
cp 1.txt 2.txt
  • 复制目录
cp -r a b	# -r, recursive, 递归地去看目录中有没有其他目录, 有就继续进去看, 没有就复制

2. 删:删除文件

  • 删除文件
rm 1.txt
  • 删除目录
rm -r a		# -r, recursive, 递归地去看目录中有没有其他目录, 有就继续进去看, 没有就删除
  • 强制删除有内容的目录
rm -rf a
# -r, recursive, 递归地去看目录中有没有其他目录, 有就继续进去看, 没有就删除
# -f, force, 强制

友情提示,没事千万不要运行 rm -rf /,不然你就废了!!!

3. 改:修改文件或目录

  • 修改文件内容
start 1.txt		# Windows
open 1.txt		# Mac

以上命令,会用默认程序打开文件或目录。如果你的 Cmder 中可以用 code 命令,那就用 code 命令打开。

code 1.txt	# 使用 VSCode 打开文件

打开文件以后,就可以修改文件内容了。

  • 追加文件内容
echo "hello world" >> 1.txt
  • 清空文件
echo "" > 1.txt		# 单大于号,表示覆盖
  • 重命名文件或目录
mv 1.txt 2.txt		# 将 1.txt 重命名为 2.txt
mv a b			# 将 a目录 重命名为 b目录
  • 移动文件或目录
mv 1.txt a		# 将 1.txt 移动到 a目录中

问:重命名和移动的命令都是 mv,如何区分?

看目标路径是否存在。存在就是移动,不存在就是重命名。
比如 mv 1.txt a

  • 如果 目录a 存在,就是将 1.txt 移动到 a 中
  • 如果 目录a 不存在,就是将 1.txt 重命名为 a
  • 修改文件最后更新时间
touch 1.txt

问:touch 有什么作用?

文件不存在,touch 就是新建文件;
文件存在,touch 就是修改文件最后更新时间。

4. 查:查看文件或目录

  • 查看当前目录绝对路径
pwd
  • 查看当前目录内容
ls		# 不显示隐藏文件
ls -la		# 显示隐藏文件,且详细显示文件信息
  • 查看指定目录内容
ls 路径

# 示例
ls a/b/c	# 查看 a目录 下的 b目录 下的 c目录 中的内容
  • 查看文件内容
cat 路径	# 全部查看

# 示例
cat 1.txt	
less 路径	# 只看文件的一部分(分页查看)
		# 按 J/K 或 上/下 可以上下滚动查看内容
		# 按 Q 退出
		# 如果选中了某一部分,要先按 ESC 取消选中,再按 Q 退出

# 示例
less 1.txt	
head 路径		# 默认显示前 10 行
head -n 14 路径		# 显示前 14 行
tail 路径		# 默认显示后 10 行
tail -n 14 路径		# 显示后 14 行

五、查看命令帮助手册

这么多命令, 记不住怎么办?用以下命令查看帮助手册。

man 命令

# 或者
命令 --help

# 或者
命令 --help | less	# 分页的形式查看,按 J/K 或 上/下 滚动查看
			# | 是管道符

上面的帮助手册太长了,不愿看或者看不懂怎么办?安装 tldr,查看常用命令文档。

npm i -g tldr

# 或者
yarn global add tldr
# 使用
tldr ls		# 查看 ls 常用用法
tldr cp		# 查看 cp 常用用法

六、命令的组合

首先必须知道的是,命令有可能成功,也有可能失败。如果成功了,命令行不会有提示;如果失败了,命令行会有相关的错误提示。

你也可以使用 echo $?,查看上一个命令的返回值。成功返回 0,失败返回 非0。

1. && 操作

作用:当一条命令成功后,执行下一条命令。

touch 1.txt && rm 1.txt && echo 成功

上面代码,创建了 1.txt 又删除了 1.txt,然后打印“成功”。

rm 2.txt && echo 成功

上面代码,由于 2.txt 不存在,在删除 2.txt 时失败了,所以不会打印“成功”。

2. ; 操作

作用:不管成功还是失败,都执行下一条命令。

rm 2.txt; echo 成功

上面代码,由于 2.txt 不存在,在删除 2.txt 时失败了,但是仍然会执行下一条命令,打印“成功”。

七、写个脚本创建项目

步骤:

  1. 创建一个文件,可以不用后缀
touch 一键搞定
  1. 打开该文件,并写入命令
mkdir aaa
cd aaa
touch index.html
touch style.css
touch main.js

echo -e "<!DOCTYPE html>\n<h1>标题</h1>" >> index.html
  1. 为该文件添加可执行权限(Windows 不用加,Windows 没有这个概念)
chmod +x 一键搞定

添加可执行权限的命令是 chmod +x 文件 , +x 就是加可执行权限。

  1. 执行该文件
./一键搞定	# ./ 一定要写

# 或者
sh 一键搞定

执行“一键搞定”文件后,会看到创建了名为 aaa 的目录,目录中有 index.html、style.css、main.js 等文件。

以上,只能创建一个 aaa 项目。如果还要创建 bbb、ccc、ddd 项目,怎么办?

两个办法,一是改代码,把文件中的 aaa 改成 bbb、ccc、ddd,然后分别再运行一次;二是使用参数,告诉文件我要创建什么项目。

只需将文件中的代码改成下面这样,其他步骤不变。

mkdir $1
cd $1
touch index.html
touch style.css
touch main.js

echo -e "<!DOCTYPE html>\n<h1>标题</h1>" >> index.html

执行文件时,像下面这样:

./一键搞定 bbb
./一键搞定 ccc
./一键搞定 ddd

# 或者
sh 一键搞定 bbb
sh 一键搞定 ccc
sh 一键搞定 ddd

以上,在执行的文件后面接上不同的参数,就可以创建不同的项目。

八、其他

1. shebang

shebang 就是一行注释,可以指定用什么程序来执行运行当前的脚本。

拿上面的“一键搞定”做实验:

# 用 sh 来运行当前的脚本
#!/usr/bin/env sh

mkdir $1
cd $1
touch index.html
touch style.css
touch main.js

echo -e "<!DOCTYPE html>\n<h1>标题</h1>" >> index.html

由于脚本中已经指定了使用 sh 运行脚本,所以运行脚本时就不用加上 sh 了,直接运行 一键搞定 aaa 即可。但是由于 ./ 是必须的,所以最终我们的命令是:

./一键搞定 aaa

2. 把文件变成命令

上面的命令看起来似乎和加 shebang 之前没两样,有没有更简洁的执行文件的方法呢?

当然是有的。只要把一个可执行文件的路径放到 path 中,就可以使用文件名作为命令。也就是说,这个文件变成了一个命令。

一键完成 bbb

由此可见,这些可以执行的命令,其实都是文件。

如,查看 ls 命令(文件)所在目录:

where ls

# 或
which ls



转载请注明出处!!!