acwing linux 第七讲 环境变量、管道、常用命令、附录

文章目录

管道

概念

要点

举例

环境变量

查看

修改

常用环境变量

常用命令

系统状况

文件权限

文件检索

查看文件内容

用户相关

其他工具

安装软件

附录

Linux权限

本节课讲解的是管道,环境变量,以及常用命令

管道

概念

管道类似文件重定向,可以将前一个命令的stdout重定向到下一个命令的stdin

要点

管道命令仅处理stdout,会忽略stderr

管道右边的命令必须能接受stdin

多个管道命令可以串联

与文件重定向的区别

文件重定向,左边是命令,右边是文件

管道左右两边都是命令,左边的命令要有stdout,右边的命令要有stdin

举例

find . -name '*.py' | xargs cat | wc -l

统计当前目录所有python文件的总行数

对上面的命令进行解释:

首先,我们单独运行find . -name '*.py' ,会查找出当前目录下,所有以py结尾的文件,如下

而我们的cat命令,其作用是,给定一堆文件,将文件的内容,输出到stdout中(Concatenate FILE(s) to standard output),所以,cat命令,它接收参数,参数指定了文件名,比如cat console.log,表示将console.log这个文件中的内容,输出到stdout

xargs的作用,就是将前一个命令的stdout,转变为行参数(用空格隔开),传递给下一个命令。

假设find . -name '*.py' 的结果是

./client.py
./server.py

find . -name '*.py' | xargs cat

就相当于cat ./client.py ./server.py

cat会将多个文件的内容输出到stdout,此时再通过管道命令,将stdout传递给下一个命令wc -l,(-l for lines)就会从stdout中统计出行数。所以

find . -name '*.py' | xargs cat | wc -l

这个命令,实现的效果就是,统计当前目录下所有python文件的代码总行数。结果如下

如果上面的命令,不加xargs,会是什么效果呢

find . -name '*.py' | cat | wc -l

此时,实际统计的,就是当前目录下python文件的个数。(cat命令也接受stdin的数据,接收stdin时,就仅仅是将stdin输出到stdout

查看某个命令的用法,可以通过cmd --help,或者man cmd进行。比如查看wc命令的用法,执行wc --help

Usage: wc [OPTION]... [FILE]...

  or:  wc [OPTION]... --files0-from=F

Print newline, word, and byte counts for each FILE, and a total line if

more than one FILE is specified.  A word is a non-zero-length sequence of

characters delimited by white space.



With no FILE, or when FILE is -, read standard input.



The options below may be used to select which counts are printed, always in

the following order: newline, word, character, byte, maximum line length.

  -c, --bytes            print the byte counts

  -m, --chars            print the character counts

  -l, --lines            print the newline counts

      --files0-from=F    read input from the files specified by

                           NUL-terminated names in file F;

                           If F is - then read names from standard input

  -L, --max-line-length  print the maximum display width

  -w, --words            print the word counts

      --help     display this help and exit

      --version  output version information and exit

环境变量

Linux系统中有很多配置信息。其中,有一些配置信息,是记录在文件中的,比如系统的cpu信息,记录在/proc/cpuinfo这个文件中

cat /proc/cpuinfo

但是Linux也有一些配置信息,是放在环境变量里的。环境变量,是一种全局变量,可以被各个进程访问到,我们可以通过修改环境变量来修改系统的一些配置,很方便。

查看

查看当前环境下的全部环境变量


env # 显示当前用户的变量

set # 显示当前shell的变量,包括当前用户的变量

export # 显示当前导出为用户变量的shell变量

查看某个环境变量,比如查看PATH这个环境变量

echo $PATH

修改

可以参考shell语法章节 - 变量 小节。

比如修改HOME变量

export HOME=/

随后我们执行cd命令,当cd命令没有参数时,会回到用户的家目录(也就是回到环境变量HOME指定的目录),此时我们可以看到回到了根目录/

但是export命令修改的环境变量,只对当前这个bash生效,当我们关闭bash并重新打开一个,会发现之前的修改已失效。

那么,如何将环境变量的修改进行持久化呢?(也就是说,修改完后,我们希望之后打开的所有bash,都能够应用到此修改)

可以将修改命令放到~/.bashrc(放到这个文件的末尾,因为如果存在相同命令,后面的会覆盖前面的),修改完~/.bashrc后,记得source ~/.bashrc,来将修改应用到当前的bash环境

为何将修改命令放到~/.bashrc后,就可以确保修改会影响未来的所有bash环境呢?因为

每次启动bash,都会先执行~/.bashrc

每次ssh登录远程服务器,都会启动一个bash命令行给我们

每次tmux新开一个pane,都会启动一个bash命令行给我们

由于每次启动bash,都会加载一遍~\.bashrc,所以未来所有新开的bash环境,都会加载我们修改的内容。

(其实Linux下执行的命令,都是单独开一个进程去执行的,比如执行一个不会立即结束的命令top,可以看到最下面的那个进程就是执行top命令的进程。)

常用环境变量

HOME:用户的家目录

PATH:可执行文件(命令)的存储路径。路径之间用:分隔。在bash命令行中执行一个命令,Linux系统是怎么找到这个命令的呢?是通过遍历PATH变量下的目录,从这些目录中找到(第一个)匹配的命令或可执行文件。当某个可执行文件同时出现在多个路径中时,会选择从左到右数第一个路径中的执行。下列所有存储路径的环境变量,均采用从左到右的优先顺序。

LD_LIBRARY_PATH:用于指定动态链接库(.so文件)的路径,其内容是以冒号分隔的路径列表。

C_INCLUDE_PATH:C语言的头文件路径,内容是以冒号分隔的路径列表。

CPLUS_INCLUDE_PATH:CPP的头文件路径,内容是以冒号分隔的路径列表。

PYTHONPATH:Python导入包的路径,内容是以冒号分隔的路径列表。

JAVA_HOME:jdk的安装目录。

CLASSPATH:存放Java导入类的路径,内容是以冒号分隔

常用命令

系统状况

top:查看所有进程的信息(Linux的任务管理器)

打开后,输入M:按使用内存排序

打开后,输入P:按使用CPU排序

打开后,输入q:退出

df -h:查看硬盘使用情况

free -h:查看内存使用情况

du -sh:查看当前目录占用的硬盘空间

du -h --max-depth=1

ps aux:查看所有进程

kill -9 pid:杀死编号为pid的进程

传递某个具体的信号:kill -s SIGTERM pid

netstat -nt:查看所有网络连接

w:列出当前登陆的用户

ping www.baidu.com:检查是否连网

文件权限

chmod:修改文件权限

chmod +x xxx:给xxx文件添加可执行权限

chmod -x xxx:给xxx文件去掉可执行权限

chmod 777 xxx:将xxx的权限改成777

chmod 777 xxx -R:递归修改整个文件夹的权限

其余关于Linux的权限:见附录

文件检索

find /path/to/directory/ -name '*.py':搜索某个文件路径下的所有*.py文件

grep xxx:从stdin中读入若干行数据,如果某行中包含xxx,则输出该行。(也可以添加文件名作为参数,则就是查找某个文件中的某一行是否出现xxx,若出现,则将那一行输出到stdout)

wc:统计行数,单词数,字节数

既可以从stdin中直接读取内容,也可以传入文件名作为参数

wc -l:统计行数

wc -w:统计单词数

wc -c:统计字节数

wc --help:查看帮助文档

tree:展示当前目录的文件结构

tree /path/to/directory/:展示某个目录的文件结构

tree -a:展示所有文件(包括隐藏文件)

ag xxx:搜索当前目录下的所有文件,检索xxx字符串(会列出xxx在哪个文件中的哪一行)

cut:分割一行内容

从stdin中读入多行数据

echo $PATH | cut -d ':' -f 3,5:输出PATH用:分割后第3,5列的数据

echo $PATH | cut -d ':' -f 3-5:输出PATH用:分割后第3-5列的数据

echo $PATH | cut -c 3,5:输出PATH的第3,5个字符

echo $PATH | cut -c 3-5:输出PATH的第3-5个字符

sort:将每行内容按照字典序排序

可以从stdin中读取多行数据

也可以从将文件名作为命令行参数

xargs:stdin中的数据用空格或回车分割成命令行参数

例:find . -name '*.py' | xargs cat | wc -l:统计当前目录下所有python文件的总行数

查看文件内容

more:浏览文件内容

回车:下一行

空格:下一页

b:上一页

q:退出

less:与more类似,功能更全

回车:下一行

y:上一行

Page Down:下一页

Page Up:上一页

q:退出

head -3 xxx:展示xxx的前三行

tail -3 xxx:展示xxx的末尾三行

用户相关

history:展示当前用户的历史操作。内容会持久化到~/.bash_history

其他工具

md5sum:计算md5值

可以从stdin读取数据(stdin输入数据后,敲回车,再按Ctrl + D结束输入)

也可以将文件名作为参数传入

time cmd:统计cmd命令的执行时间

ipython3:交互式python3环境。可以做计算器,或批量管理文件

tar:压缩文件

tar -zcvf xxx.tar.gz /path/to/file/*:压缩指定目录下所有文件

tar -zxvf xxx.tar.gz:解压缩

diff xxx yyy:查找文件xxx与yyy的不同点

sz file:在Xshell等工具中,发送服务器的文件到本地(s for send)

rz:在Xshell等工具中,发送本地的文件到服务器(r for read)

需要运行apt-get install lrzsz,先进行安装

安装软件

sudo cmd:以root身份执行cmd命令udo cmd:

apt-get install xxx:安装某个软件(ubuntu)

pip install xxx --user --upgrade:安装python包

附录

Linux权限

用ls -l 查看当前目录的文件

最左一列的是文件的权限相关信息,一共有10位,最左侧的第1位表示文件类型,如上图

d:表示文件夹,directory

l:表示链接,link

f:表示普通文件,file

后面的9位代表权限,前3位表示文件所有者的权限,中间3位表示文件所属用户组的权限,后3位表示其他用户的权限。

左边第二列的数字表示这个文件的连接数

左边第三列表示这个文件的拥有者(owner)

左边第四列表示这个文件所属的用户组

左边第五列表示这个文件的大小

左边第六列表示这个文件的修改时间

比如,

dr-xr-x---. 22 root root 4096 10月 20 15:01 root

这个root,是个文件夹,并且其owner是root用户,其属于root用户组,大小位4096字节。

左边第一列,后9位是文件权限,前3位是owner权限,r-x,表示这个root文件夹,对于root用户,是可读,可执行的,中间3位是用户组权限,r-x表示这个root文件夹,对于root用户组里的用户,是可读,可执行的,最后3位是其他用户的权限,---表示其他用户对这个文件夹不可读,不可写,不可执行。

可以为某个文件修改权限,使用chmod

chmod u+x run.sh 给run.sh这个文件的owner添加执行权限

chmod g+r run.sh 给run.sh这个文件所属的用户组添加读权限

chmod o-w run.sh 给run.sh这个文件的其他用户删除写权限

chmod a+x run.sh 给run.sh这个文件的所有用户添加执行权限

权限就3种,rwx,读,写,执行,也用3个二进制位来表示,比如111表示三个权限都有,十进制就是7,110表示只有读写权限,十进制就是6,一般我们会用chmod 777 run.sh 给全部用户添加全部权限

chmod 751 run.sh 给run.sh的owner添加全部全写,给其所属的用户组添加读,执行权限(101),给其他用户添加执行权限001

chmod u=rwx,g=rx,o=x run.sh 效果跟上面的命令一样

chmod =r run.sh 给所有用户分配读权限(augo不写的话默认是a)

chmod 444 run.sh 效果同上

chmod -R u+r dir 递归地给 dir这个目录下所有文件及其子目录的owner分配读权限

若想要改变某个文件的owner,可以用chown命令(有时某个目录或文件没有执行权限,可以通过修改文件或目录的owner来解决)

如,递归的给dir目录下的所有文件及子目录修改其owner为yogurt

chown -R yogurt:yogurt dir/

第一个yogurt是用户,第二个yogurt是所属用户组

如何查看系统都有哪些用户?

cat /etc/passwd

只看用户名称

cat /etc/passwd | cut -f1 -d :

查看某个用户的所属组

groups 查看当前用户所属的用户组

groups yogurt 查看用户yogurt所属的用户组

切换用户:su root 切换到root用户 ,su yogurt 切换到yogurt用户(su for switch user,or shift user)

不带参数的su 表示切换到root用户

注意,su 只是切换了用户,而没有切换用户所使用的shell,即,如果当前用户是yogurt

然后我使用su root切换到root用户,则只是换了用户身份,但是shell环境仍然是yogurt的shell,所以在root的PATH变量中的一些命令,是调用不到的

可以看到,只是切换用户的话,当前工作目录都没有发生变化。用su -,会同时切换shell环境。用su只切换用户身份

sudo表示以root权限来运行某个命令。默认情况下,只有root用户才能执行sudo命令,但可以让普通用户以root权限执行某条命令,只要将该用户配置在/etc/sudoers里面即可,

比如sudo su表示以root权限来运行su命令,这样可以不用输入密码root的密码(前提是,在/etc/sudoers配置文件中配置当前用户)

比如当前用户是yogurt,若没进行配置

则会要求输入yogurt的密码

用root用户,修改/etc/sudoers配置文件

然后再在yogurt用户下,用sudo su 就能直接切换到root

当然,用su来切换到root,仍然需要输入root密码

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用通道和模式

通过通道、选择语句和最佳实践掌握 Go 中的并发编程 并发编程是构建高效和响应迅速的软件的强大范例。Go,也被称为 Golang,通过通道提供了一种健壮且优雅的解决方案来进行并发通信。在这篇文章中,我们将探讨通道的概念、它们在并发编程中的作…

数据结构 -- 堆

一.堆的概念 1.1 堆是什么 堆也叫做优先队列,一些按照重要性或优先级来组织的对象称为优先队列。 1.2 为什么需要堆 在现实生活中,存在许多需要从一群人、一些任务或一些对象中找出“下一位最重要”目标的情况。例如:在平时处理事情的时候我…

事件和事件源

事件监听 在JS当中写事件监听是这个函数,写了这个函数,前面是DOM对象,当由DOM树和CSSOM树形成的渲染树也有这个监听,这个函数可以添加到DOM树,最后渲染树也有。渲染树会渲染标签当标签发生该事件就会执行这个函数。这个…

操作系统——进程管理算法和例题

1、概述 1.1 进程调度 当进程的数量往往多于处理机的个数,出现进程争用处理机的现象,处理机调度是对处理机进行分配,就是从就绪队列中,按照一定的算法(公平、髙效)选择一个进程并将处理机分配给它运行&am…

Python---搭建Python自带静态Web服务器

1. 静态Web服务器是什么? 可以为发出请求的浏览器提供静态文档的程序。 平时我们浏览百度新闻数据的时候,每天的新闻数据都会发生变化,那访问的这个页面就是动态的,而我们开发的是静态的,页面的数据不会发生变化。 …

帆软报表 - 数据显示为列表,但是数据仍全部显示在同一行上?

文章目录 1 问题截图2 解决办法3 原因分析3.1 数据设置:全是列表 1 问题截图 想要的效果:每行显示一组数据得到的效果:数据全部显示在一行,以逗号隔开 2 解决办法 修改扩展方向。将 “不扩展” 修改为 “纵向” 3 原因分析 3.1…

消除蛋蛋派

欢迎来到程序小院 消除蛋蛋派 玩法:消除游戏,三个相同形状的蛋蛋连成一条直线即可消除,点击鼠标左键移动球球进行消除, 可以使用道具,共有50关卡,快去闯关吧^^。开始游戏https://www.ormcc.com/play/gameS…

3. BlazorSignalRApp 结合使用 ASP.NET Core SignalR 和 Blazor

参考:https://learn.microsoft.com/zh-cn/aspnet/core/blazor/tutorials/signalr-blazor?viewaspnetcore-8.0&tabsvisual-studio 1.创建新项目 BlazorSignalRApp 2.添加项目依赖项 依赖项:Microsoft.AspNetCore.SignalR.Client 方式1 管理解决方案…

c语言:文件操作(2),认识各种文件操作函数

fgets 作用 fgets是C语言标准库中用于从文件中读取字符串的函数。 fgets函数从指定的文件流stream中读取最多n-1个字符,或者直到遇到换行符(包括换行符在内),并将其存储到以str指向的字符数组中。读取的字符串会以null字符\0结…

模拟电路基础知识经典 200问,收藏这些就够了!

大家总说模电知识总是学不会,IC修真院为大家整理了模电经典200问,看看你掌握了多少,文末可以获取全部哦。 文末可领全部文档 1、半导体材料制作电子器件与传统的真空电子器件相比有什么特点? 答:频率特性好、体积小、功耗小&…

信息收集 - 谷歌hack

搜索引擎 FOFA网络空间测绘:https://fofa.info/ FOFA(FOcus on Assets)是一个网络空间搜索引擎,可以帮助用户快速定位和收集特定目标的信息。 ZoomEye:https://www.zoomeye.org ZoomEye 是一个网络空间搜索引擎,可以用于发现和收集特定目标的网络设备、Web应用程序、开放…

OpenCV-Python(18):图像梯度

目录 背景介绍及应用 学习目标 原理 Sobel算子和Scharr算子 Laplacian 算子 代码示例 重要提醒 背景介绍及应用 图像的梯度是指图像中每个像素点的强度变化情况。计算图像的梯度可以帮助我们了解图像中物体的边界和纹理等信息。梯度在计算机视觉和图像处理领域有着广泛…

【Amazon 实验③】Amazon WAF功能增强之追踪 Amazon WAF RequestID,排查误杀原因

文章目录 1. 方案介绍2. 架构图3. 操作演示 本实验将介绍如何利用 Amazon LambdaEdge,在 Amazon CloudFront 自定义错误页面 上展示每个由 Amazon WAF 返回的“403 Forbidden”错误的 Request ID。通过这个唯一的 WAF Request ID,网站运维工程师能够快速…

Swift 周报 第四十一期

文章目录 前言新闻和社区2024 年 Swift Student Challenge 公布现推出超过 30 个新的开发者活动 提案正在审查的提案 Swift论坛话题讨论推荐博文关于我们 前言 本期是 Swift 编辑组整理周报的第四十一期,每个模块已初步成型。各位读者如果有好的提议,欢…

不受父容器大小约束的TextView

序言 为了实现以下效果,特意开发了一个自定义控件。主要是红色的点赞数和评论数。 问题分析 自定义控件 该控件主要是在于忽略的父容器的大小限制,这样可以展示出全部内容。注意父容器的属性中需要下列配置。 package com.trs.myrb.view.count;impor…

[JS设计模式]Flyweight Pattern

Flyweight pattern 享元模式是一种结构化的设计模式,主要用于产生大量类似对象而内存又有限的场景。享元模式能节省内存。 假设一个国际化特大城市SZ;它有5个区,分别为nanshan、futian、luohu、baoan、longgang;每个区都有多个图…

Java 基础学习(十三)集合框架、List集合

1 集合框架 1.1 Collection 1.1.1 集合框架概述 Java 集合框架是一组实现了常见数据结构(如列表、树集和哈希表等)的类和接口,用于存储一组数据。 开发者在使用Java的集合类时,不必考虑数据结构和算法的具体实现细节&#xff…

使用selenium webdriver和mitmproxy代理模拟用户点击抓包(抓华为应用商城app数据)

文章目录 安装PythonMacWindows 安装程序需要的依赖安装chorm驱动编写代码自动化程序开始抓包 问题处理 本文简单记录一下使用selenium webdriver和mitmproxy代理模拟用户点击抓包的过程。 用于模拟真实的用户访问网站,达到抓包的目的。 作者水平有限,可…

深度解析自动化测试流程(纯干货)

今天就通过这篇文章给大家深度解析一下自动化测试的流程。 自动化测试的流程和功能测试其实挺相似的,整个流程也是按照需求分析及测试计划阶段、测试设计阶段、测试执行和测试总结阶段,总结下来就是下面一张图,ppt中纯手绘,效果不…

天猫数据分析(软件工具)-2023年11月天猫保健品行业分析报告:市场需求扩容,年轻人是主流群体

近年来,随着健康经济、颜值经济的兴起,越来越多的年轻人加入养生大军,成为保健食品市场上的一股新力量,带动市场扩容。根据鲸参谋电商数据分析平台的相关数据显示,今年11月份,天猫平台上保健食品的销量为24…