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 ...
随机推荐
- Unity HDRP BentNormal的理解
1.通过网上冲浪了解到,BentNormal可以解决间接环境高光漏光及间接漫反射光照漏光的问题. 这里的漏光是指间接光照部分没有考虑到模型自身的遮挡关系导致的漏光. 2.可以通过SD之类的软件烘焙Be ...
- java学习之旅(day.21)
HTML 初识HTML HTML: Hyper Text Markup Language(超文本标记语言) 超文本包括文字.图片.音频.视频.动画等 W3C标准 W3C :World Wide Web ...
- java学习之旅(day.11)
static详解 static若在类中使用,就是修饰成员变量 static若在方法中使用,就是成员方法? static加在方法上叫静态方法,加在属性上叫做静态属性 package com.zhang. ...
- 虚拟机上k8s部署好的第二天用时总是出现的各种问题
open /run/flannel/subnet.env: no such file or directory open /run/flannel/subnet.env: no such file o ...
- Java21 GA新特性-虚拟线程详解
本文转载至:虚拟线程 - VirtualThread源码透视 - throwable - 博客园 (cnblogs.com) 一. 前提 JDK19于2022-09-20发布GA版本,该版本提供了虚拟 ...
- tcc-transaction源码详解
更多优秀博文,请关注博主的个人博客:听到微笑的博客 本文主要介绍TCC的原理,以及从代码的角度上分析如何实现的:不涉及具体使用示例.本文通过分析tcc-transaction源码带大家了解TCC分布式 ...
- Linux和Windows时间不一致问题
问题描述 装过双系统或者虚拟机装Linux的人都知道,Linux的时间和Windows往往是不同步的,在编写跨平台程序的时候特别是对时间敏感的代码就带来很大的困扰 解决办法 这个问题可以在Linux下 ...
- 15种pod的状态
15种pod的状态 调度失败 常见错误状态(Unschedulable) pod被创建后进入调度阶段,k8s调度器依据pod声明的资源请求量和调度规则,为pod挑选一个适合运行的节点.当集群节点不满足 ...
- Linux设备驱动--阻塞与非阻塞I/O
注:本文是<Linux设备驱动开发详解:基于最新的Linux 4.0内核 by 宋宝华 >一书学习的笔记,大部分内容为书籍中的内容. 书籍可直接在微信读书中查看:Linux设备驱动开发详解 ...
- react 过渡动画组件
在项目中可能会有一些动画效果展示或是页面切换效果,css动画的方式,比较局限,涉及到一些js动画的时候没法处理了.react-transition-group是react的第三方模块,借住这个模块可以 ...