系列文章:
Linux Shell 常用命令 - 02篇
JS/UIX - Terminal
地址:https://www.masswerk.at/jsuix/index.html
进入后,点击open terminal即可。它提供简单的终端环境,没有自带gcc等编译套件,不过练习基本命令和shell脚本还是可以的。
显示指定工作目录下的内容(列出目前工作目录所含之文件及子目录)
语法:
ls [-alrtAFR] [name...]
参数:
-a: 显示所有文件及目录 (.开头的隐藏文件也会列出)
-l: 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
ls -l 可写作 ll
常用写法:
ll
ls -al

结合 grep 使用:(关于 grep 的详细介绍见后文)
查看文件 log.txt 是否存在于当前目录下:
>ls | grep log.txt
log.txt
>ls -al | grep log.txt
-rw-rw-r--. 1 mozhiyan mozhiyan 0 4月 15 17:26 log.txt


此时,若想往text2中写入内容,可用 echo "hello word">>text2

>>代表在末尾追加,若使用>则会把之前的内容覆盖:

当然,也可直接使用 vim text2对文件进行编辑
注:无论是 echo "hello">file 还是 echo "hello">>file ,如果file不存在都会先创建file文件
类似的用法有:cat ./result.lst>>aa.txt(将result.lst文件中的内容追加到aa.txt的末尾)


?注:若test目录不存在,则该命令将text4重命名为test

删除文件:rm 文件名
删除文件夹:rm -r 文件夹名。-r 将目录及以下之档案亦逐一删除


-f 直接删除,无需逐一确认,见如下示例:

删除当前目录下的所有文件及目录:
rm -r *
文件一旦通过rm命令删除,则无法恢复,所以须格外小心地使用该命令。
语法:
cp [options] source dest
参数:
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-d:复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。
-i:与 -f 选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 y 时目标文件将被覆盖。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件。
例如,将当前路径下的a.txt复制到另外一个文件夹下:
>cp a.txt /data/test/
将文件夹xgb_pipeline复制到另一个路径下:
>cp -r xgb_pipeline /data/test/
将当前路径下的多个文件复制到另一个路径下:
>cp a.txt b.json /data/test/
来自 https://blog.csdn.net/weixin_44901564/article/details/99682926
打包与压缩的区别:
打包是指将多个文件或者目录放在一起,形成一个总的包,这样便于保存和传输,但是大小是没有变化的,压缩是指将一个或者多个大文件或者目录通过压缩算法使文件的体积变小以达到压缩的目的,可以节省存储空间。
tar命令可以进行打包或压缩、解压,zip与unzip主要进行压缩与解压。(zip命令主要用于windows 系统下,例如在Linux服务器上可用zip进行压缩,下载到本地windows系统,进行解压更加方便)
tar命令常用参数
| -z | 是否同时具有gz属性 |
|---|---|
| -j | 是否同时具有bz2属性 |
| -J | 是否同时具有xz属性 |
| -x | 解压缩、提取打包的内容 |
| -t | 查看压缩包内容 |
| -c | 建立一个压缩,打包文档 |
| -C | 切换到指定目录,表示指定解压缩包的内容和打包的内容存放的目录 |
| -v | 显示压缩或者打包的内容 |
| -f | 使用文件名,在f后面要接压缩后的文件的名字,只要用到tar命令,-f选项是必须要用的,-f参数在使用的时候一定排在其他参数的后面,在最右边 |
| -p | 保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件 |
| -P(大写P) | 保留绝对路径 |

Linux主要有三种压缩方式:
建议压缩的时候标明后缀:
| 参数 | 作用 | 命名方式 |
|---|---|---|
| -z | 用于gzip压缩方式 | 文件名.tar.gz |
| -j | 用于bzip2压缩方式 | 文件名.tar.bz2 |
| -J | 用于xz压缩方式 | 文件名.tar.xz |



tar命令在解压时不需要指明压缩的方式,它会自己选择跟压缩方式对应的方式去解压

?原文中未给出命令,猜测为 tar -xf Golden.apk.tar.gz

补充
a.在打包和压缩的过程中,我们有时会看到这样的语句:tar: 从成员名中删除开头的“/”,这个并不是报错,是因为没有加上-P选项,没有保留原来的绝对路径去打包或者压缩,提取打包的内容跟解压一样,下面举一个例子:


解压的时候同理,如果在压缩文件的时候使用了-P选项,那么在解压时也要加上-P选项,不然也会出现tar: 从成员名中删除开头的“/”
b.在使用tar压缩或者打包的时候,可以通过增加 --exclude 来达到排除指定的文件的目的

压缩文件同理。
c. 使用 -r 选项增加.tar归档文件的内容
通过 tar --help 命令查看帮助
-r 选项的作用:把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件,又发现还有一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中

使用实例:

(先将1进行归档,再追加2)
1.归档操作

生成.tar文件,目录归档完毕
2.将calculating_time.sh追加进入.tar文件中

查看.tar文件的归档信息:

可以看到calculating_time.sh文件已经被追加到档案的末尾了。
在使用 zip 跟 unzip 命令之前先查看系统有没有安装这两个命令的包,没有的话要自己安装。
查看有没有安装zip跟unzip命令的命令:
rpm -q zip unzip
如果安装了,则会显示出命令的版本号

基本用法:
zip [参数] [压缩包名] [压缩的目录或者文件的路径]
示例:
>zip -r xgb_pipeline.zip xgb_pipeline
zip命令常用参数
| -m | 将文件压缩后,删除原文件 |
|---|---|
| -o | 将压缩文件内的所有文件的最新变动时间设为压缩的时间 |
| -q | 安静模式,在压缩的时候不显示指令执行的过程 |
| -r | 递归压缩,将自定目录下的所有子文件以及文件一起处理 |
| -x | ”文件列表“,压缩时排除文件列表中的文件 |
实例



直接使用:
unzip xxx.zip
便可解压到当前目录下。
基本用法:
unzip [参数] [压缩文件] (-d [目录]) //如果不使用括号内的内容,则解压文件到当前工作目录
unzip命令常用参数
| -c | 将解压缩的结果显示到屏幕上(显示每一个目录下的每一个文件的内容),同时对字符做适当的转换,但是并没有解压压缩包 |
|---|---|
| -l | 显示压缩文件内所包含的文件 |
| -t | 检查压缩文件是否正确 |
| -v | 执行时显示压缩文件的详细信息 |
| -q | 安静模式,执行时不显示任何信息 |
| -d | 指定文件解压后存储的目录 |
| -x | 指定不要处理压缩文件中的那些文件 |
实例
a.将harry.zip压缩包解压缩的结果显示出来:

具体会显示到每一个文件跟每一个文件的内容
b.显示jihe.zip压缩包里面所包含的文件

c.检查dajihe.zip压缩文件是否正确

全部OK表示全部文件都是正确的
d.不解压压缩文件dajihe.zip,查看压缩包里面的内容(查看显示的文件列表还包含压缩比率)

使用-v显示的信息比使用-l显示的信息更加详细
e.将dajihe.zip压缩包解压到/opt/目录下:

注:
unzip -l dajihe.zip
unzip -v dajihe.zip
unzip -c dajihe.zip
都不会解压,只是查看
unzip dajihe.zip会解压









【示例】可使用 chmod +x 文件名 使文件变为可执行文件,例如:


? 输入i进行编辑模式,完成后,按esc再输入:wq 保存并退出

? 可以看到此时run.sh处于不可执行状态


成功执行
参考
http://c.biancheng.net/cpp/view/2739.html
http://blog.csdn.net/jake_tian/article/details/97274630
运行脚本时传递给脚本的参数称为命令行参数。
| 变量 | 含义 |
|---|---|
| $0 | 当前脚本的文件名 |
| $n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,获取第一个参数是$1,获取第二个参数是$2,以此类推 | |
| $# | 传递给脚本或函数的参数个数 |
| $* | 传递给脚本或函数的所有参数。 |
| $@ | 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同 | |
| $? | 上个命令的退出状态,或函数的返回值。 |
例:脚本如下:
#!/bin/bash
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
运行:
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
关于$?:上条命令的返回值。0表示没有错误,其他任何数值表示有错误。
参考
https://blog.csdn.net/aLLLiyyy/article/details/103184367
https://blog.csdn.net/weixin_39928768/article/details/111582889
例如:如果上条命令执行失败,则重复尝试3次,shell脚本如下:
cnt=0
python test.py
while(($?==1 && cnt<3))
do
sleep 30 # 休眠30s
let cnt++
python test.py
done
参考
runoob.com/linux/linux-shell-variable.html
http://c.biancheng.net/view/743.html
定义变量时,变量名不加$,如:
a=10
注:变量名和等号之间不能有空格
使用一个定义过的变量时,在变量名前加 $,如:
a=10
echo $a
echo ${a}
变量名外面的花括号是可选的,加花括号是为了帮助解释器识别变量的边界。
已定义的变量,可以被重新定义:
a=10
echo $a
a=20
echo $a
注:第二次赋值的时候不能写成 $a=20,使用变量时才加 $
将命令的结果赋值给变量:
两种方式:
variable=`command`
variable=$(command)
第一种方式把命令用反引号包围起来,反引号和单引号非常相似,容易产生混淆,所以不推荐使用这种方式;第二种方式把命令用$()包围起来,区分更加明显,推荐使用这种方式。
例:

str='this is a string'
单引号字符串的限制:
例:
your_name='runoob'
str='Hello, I know you are $your_name'
echo $str
运行结果:
Hello, I know you are $yourname
your_name="runoob"
str="Hello, I know you are \"$your_name\"!"
echo $str
运行结果:
Hello, I know you are "runoob"!
双引号的优点:
参考 runoob.com/linux/linux-shell-basic-operators.html
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如expr。expr是一款表达式计算工具,使用它能完成表达式的求值操作。
例如,两个数相加:
#!/bin/bash
val=`expr 2 + 2` # 或写为 val=$(expr 2 + 2)
echo "两数之和为: $val"
# 结果
两数之和为: 4
? 注:表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2

注:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。(方括号之间要有空格,运算符和变量之间也要有空格)

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。








system-view进入系统视图quit退到系统视图sysname交换机命名vlan20创建vlan(进入vlan20)displayvlan显示vlanundovlan20删除vlan20displayvlan20显示vlan里的端口20Interfacee1/0/24进入端口24portlink-typeaccessvlan20把当前端口放入vlan20undoporte1/0/10删除当前VLAN端口10displaycurrent-configuration显示当前配置02配置交换机支持TELNETinterfacevlan1进入VLAN1ipaddress192.168.3.100
数组理论基础数组是存放在连续内存空间上的相同类型数据的集合。数组下标从0开始数组内存空间的地址是连续的c++中vector和array的区别1、vector是顺序容器,其利用连续的内存空间来存储元素,但是其内存空间大小是能够改变的。2、array是顺序容器,其也是利用连续的内存空间来存储元素,但它的内存空间是固定大小的,申请之后就无法改变。3、vector的底层是array实现的二维数组二维数组在内存的空间地址是连续的704|二分查找思路1、把整个数组一分为二;2、判断目标值在左区间还是右区间,若在左区间,则修改右区间指针的位置;若在右区间,则修改新区间的左区间位置3、重复上述过程,直到lef
gitclonehttp:www.git.com.cn........ 克隆git项目gitbranch 查看分支gitbranch-r查看远程分支gitpushorigin--delete分支名 删除远程分支tmpgitcheckout切换分支gitcheckout-b切换并创建分支gitcheckout-b分支名origin/分支名(如果远程分支已存在最好用此命令,在创建分支时会把远程分支最新代码一并拉下来,不会把原分支代码带过来)gitbranch-D删除分支gitpushorigin--delete分支名gitpush--set-upstreamorigin分支名 推送本地分支到远端g
在angularjs(1.6.1)中使用该类型的输入,为9.03到9.05之间的值提供undefined。使用其他值时会重现此问题,其中包括9.62、9.63、17.31。这fiddle重现问题。只需在数字输入中单击向上即可。在linuxmint18下的firefox和chromium上测试。它似乎链接到"step"属性。如果设置为"0.001"就没有问题。但是我在这个应用程序中威胁金钱,所以需要2位小数。注意:如果值最初通过data-numeric-value设置为9.03,则它不是未定义.这个错误有什么解决方法吗?编辑已更新fiddle显示step="0.01"与step="0.0
(newDate('2012-12-01')).getMonth()是10而不是11(getMonth是从0开始索引的)。我已经在Firefox、Chrome和Node.js上进行了测试。为什么会这样? 最佳答案 您遇到时区问题。您的JS引擎将字符串解释为UTC,因为它没有进一步指定。来自specificationofDate.parse(由newDate使用):TheStringmaybeinterpretedasalocaltime,aUTCtime,oratimeinsomeothertimezone,dependingont
文章目录前言软件开发整体介绍软件开发流程瑞吉外卖项目介绍项目介绍产品原型展示技术选型功能架构角色开发环境搭建数据库环境搭建maven项目搭建设置静态资源映射后台登录需求分析代码开发功能测试后台退出需求分析代码开发功能测试🌕博客x主页:己不由心王道长🌕!🌎文章说明:SpringBoot项目-瑞吉外卖【day01】🌎✅系列专栏:SpringBoot项目🌴本篇内容:对黑马的瑞吉外卖项目的day01进行笔记和项目实现🌴☕️每日一语:人有退路,就有些许安全感。等到哪一天,你真没了退路,你就发现眼前哪条路都能走,也能通。☕️🚩交流社区:己不由心王道长(优质编程社区)前言从今天开始,正式进入项目阶段。本次的
消除idea顶部窗口上的白色标题栏点击Hlep,找到EditCustomVMOptions...点击添加下面一段话(如果有责显示为false责改为true):-Dide.win.frame.decoration=true然后重启即可,如下图所示,顶部白框已经没有出现了
前言一个需求需要利用Python+第三方库wxauto用于微信上自动获取聊天信息,从而根据自己需求对信息自动进行二次处理,比如自动回复,再比如自动发送文件或者其他。这边使用Python的第三方库`wxauto`来进行开发,而不是`itchat` ---记录于2022年07月 ---2023年1月再次测试可用使用Python3的第三方库wxauto,它适用于Windows的微信客户端官网:https://github.com/cluic/wxauto原因这边使用wxauto来进行开发,而不是itchat,原因如下itchat都是之前的教
使用VisualStudio2013,我将一个混合的Asp.NetWebforms/MVC3Web应用程序迁移到Asp.NetWebforms/MVC5.1。作为迁移的一部分,我使用NuGet包管理器将Jquery从1.9.1升级到2.1.1。当我在Chrome的VisualStudio2013调试器中运行应用程序时,我没有遇到任何问题。当我在IE9的VisualStudio2013调试器中运行应用程序时(兼容模式未打开),首先加载带有这两个脚本标记的母版页:由于此Javascript错误而失败:Unhandledexceptionatline3425,column4inhttp://
我刚刚发现如果我使用newDate('2015-1-1'),时间是没有时区影响的,但是如果我使用newDate('2015-01-01')时间在Node.js中具有时区效果。我输出4Date():console.log(newDate('2015-1-1'));console.log(newDate('2015-01-1'));console.log(newDate('2015-1-01'));console.log(newDate('2015-01-01'));输出是ThuJan01201500:00:00GMT+0800(CST)ThuJan01201500:00:00GMT+08