linux shell(上)

几个常用的shell命令

  • file 命令是一个方便的小工具,能够探测文件的内部并判断文件类型

    file .bashrc  # 检查文件
    file Document # 检查目录
    
  • df命令可以方便地查看所有已挂载磁盘的使用情况

  • du 命令可以显示某个特定目录(默认情况下是当前目录)的磁盘使用情况。

  • sort 命令会依据会话所指定的默认语言的排序规则来对文本文件中的数据行进行排序

    sort file1     # sort 命令会依据会话所指定的默认语言的排# 序规则来对文本文件中的数据行进行排序
    sort -n file2  # sort 命令会将数字视为字符并执行标准的字符排序# 可以使用-n 选项告诉 sort 命令将数字按值排序
    sort -M file3  # 常用选项-M,该选择可以将数字按月排序
    
  • find 查找文件

    find / -name file1  # 从 '/' 开始进入根文件系统搜索文件和目录
    find / -user user1  # 搜索属于用户 'user1' 的文件和目录
    find /home/user1 -name \*.bin     # 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件
    find /usr/bin -type f -atime +100 # 搜索在过去100天内未被使用过的执行文件
    find /usr/bin -type f -mtime -10  # 搜索在10天内被创建或者修改过的文件
    find / -xdev -name \*.rpm         # 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备
    find / -name \*.rpm -exec chmod 755 '{}' \; # 搜索以 '.rpm' 结尾的文件并定义其权限
    

linux 环境变量

bash shell 使用环境变量来存储 shell 会话和工作环境的相关信息。环境变量允许在内存中存储数据,以便 shell 中运行的程序或脚本能够轻松访问到这些数据。这也是存储持久数据的一种简便方法。

全局环境变量

全局环境变量对于 shell 会话和所有生成的子 shell 都是可见的。

Linux 系统在你启动 bash 会话时就设置好了一些全局环境变量。系统环境变量基本上会使用全大写字母,以区别于用户自定义的环境变量。

# 可以使用 env 命令或 printenv 命令来查看全局变量
env 
printenv

要显示个别环境变量的值,可以使用 printenv 命令

# HOME变量表示当前用户的home绝对路径
printenv HOME
# 可以使用 echo 命令显示变量的值
echo $HOME  # 注意添加$符

局部环境变量

局部环境变量则只对创建它的 shell 可见。

set 命令可以显示特定进程的所有环境变量,既包括局部变量、全局变量,也包括用户自定义变量。

set

用户自定义变量

定义一个my_variable,并引用

my_variable="Hello World" # 变量名、等号和值之间没有空格
echo $my_variable

注意:等号两边不能有空格

字符串定义最好加上引号(养成习惯)。(如果没有引号,上例中会将World识别为命令)

退出shell后my_variable变量会被销毁,重新打开shell无法访问

设置全局变量

全局环境变量在设置该变量的父进程所创建的子进程中都是可见的。创建全局环境变量的方法是先创建局部变量,然后再将其导出(export)到全局环境中。

my_variable="I am Global now"
export my_variable
echo $my_variableexport my_var='ok' # 可以将设置变量和导出变量放在一个命令里完成

修改子 shell 中的全局环境变量并不会影响父 shell 中该变量的值

子 shell 甚至无法使用 export 命令改变父 shell 中全局环境变量的值

删除环境变量

可以用 unset 命令来完成这个操作。在 unset 命令中引用环境变量时,记住不要使用$。

my_variable="I am going to be removed"
echo $my_variable
unset my_variable

设置PATH环境变量

引用原来的 PATH 值,添加冒号(:),然后再使用绝对路径输入新目录即可

PATP=$PATH:/home/zx/Scripts

修改后的PATH只能在当前的shell中使用!

环境变量持久化

当你登录 Linux 系统启动 bash shell 时,默认情况下 bash 会在几个文件中查找命令。这些文件称作启动文件或环境文件。bash 进程的启动文件取决于你启动 bash shell 的方式。启动 bash shell有以下 3 种方式:

  • 登录时作为默认登录 shell;

  • 作为交互式 shell,通过生成子 shell 启动;

  • 作为运行脚本的非交互式 shell。

登录shell

登录 Linux 系统时,bash shell 会作为登录 shell 启动。登录 shell 通常会从 5 个不同的启动文件中读取命令。

  • /etc/profile

  • $HOME/.bash_profile

  • $HOME/.bashrc

  • $HOME/.bash_login

  • $HOME/.profile

/etc/profile 文件是系统中默认的 bash shell 的主启动文件。系统中的每个用户登录时都会执行
这个启动文件。

另外4个启动文件是针对用户的,位于用户主目录中,可根据个人具体需求定制。

交互式shell进程

如果不是在登录系统时启动的 bash shell(比如在命令行中输入 bash),那么这时的 shell 称作交互式 shell。

作为交互式 shell 启动的 bash 并不处理/etc/profile 文件,只检查用户$HOME 目录中的.bashrc文件。

非交互式shell

系统执行 shell 脚本时用的就是这种 shell,不同之处在于它没有命令行提示符。

持久化

对全局环境变量(Linux系统的所有用户都要用到的变量)来说,最好在/etc/profile.d目录中创建一个以.sh
结尾的文件,把所有新的或修改过的全局环境变量设置都放在这个文件中。

在大多数发行版中,保存个人用户永久性 bash shell 变量的最佳地点是$HOME/.bashrc 文件。

构建基础脚本

在创建shell脚本文件时,必须在文件的第一行指定要使用的shell,格式如下:

#!/bin/bash

在普通的shell脚本中,#用作注释行。shell并不会处理shell脚本中的注释行。然而,shell脚本文件的第一行是个例外,#后面的惊叹号会告诉shell用哪个shell来运行脚本。

可以通过 echo 命令添加自己的文本消息来告诉用户脚本正在做什么。

echo This is a test #  在默认情况下,无须使用引号将要显示的字符串划定出来

echo 命令可用单引号或双引号来划定字符串。如果在字符串中要用到某种引号,可以使用另一种引号来划定字符串。

echo "This is a test to see if you're paying attention" # 字符串中有引号

如果想把字符串和命令输出显示在同一行中,可以使用 echo 命令的-n 选项

echo -n "The time and date are: "

shell 变量

在脚本中,可以在环境变量名之前加上$来引用这些环境变量

#!/bin/bash
# display user information from the system.
echo "User info for userid: $USER" # echo 命令中的环境变量会在脚本运行时被替换成当前值
echo UID: $UID
echo HOME: $HOME

环境变量$USER、$UID 和$HOME 用来显示已登录用户的相关信息

自定义变量

shell 脚本还允许用户在脚本中定义和使用自己的变量。定义变量允许在脚本中临时存储并使用数据。

用户自定义变量的名称可以是任何由字母、数字或下划线组成的字符串,长度不能超过 20个字符。因为变量名区分大小写,所以变量 Var1 和变量 var1 是不同的。

使用等号为变量赋值。在变量、等号和值之间不能出现空格。

var1=10
var2=-57
var3=testing
var4="still more testing"
命令替换

shell 脚本中最有用的特性之一是可以从命令输出中提取信息并将其赋给变量。把输出赋给变量之后,就可以随意在脚本中使用了。

有两种方法可以将命令输出赋给变量:

  • 反引号(`)

  • $()格式

#!/bin/bash
test1=`date`
test2=$(date)
echo "The date and time are: " $test1
echo "The date and time are: " $test2

重定向输入和输出

输出

有时候,想要保存命令的输出而不只是在屏幕上显示。bash shell 提供了几个运算符,它们可以将命令的输出重定向到其他位置(比如文件)。

最基本的重定向会将命令的输出发送至文件。bash shell 使用大于号(>)来实现该操作

command > outputfile

如果输出文件已存在,则重定向运算符会用新数据覆盖已有的文件

命令输出追加到已有文件中,可以用双大于号(>>)来实现

date >> test6
输入

输入重定向和输出重定向正好相反,输入重定向会将文件的内容重定向至命令。输入重定向运算符是小于号(<):

command < outputfile
wc < test6

wc 命令可以统计数据中的文本,在默认情况下,它会输出 3 个值

  • 文本的行数

  • 文本的单词数

  • 文本的字节数

还有另外一种输入重定向的方法,称为内联输入重定向(inline input redirection)。这种方法无须使用文件进行重定向,只需在命令行中指定用于输入重定向的数据即可。

command << marker

管道

将一个命令的输出作为另一个命令的输入,这可以通过重定向来实现,只是略显笨拙。无须将命令输出重定向至文件,可以将其直接传给另一个命令。这个过程称为管道连接(piping)。

# command1 | command2  # 格式
rpm -qa | sort
rpm -qa | sort | more

数学运算

expr命令

Bourne shell 提供了一个专门用于处理数学表达式的命令:expr,该命令可在命令行中执行数学运算,但是特别笨拙。

expr 1 + 5
expr 5 \* 2 # 注意转义字符
#!/bin/bash
# An example of using the expr commandvar1=10
var2=20
var3=$(expr $var2 / $var1)
echo The result is $var3
使用方括号

在 bash 中,要将数学运算结果赋给变量,可以使用$和方括号($[ operation ]):

var1=$[1 + 5]
echo $var1
var2=$[$var1 * 2]
echo $var2

退出脚本

Linux 提供了专门的变量$?来保存最后一个已执行命令的退出状态码。对于需要进行检查的命令,必须在其运行完毕后立刻查看或使用$?变量。

echo $?

对于成功结束的命令,其退出状态码是 0。对于因错误而结束的命令,其退出状态码是一个正整数:

状态码描述
0命令成功结束
1一般性未知错误
2不适合的 shell 命令
126命令无法执行
127没找到命令
128无效的退出参数
128+x与 Linux 信号 x 相关的严重错误
130通过 Ctrl+C 终止的命令
255正常范围之外的退出状态码

exit 命令允许在脚本结束时指定一个退出状态码:

#!/bin/bash
# testing the exit status
var1=10
var2=30
var3=$[ $var1 + $var2 ]
echo The answer is $var3
exit 5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/47438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型涉及到的知识点

1. 基础数学和统计学 **线性代数&#xff1a;**矩阵运算、特征值与特征向量、奇异值分解等。 **微积分&#xff1a;**导数和积分、链式法则、梯度下降法等。 **概率与统计&#xff1a;**概率分布、期望与方差、最大似然估计、贝叶斯定理等。 2. 机器学习基础 监督学习&#xf…

【BUG】已解决:python setup.py bdist_wheel did not run successfully.

已解决&#xff1a;python setup.py bdist_wheel did not run successfully. 目录 已解决&#xff1a;python setup.py bdist_wheel did not run successfully. 【常见模块错误】 解决办法&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主…

在Django项目中创建Django App

进入code虚拟环境 .\.venv\Scripts\activate创建demoapp python demo/manage.py startapp demoapp

Neuralink首款产品Telepathy:意念控制设备的革新与挑战

近年来&#xff0c;科技领域不断涌现出令人惊叹的突破&#xff0c;其中尤以脑机接口&#xff08;BCI&#xff09;技术为代表。近日&#xff0c;Elon Musk的Neuralink公司发布了其首款脑机接口产品Telepathy&#xff0c;引发了广泛关注。本文将详细探讨Telepathy的功能、技术原理…

十、继承

十、继承 继承的基本概念使用继承的原因继承的用途继承的注意事项继承的基本使用定义基类定义派生类使用派生类的对象注意事项示例&#xff1a;构造函数和析构函数的调用 继承基本规则继承方式注意事项示例 赋值兼容原则继承中的同名成员成员变量成员函数总结 继承中的静态成员…

PCIe总线-RK3588 PCIe平台驱动分析(十)

1.简介 RK3588 PCIe RC和EP使用同一个平台驱动&#xff0c;其主要的作用是解析设备树中的资源、初始化中断、使能电源、初始化PHY、使能时钟和释放复位&#xff0c;然后根据compatible属性初始化RC或者EP驱动。 2.入口 平台驱动的定义如下&#xff0c;当compatible属性为&qu…

【hadoop大数据集群 1】

hadoop大数据集群 1 文章目录 hadoop大数据集群 1一、环境配置1.安装虚拟机2.换源3.安装工具4.安装JDK5.安装Hadoop 一、环境配置 折腾了一下午/(ㄒoㄒ)/~~ 1.安装虚拟机 参考视频&#xff1a;https://www.bilibili.com/video/BV18y4y1G7JA?p17&vd_sourcee15e83ac6b22a…

C语言:静态库和动态(共享)库

相关阅读 C语言https://blog.csdn.net/weixin_45791458/category_12423166.html?spm1001.2014.3001.5482 在软件开发中&#xff0c;库&#xff08;Library&#xff09;是一个至关重要的概念。它们是由函数和数据的集合构成&#xff0c;用于实现特定的功能&#xff0c;供其他程…

使用Vuepress搭建个人网站

网站地址&#xff1a;bloggo.chat

vue中怎么改变状态值?

在Vue中&#xff0c;状态值通常指的是组件的data函数返回的对象中的属性&#xff0c;或者是Vuex状态管理库中的状态。以下是在Vue中改变状态值的几种常见方法&#xff1a; 1. 直接在组件内部改变状态值 在Vue组件中&#xff0c;你可以直接在methods中改变data函数返回的对象中…

MySQL学习作业二

作业描述 SQL语言 建库&#xff0c;使用库 mysql> create database mydb8_worker;#新建库mysql> use mydb8_worker; 建表&#xff0c;查看表 #建表 mysql> create table t_worker(department_id int(11) not null comment部门号,worker_id int(11) primary key no…

无人机足球比赛技术详解

一、无人机类型参数 在无人机比赛中&#xff0c;不同类型的无人机因其独特的参数配置而表现出不同的性能。这些参数包括但不限于&#xff1a; 1. 机体尺寸&#xff1a;小型无人机适合室内或狭窄空间比赛&#xff0c;而大型无人机则更适用于室外大场地赛事。 2. 动力系统&…

动态路由协议 —— EIGRP 与 OSPF 的区别

EIGRP&#xff08;增强内部网关路由协议&#xff09;和 OSPF&#xff08;开放式最短路径优先&#xff09;是两种最常见的动态路由协议&#xff0c;主要是用来指定路由器或交换机之间如何通信。将其应用于不同的情况下&#xff0c;可提高速率、延迟等方面的性能。那么它们之间到…

装修前需要提前准备啥

雅静说装修前自备15材料,才不会手慌脚乱      省的师父用的时候我们还得着急到处跑,关键质量和价格还没得选      1,保护膜,一开工就把入户门,电梯口的墙都包好      不然装完就像这样,磕碰的到处是口子      2,钥匙密码盒,有时候上班我们不在,师父或送材料的一…

IO多路复用-select的使用详解【C语言】

1.多进程/线程并发和IO多路复用的对比 IO多路转接也称为IO多路复用&#xff0c;它是一种网络通信的手段&#xff08;机制&#xff09;&#xff0c;通过这种方式可以同时监测多个文件描述符并且这个过程是阻塞的&#xff0c;一旦检测到有文件描述符就绪&#xff08; 可以读数据…

【数据结构进阶】二叉搜索树

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; C || 数据结构 目录 &#x1f308;前言&#x1f525;二叉搜索树&#x1f525; 二叉搜索树的实现Insert&#xff08;插入&#xff09;find&#xff08;查找&#xff09;erase(删除)destro…

firefly rk3288 ubuntu23.10 网卡名为end0 改为eth0

1、内核源码修改u-boot/include/env_default.h文件第32行的bootargs参数&#xff0c;修改后&#xff1a; "bootargs net.ifrenames0 " CONFIG_BOOTARGS "\0"2、修改rootfs里的lib/systemd/network/99-default.link文件&#xff1a; [M…

分布式锁、Lua脚本、redisson、运行lua脚本优化代码

20240721 一、分布式锁1. 什么是分布式锁2. 分布式锁的实现3. 基于redis的分布式锁4 总结 二、对于lua脚本可以保证事务&#xff0c;要么成功要么失败。1. 在redis中调用lua脚本 三、Redisson1 步骤2. Redisson的总结3. 几种分布式锁的区别 三、优化我们的秒杀1. 我们在创建优惠…

Docker安装笔记

1. Mac安装Docker 1.1 Docker安装包下载 1.1.1 阿里云 对于10.10.3以下的用户 推荐使用 对于10.10.3以上的用户 推荐使用 1.1.2 官网下载 系统和芯片选择适合自己的安装包 1.2 镜像加速 【推荐】阿里镜像 登陆后&#xff0c;左侧菜单选中镜像加速器就可以看到你的专属地…

windows和linux的等保加固测评的经验分享

一头等保加固测评的牛马&#xff0c;需要能做到一下午测评n个服务器 接下来就讲讲如何当一头xxxxxxxxx》严肃的等保测评加固的经验分享&#xff08; 一、window等保 首先你要自己按着教程在虚拟机做过一遍&#xff08;win2012和win2008都做过一遍&#xff0c;大概windows的…