git仓库工具类总结

1)Git不能提交空目录怎么解决

git和 svn不同,仅仅跟踪文件的变动,不跟踪目录。所以,一个空目录,如果里面没有文件,即便 git add这个目录,另外在别处 check out 的时候,是没有这个空目录的。有时候,确实需要在代码仓库中保留某个空目录。比如测试时需要用到的空目录。

新建.gitignore文件或者在空文件夹下新建.gitkeep文件

2)写给前端的 shell 脚本编程详解

写给前端的 shell 脚本编程详解 - 陈工移山 - SegmentFault 思否

背景:将ng,qc打包到指定目录并压缩成一个包,需要写个sh脚本供ci使用

大多数linux发行版本默认shell使用的是bash

Shell 脚本(shell script),是一种为 Shell 编写的脚本程序,一般文件后缀为 .sh。

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来运行,即:使用哪一种 shell。#!被称为shebang(也称为 Hashbang),例如使用 bash:#! /bin/bash

  • 单行注释:以 # 开头,到行尾结束。
  • 多行注释:以 :<<EOF 开头,到 EOF 结束

# 这是单行注释

:<<EOF

这是多行注释

这是多行注释

EOF

新建一个 test.sh 的文件,内容如下:

#!/bin/bash echo

"Hello World!"

[root@xuegod63 ~]# chmod +x test.sh //修改这个文件的权限使它可以执行

[root@xuegod63 ~]# ./test.sh   执行

shell脚本的执行通常有以下几种方式

1、/root/test.sh  或者 ./test.sh (当前路径下执行脚本的话要有执行权限chmod +x test.sh)

2、bash test.sh 或 sh test.sh  (这种方式可以不对脚本文件添加执行权限)

3、source test.sh (可以没有执行权限)   .  test.sh

4、sh < test.sh 或者 cat test.sh |sh(bash)

3)cmd bash

Unix中默认的 shell是 sh

linux中默认的 shell是 bash

bash 完全兼容 sh

不论是 bash 还是 cmd ,我们也通常称它们为“命令行工具”或者是“命令行界面(CLI)”。

Powershell是cmd的超集,换句话说,cmd能做的事情,Powershell都能做,但是Powershell还能额外做许多cmd不能做的事情

简介

在学习 cmd 与 bash 之前,让我们先了解它们的相关背景,从而更好的认识以及学习它们。

首先,在说 cmd 之前,我们要先说一个操作系统 “DOS(Disk Operating System)”即“磁盘操作系统”。 DOS是基于命令方式来进行工作的,从 1981年到 1995年这15年多的时间内在个人计算机操作系统中,可谓风靡一时,并占据着非常大的市场空间,也衍生了很多其它种类的 DOS系统,但由于其基于命令的工作模式,对于使用者往往有着很高的专业要求,当 window,Macos 等基于图形化界面的操作系统开始普及后,以其简单易用的操作模式, DOS 开始被迅速淘汰,虽然 DOS 已经被淘汰,但也并未完全消失,至今哪怕最新版的“window 10” 在其内部都依然保留着 DOS 。 只是这种被保留的DOS 是以一种独立的应用程序形式存在着,并且在功能上也被进行了精简,而这个应用程序也就是我们要学习的 “cmd”(命令提示符),在 cmd 中,通过执行特定的 DOS 命令,便可以让我们在 window 简单的使用场景中减少对鼠标以及图形化窗口的依赖。

而说到 bash ,则不得不提 shell ,shell是使用C语言编写的一个应用程序,它是用户使用 Unix/Linux 的桥梁,负责把用户的指令传递给内核并且把执行结果回显给用户。 shell 定义了一套自己的“命令集”,这些命令既可以在交互式的场景下等待用户输入命令然后解释执行,也可以在批处理的场景下,用户事先写一个“Shell脚本”(shell Script,通过很多的 shell命令组合成需要的功能)然后让 Shell一次性把这些命令执行完,而不必一条一条地敲命令。

说到这里,让我们重新梳理对 shell 认识的三个重点,首先 shell是一种应用程序,其次 shell中定义了一套 “shell命令集”,最后 shell命令是通过“shell解释器”解释执行,而重点中的重点就在于“shell解释器”,我们知道 shell 的种类有很多,比如 bash、csh、ksh 等等,那么是什么造成了如此多的种类差异呢?其根本原因就在于使用的解释器不同。而解释器的不同,则源于对功能的需要求不同,有的需求场景中需要很轻的解释器,而有的场景则需要更复杂的解释器。通常而言,在 Unix中默认的 shell是 sh,在 linux中默认的 shell是 bash,bash 是基于 Bourne shell,并吸收了 C shell和 K shell的一些特性。bash 完全兼容 sh,也就是说,用 sh 写的脚本可以不加修改的在 bash 中执行。如果想知道你当前的 shell是哪一种的?可以在你的控制台执行这条命令 echo $SHELL。

不论是 bash 还是 cmd ,我们也通常称它们为“命令行工具”或者是“命令行界面(CLI)”。

最后,为什么我们要学习它们?因为学习它们,(cmd)可以让我们可以在 windows 或者 (bash)linux 等简单使用场景中,脱离对鼠标与用户界面的依赖,从而提高编码效率。

当然!“装逼”也是根本原因嘛~

CMD 基础命令##

目录操作

切换目录####

cd :进入指定的目录或者是显示当前的目录。

cd #显示当前的路径 cd dir/sub-dir #进入到dir中的sub-dir目录。 d: # 直接进入d盘

列出文件与子目录####

dir :列出当前目录中的文件以及子目录

dir

dir 除了能默认显示当前目录的文件以及子目录,还可以显示指定目录下的文件以及子目录,同时也会统计目录下的文件以及目录的数量。

dir d:\fornt #显示D盘font目录中的资源

dir 默认不显示一些特殊属性的文件(例如被隐藏了的文件),如果想显示所有文件,可以使用 /a 参数。

dir /a

如果只是想显示具有特定属性的文件,可以为 /a 参数附加对应的属性。

dir /a [d|r|h|s] #显示具有指定属性的文件 dir /ad #只显示目录 dir /ar #只显示只读文件 dir /ah #只显示隐藏文件 dir /as #只显示系统文件

dir 还有一个 /o 的参数也会比较常用,使用它可以分类显示文件以及目录。

dir /o [n | s | e | d] dir /on #按名称(字母)显示 dir /os #按大小(从小到大) dir /oe #按扩展名(字母顺序) dir /od #按日期/时间(从先到后)

创建目录####

mkdir | md :新建目录

mkdir dir # 新建一个dir目录 mkdir dir1\dir2\dir3 # 连续新建三个目录。

删除目录####

rmdir | rd :删除指定目录

md dirname rd dirname md dir1\dir2\dir3 rd dir1\dir2\

*如果目录中含有其它目录或者是文件,单纯使用 rd 将无法删除,必须要结合一些特殊的参数,例如 /s 强制删除/q 安静模式(不会询问)。

复制目录####

xcopy :将目录复制到指定的位置。

xcopy dir e:dir1 #将dir目录复制到 E盘,并重命名为dir1。

*使用这种方式复制目录,只能将目录以及目录中的文件复制到新的位置,但是并不能将目录中的子目录以及子目录中的所有文件也复制过去。
但可以通过附加一个参数 /e 从而实现将整个目录(所有的子目录以及文件)都复制到新的位置中。

xcopy dir e:dir1 /e

移动目录####

move :将指定的目录移动到新的目录中

move C:\Users\gt\Desktop\test distDir #将指定的目录移动到新的目录中 move dir1 dir2 #将dir1目录移动到dir2目录中

重命名目录####

rename | ren :重命名文件或目录名。

ren dirName newDirName

显示树形目录####

tree : 显示目录的树形图。

tree #当前目录的树形图 tree C:\Users\gt\Desktop\ #指定目录的树形图

PS:感觉此命令在我们写项目文档时很有用,使用它可以帮我们生成项目目录的树形结构。

文件操作

新建文件####

notepad : 打开window的记事本程序新建文件。

notepad filename.ext notepad 1.txt notepad index.js

*notepad 是调用window中的记事本程序来新建文件。

删除文件####

del :删除指定的文件或者是清空指定目录中的文件。

del filename #删除指定的文件 del file1 file2 .. #删除多个文件 del dir #清空指定目录下的所有文件 del dir1 dir2 dir3 .. #清空多个目录下的文件。

当使用 del 清空指定目录下的所有文件时,默认会有一个询问,如果想忽略询问,只需要加一个参数/q即可。

del dir /q

出此之外,使用 del 还可以删除特定属性的文件

del /AR #可以删除只读文件 del /AH #可以删除隐藏文件 del /AS #可以删除系统文件

最后,del 还可以结合通配符来删除匹配到文件。

复制文件####

copy :复制一个或者是多个文件

copy file.txt file_copy.txt #在当前目录由file.txt 复制为一个名为file_copy.txt的新文件。 copy C:\Users\Admin\Desktop\index.js index_copy.js #将桌面上的index.js文件复制到当前目录,并命名为index_copy.js copy file1 dir\file2 #相对目录进行复制。 copy file1+file2 dir\file3 #将当前目录的file1与file2文件复制到dir目录中并合成一个新的file3文件。 copy C:\Users\Admin\Desktop\ #将桌面上的所有文件复制到当前目录。

copy 命令还具有两个不是太常用的参数:

copy file /A #复制一个ASCII文件。 copy file /B #复制一个二进制文件。

copy 命令只能复制指定目录中的文件,而不能复制指定目录中的子目录和文件。
如果想复制目标目录下的所有文件和文件夹,可以使用 xcopy 命令,它相当于 copy 命令的扩展版。

移动文件####

move :将指定的文件移动到新的位置。

move file.txt dir/file.txt #将指定的文件移动到指定的目录中。 move file.txt dir/newfile.txt #移动的同时,重新命名。

重命名文件####

ren :重命名文件

ren oldfilename newfilename

文件内容比较####

fc :在指定的文件集中比较文件的内容

fc file1 file2 file3

打印文件####

type :在命令行工具中打印文件内容。

type file #打印文件file的内容。 type dir\file #打印指定目录中file文件的内容。

type 命令还可以结合通配符一起使用,打印多个文件的内容。

type dir\* #打印指定目录dir中所有文件的内容。

查找文件####

我们知道 dir 是用于列出指定目录中所有的文件或子目录,实际上 dir 后面还可以跟上文件名目录名或者是通配符来设置只列出匹配到的文件以及目录。

dir index.js #列出该目录下的index.js dir *.js #列出该目录下扩展名为js的所有文件。 dir * #列出所有文件

与查找文件相同,dir 也可以查找指定的目录

dir dirname

根据内容查找文件####

find :根据文件内容查找文件,不确定文件名称或者是扩展名时可结合通配符使用。

find "function handle" index.js #确定文件查找 find "function handle" *.js #根据文件名模糊查找 find "function handle" ?.js #查找文件名只有一个字符的js文件。 find "function handle" /* #查找所有文件

find 命令还具有一些其它有用的参数:/i 忽略大小写 , /v 只显示匹配到的文件,/n 显示行号。

环境变量###

注意,如果想在window中设置永久的环境变量,只能通过 “我的电脑” - “属性” - “高级” - “环境变量”。
使用命令行来设置环境变量只对当前窗口有效,窗口关闭时,将会自动失效。

设置环境变量####

set : 通过set命令我们即可以查看指定的环境变量,也可以设置一个新的环境变量。

set #查看当前的所有环境变量 set PATH #查看环境变量PATH的值。 set key = value #设置一个新的环境变量并赋值。 set key = value2 #重新对指定的环境变量赋值。

*path这个环境变量是用于设置可执行文件(程序)的搜索路径,是非常常用的一个环境变量。

使用环境变量####

在CMD中,如果想引用某个环境变量,则使用 %env% 的格式。

echo %PATH% set name=usrname echo %name%

下面我们通过一个非常小的例子来理解通过命令设置环境变量 PATH 值的作用。
假设我们有一个可执行的程序,名字叫做 main.exe 保存在 D:\install\main目录中。 一般,我们想执行某个程序的方法有两种:

  • 为可执行文件建立快捷方式到桌面
  • 进入目录,双击执行可执行程序

而上面的方法,不论哪一种,都无法解决在命令行窗口中,输入 main 便可以执行 main.exe的需求。
然而通过设置环境变量 PATH 的值便可以做到这一点。

set main_exc=D:\install\main set PATH=%PATH%;%main_exc% main #执行main

其实设置环境变量PATH的值,可以直接使用 path命令,而无需通过 set 来声明要修改的环境变量。

path %PATH%;%main_exc%

另外,在环境变量 PATH 中如果设置多个值,每个值之间使用 ; 分号隔开。

辅助命令###

cls #清除屏幕。 cmd #进入MS-DOS echo #显示消息,或将命令回显打开或关闭。 exit #退出 CMD.EXE 程序(命令解释程序)。 start #启动单独的窗口以运行指定的程序或命令。 calc #启动计算器 explorer #打开资源管理器 notepad #打开记事本 dxdiag #检查DirectX信息 regedt32 #注册表编辑器 Msconfig #系统配置实用程序 taskmgr #打开任务管理器 help #查看MS-DOS命令帮助。 command /? #查看指定命令详细帮助文档。 wmic #进入wmic(Windows Management Instrumentation),它是windows管理工具命令行版,使用wmic我们可以对整个系统进行管理,例如远程连接、硬件管理、进程管理、账号管理、服务管理、目录管理、共享管理等等,可说它是一个增强版的CMD。

BASH 基础命令##

bash 有些命令与 cmd中非常相像,比如 cd,再比如 mkdir等。因此学会了 cmd 对于学习 bash 也非常有帮助。

关于bash与cmd的区别,我个人认为最大的不同有两点,一是目录路径的表示上, bash使用我们常见的斜杠 cd dir1/dir2/dir3,而 cmd则使用反斜杠 cd dir1\dir2\dir3,虽然 cmd 也可以使用斜杠,但是在某些情况下使用斜杠将会行不通,例如 copy 命令,所以我们建议对 cmd 保持统一的目录风格,即“反斜杠”。最后一点则在于命令的附加参数,cmd中是通过斜杠来附加参数 /params 而 bash则是通过横杠 -params。

目录操作###

切换目录####

cd :进入指定的目录。

cd #进入个人目录 cd / #进入根目录 cd - #返回上次的目录

如果不确定自己当前的目录位置,可以结合 pwd 命令,便会在命令行中打印出当前目录路径。

pwd

列出文件与子目录####

ls :列出当前目录中的文件以及子目录

ls

ls 除了能默认显示当前目录的资源以及子目录,还可以显示指定目录下的文件以及子目录

ls ../ #列出上级目录下的资源和子目录 ls / #列出根目录下的资源和子目录。 ls /home #列出home目录下的资源和子目录。

ls 默认不显示具有特殊属性的文件(例如被隐藏了的文件),如果想显示所有文件,可以使用 -a 参数

ls -a

如果要查看资源或目录更详细的信息,可以附加 -l属性

ls -l

创建目录####

mkdir :创建目录。

mkdir dir #创建一个目录dir mkdir dir1 dir2 dir3.. #同时创建多个同级目录

如果想创建一个目录树,可以附加一个 -p 参数。

mkdir -p a/b/c/d

删除目录####

rmdir :删除空目录
rm -rf :强制删除目录(包括非空目录)。

rmdir emptyDir #删除一个空目录

如果想删除一个非空目录,则需要使用 rm 命令,并使用 -rf 参数。

rm -rf dir #删除一个非空目录。 rm -rf dir1 dir2 dir3 #同时删除多个非空目录。 rm -rf pattern #删除按照特定模式匹配到的目录。

复制目录####

cp -a :复制目录到指定的位置。

cp -a dir ../dir #将当期目录复制一份到上级目录中。 cp -a dir dir2 #复制目录并重命名。

移动目录####

mv :移动目录到指定位置。

mv file file2 #同级移动,相当于重命名目录file为file2 mv file ../file2 #将目录移动到上级目录中并重命名。 sudo mv /home/user/file /home/ #将指定位置的目录移动到指定位置中。

另外,mv 也可以结合通配符进行使用。

mv * ../ #将所有的目录与文件都复制到上级目录中。

重命名目录####

利用 mv 命令同级移动功能,并结合重命名的特点,就可以做到目录的重命名。

mv file newfile2 #同级移动,相当于重命名目录file为newfile2

显示树形目录####

tree :显示目录的树形图。

tree #当前目录的树形图 tree / #根目录下的树形图

PS:感觉此命令在我们写项目文档时很有用,使用它可以帮我们生成项目目录的树形图。

常用目录说明####

/ #根目录 /bin #命令保存目录 /boot #启动目录 /dev #设备文件命令 /etc #配置文件保存目录 /home #家目录 /lib #系统库保存命令 /mnt #系统挂载目录

文件操作###

新建文件####

touch :新建文件

touch filename #新建一个文件。 touch file1 file2 file3... #同时新建多个文件。 touch dir/file #在指定的位置中新建一个文件。

如果终端已经附加了 vi 编辑器,也可以使用 vi filename 的形式来创建文件,与 cmd 中的 notepad 命令功能类似。

删除文件####

rm :删除文件。

rm file #删除文件 rm dir/file #删除指定目录中的文件 rm dir/* #删除指定目录中的所有文件。

复制文件####

cp :复制文件到指定的位置

cp file file1 #将文件复制一份并重新命名。 cp file ../ #将文件复制一份到上级目录中。 sudo cp file / #将文件复制到根目录中。

cp 还可以结合通配符一起使用,将匹配到的文件复制到指定的位置中。

cp dir/* ./ #指定目录中的所有文件复制到当前目录中。

移动文件####

mv :移动文件到指定的位置

mv file ../ #将文件移动到上级目录中。 mv ../file ./ #将上级的文件移动到当前目录中。 sudo mv file / #将文件移动到根目录中。

mv 不仅可以移动文件,还可以在移动后重命名文件。

mv filename1 ../filename2

mv还可以结合通配符使用。

mv na?.txt ../nbc.txt

重命名文件####

利用 mv 命令同级移动的功能再结合其可以重命名的特点,从而实现文件的重命名。

mv file file2 #同级移动,相当于重命名文件file为file2

文件内容比较####

diff :比较多个文件内容的不同

diff file1 file2 ...

打印文件####

cat :在命令行工具中打印文件的内容

cat filename #打印指定文件的内容 cat file1 file2 #同时打印多个文件的内容

cat 命令除了能打印文件的内容,还可以合并多个文件的内容保存到一个新的文件中。

cat file1 file2 > newfile

除此之外,还可以结合通配符来打印匹配到的所有文件内容。

cat a* cat *.txt

如果查看的文件内容很多,还可以使用 less 命令

less file

然后使用 space 便可以向下一页一页的翻动,或者 pgup 向上翻页 , pgdn 向下翻页,q 则可以退出 less命令。

查找文件####

find :可以根绝名称、大小、修改时间来查找指定的文件。

find -name httpd.conf #在当前目录下查找httpd.conf文件。 find -name *.js #在当前目录下查找所有js文件。 find -empty #查找所有为空的目录。 find -size -1000 #查找小于1000KB的文件。 find -size +1000 #查找大于1000KB的文件。

find命令默认在当前目录进行查找,你也可以指定一个目录进行查找。

find / -name *.txt #在根目录下查找所有的txt文件。 find /etc -name httpd.conf #在etc目录下查找httpd.conf文件。

与根据文件名查找文件相同,也可以使用 find 按照目录名来查找目录。

find -name dirname

根据内容查找文件####

grep :可以根据指定的内容来查找含有这些内容的文件。

grep pattern * #查找当前目录含有指定匹配模式的文件。pattren可以是一个正则表达式。 grep c * #查找当前目录含有单词c的文件。

如果想忽略内容的大小写可以附加一个 -i的参数。
显示匹配行及行号附加 -n
如果只显示文件名,不显示具体匹配到的内容,则附加 -l 参数

压缩与解压####

gzip :单独压缩指定的文件,压缩后删除被压缩文件,只保留压缩后的文件,并且不能压缩目录。

gzip file #压缩指定的文件 gzip file1 file2 file3... #同时压缩多个文件

gzip 还可以与通配符结合使用,压缩匹配到的文件。

gzip *.* gzip ?.?.*

若想列出某个 .gz 压缩文件中的内容,可以附加一个 -l 参数。

gzip -l file.gz

解压某个.gz 文件,则使用 gunzip 命令。

gunzip file.gz

zip :与 gzip 相比 zip 可以压缩目录还可以将多个文件压缩在一起,并保留被压缩的文件。

zip filename.zip file1 file2 ... #将指定的文件压缩到一个新创建的压缩文件中。

zip 也可以结合通配符使用,压缩匹配到的文件。

zip filename.zip *.txt

更强的是 zip 还可以一次性压缩一个目录

zip filename.zip dir

同样的,若想列出某个 .zip 压缩文件中的内容,可以附加一个 -l 参数。

unzip -l filename.zip

解压某个.zip 文件,则使用 unzip 命令。

unzip file.zip

打包与解包###

tar :它是linux下的一个打包命令,它可以将一大堆松散的文件或者是目录打包在一起,从而保证资源的完整性。

tar -cvf package.tar file1 file2 file3 ...

如果要打包一个目录,则指定目录名:

tar -cvf package.tar dirname

如果想解包,则附加 -xvf 的参数即可。

tar -xvf package.tar

如果只是想列出某个包中含有的文件或目录,则附加 -tvf 参数即可。

tar tvf package.tar

tar 命令只能打包,而不能压缩ÿ

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nicky_hb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值