Linux Shell 常用命令 - 01篇
系列文章:
Linux Shell 常用命令 - 02篇
0. 在线使用 Linux Shell
JS/UIX - Terminal
地址:https://www.masswerk.at/jsuix/index.html
进入后,点击open terminal即可。它提供简单的终端环境,没有自带gcc等编译套件,不过练习基本命令和shell脚本还是可以的。
1. 常用命令
1.1 ls 命令 - 显示指定工作目录下的内容
显示指定工作目录下的内容(列出目前工作目录所含之文件及子目录)
语法:
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
1.2 查看文件内容:cat

1.3 创建文件: touch

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

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

当然,也可直接使用 vim text2对文件进行编辑
注:无论是 echo "hello">file 还是 echo "hello">>file ,如果file不存在都会先创建file文件
类似的用法有:cat ./result.lst>>aa.txt(将result.lst文件中的内容追加到aa.txt的末尾)
1.4 mv - 为文件或目录改名、或移入其它位置


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

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


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

删除当前目录下的所有文件及目录:
rm -r *
文件一旦通过rm命令删除,则无法恢复,所以须格外小心地使用该命令。
1.6 cp - 复制文件或文件夹
语法:
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/
2. 压缩打包命令 - tar、zip、unzip
来自 https://blog.csdn.net/weixin_44901564/article/details/99682926
打包与压缩的区别:
打包是指将多个文件或者目录放在一起,形成一个总的包,这样便于保存和传输,但是大小是没有变化的,压缩是指将一个或者多个大文件或者目录通过压缩算法使文件的体积变小以达到压缩的目的,可以节省存储空间。
tar命令可以进行打包或压缩、解压,zip与unzip主要进行压缩与解压。(zip命令主要用于windows 系统下,例如在Linux服务器上可用zip进行压缩,下载到本地windows系统,进行解压更加方便)
2.1 tar命令
tar命令常用参数
| -z | 是否同时具有gz属性 |
|---|---|
| -j | 是否同时具有bz2属性 |
| -J | 是否同时具有xz属性 |
| -x | 解压缩、提取打包的内容 |
| -t | 查看压缩包内容 |
| -c | 建立一个压缩,打包文档 |
| -C | 切换到指定目录,表示指定解压缩包的内容和打包的内容存放的目录 |
| -v | 显示压缩或者打包的内容 |
| -f | 使用文件名,在f后面要接压缩后的文件的名字,只要用到tar命令,-f选项是必须要用的,-f参数在使用的时候一定排在其他参数的后面,在最右边 |
| -p | 保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件 |
| -P(大写P) | 保留绝对路径 |
一、打包

二、压缩
Linux主要有三种压缩方式:
- gzip:是公认的压缩速度最快,压缩大文件的时候与其他的压缩方式相比更加明显,历史最久,应用最广泛的压缩方式
- bzip:压缩形成的文件小,但是可用性不如gzip
- xz:是最新的压缩方式,可以自动提供最佳的压缩率
建议压缩的时候标明后缀:
| 参数 | 作用 | 命名方式 |
|---|---|---|
| -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文件已经被追加到档案的末尾了。
2.2 zip命令和unzip命令
在使用 zip 跟 unzip 命令之前先查看系统有没有安装这两个命令的包,没有的话要自己安装。
查看有没有安装zip跟unzip命令的命令:
rpm -q zip unzip
如果安装了,则会显示出命令的版本号

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



二、unzip命令
直接使用:
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会解压
3.Linux属主权限,chgrp,chown,chmod









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


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

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


成功执行
4. shell 命令行参数
参考
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
5. shell 变量
参考
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)
第一种方式把命令用反引号包围起来,反引号和单引号非常相似,容易产生混淆,所以不推荐使用这种方式;第二种方式把命令用$()包围起来,区分更加明显,推荐使用这种方式。
例:

6. shell 字符串
6.1 单引号
str='this is a string'
单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字符串中不能出现单独一个的单引号(转义后也不行),但可成对出现,作为字符串拼接使用
例:
your_name='runoob'
str='Hello, I know you are $your_name'
echo $str
运行结果:
Hello, I know you are $yourname
6.2 双引号
your_name="runoob"
str="Hello, I know you are \"$your_name\"!"
echo $str
运行结果:
Hello, I know you are "runoob"!
双引号的优点:
- 双引号里可以有变量
- 双引号里可以出现转义字符
7. shell 基本运算符
参考 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
7.1 算数运算符

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

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


7.3 布尔运算符


7.4 逻辑运算符


7.5 字符串运算符


Linux Shell 常用命令 - 01篇的更多相关文章
- RedHat Linux Shell常用命令(多数也适用于Unix和AIX)
注:本文转载自疯狂的矩阵一文,http://www.cnblogs.com/520sojustdoit/p/4642568.html --------------------------------- ...
- Linux+Shell常用命令总结
因为自己不经常使用linux的命令行工具,但是mac的终端还是经常使用的,有些命令总是要想一会或者百度一下才知道怎么用,抽时间整理了一下常用的命令,作为笔记. 常用命令 查看文件操作: ls :列出当 ...
- Linux shell 常用命令大全 每日一更
大一上学期学习了Linux的基本操作,已经很久没使用了,虚拟机也近半年没开(作为一个计算机类专业的少年真的不应该).为了补回这些知识和为将来的学习打下基础,现在每天更新一条shell命令及其子命令,欢 ...
- Linux Shell 常用命令与目录分区的学习总结
很早就想根据自己的学习规律和遗忘规律,自己总结一下Linux/Unix系统的Shell命令,一来便于自己时常查询之用,二来也分享于各位博友 Linux shell是系统的用户界面,即命令行.它提供了用 ...
- Linux Shell常用命令手册(Updating)
检查远程端口是否对bash开放: nc -nvv $IP $PORT telnet $IP $PORT 当前任务的前后台切换: Ctrl + z fg 截取变量前5个字符: ${variable:0: ...
- Linux Shell常用命令(长期更新)
#判断某个字段是否匹配指定值 awk -F"," '{if($4=="value"){print $1} else {print $0}}' file.txt ...
- Linux shell常用命令
1. sz 和 rz sz命令发送文件到本地: # sz filename rz命令本地上传文件到服务器: # rz 执行该命令后,在弹出框中选择要上传的文件即可.
- coding++:Linux - Shell - 常用命令
1.在多个文件中 查找内容 find . -type f -name "*.html" | xargs grep "1"
- Linux Shell常用shell命令
Linux Shell常用shell命令 一.文件.目录操作命令 1.ls命令 功能:显示文件和目录的信息 ls 以默认方式显示当前目录文件列表 ls -a 显示所有文件包括隐藏文件 ls -l 显示 ...
- 【shell 大系】Linux Shell常用技巧
在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化.我们数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题.因此这段时间总结的有关Linux ...
随机推荐
- 【WebForms王者归来】在 ASP.NET Core 中运行 WebForms 业务代码,99%相似度!
1. 先说结论 我们为 ASP.NET Core 带来了全新的 WebForms 开发模式,可以让 20 年前的 WebForms 业务代码在最新的 ASP.NET Core 框架中运行,代码相似度9 ...
- mvn install:install-file -Dfile=D:\Clipper1.jar -DgroupId=de.lighti -DartifactId=Clipper -Dversion=6.4.2 -Dpackaging=jar
mvn install:install-file -Dfile=D:\Clipper1.jar -DgroupId=de.lighti -DartifactId=Clipper -Dversion=6 ...
- CSS——阴影
<!DOCTYPE html> <html> <head> <style> p.one { text-shadow: 3px 5px 5px #FF00 ...
- FreeRTOS例程开发
环境配置 下载官方源码 https://www.freertos.org/ 找到这个,他就是visual studio示例demo,我们主要在这个的基础上修改 下载visio studio https ...
- NOIP模拟60
T1 整除 解题思路 答案就是 n 的每一个质因数的合法的答案数相乘(证明的话就....) 但是复杂度显然不允许(虽然我们可以给指数取模水过去).. 可以用积性筛(线性筛)利用质数筛出 \(x^m\) ...
- 记第一次用python写界面
花了两三个小时学了Tkinter,做了一个将数据绘制成图的小工具. 1. 获取路径下的所有文件or获取路径下指定名称的文件 1.1 打开文件 //1. 用来放文本框中的文字filename = St ...
- Advanced .Net Debugging 9:平台互用性
一.介绍 这是我的<Advanced .Net Debugging>这个系列的第九篇文章.这篇文章的内容是原书的第二部分的[调试实战]的第七章[互用性].互用性包含两个方面,第一个方面就是 ...
- 赛博斗地主——使用大语言模型扮演Agent智能体玩牌类游戏。
通过大模型来实现多个智能体进行游戏对局这个想对已经比较成熟了无论是去年惊艳的斯坦福小镇还是比如metaGPT或者类似的框架都是使用智能体技术让大模型来操控,从而让大模型跳出自身"预测下一个t ...
- kettle从入门到精通 第三十二课 mysql 数据连接集群/分区配置
1.这里的集群实际上是数据分区或者分片的概念,如中国全国的学生,应该不会都存在一张表里面,有可能每个省市一个表进行存储. 2.集群(分区),如下图所示 设置在"集群"标签,勾选&q ...
- liquibase常用操作
1.概述 Liquibase是一个用于跟踪.管理和应用数据库变化的开源的数据库重构工具.它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制. 本文旨在将平时工作中常用的一些操作进 ...