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=FPrint newline, word, and byte counts for each FILE, and a total line ifmore than one FILE is specified.  A word is a non-zero-length sequence ofcharacters 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 inthe 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 byNUL-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密码

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

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

相关文章

极智嘉(Geek+)货到人方案优势显著,助力拆零场景效率提升

众所周知,零售行业所面临的物流挑战比其他行业更为严峻。这是由于零售行业复杂的行业业态、繁多的商品种类、“唯快主义”的配送需求,以及零售行业的终端客户多为个体消费者,购买习惯以单件、多品为主,购买习惯具有周期性和爆发性…

1. 行为模式 - 责任链模式

亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility 意图 责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理…

多任务数据采集

进程:操作系统中资源分配的基本单位 线程:使用进程资源处理具体任务 一个进程中可以有多个线程:进程相当于一个公司,线程是公司里面的员工。 一 多线程 多线程都是关于功能的并发执行。而异步编程是关于函数之间的非阻塞执行&…

禁用windows更新

Windows Update Blocker 傻瓜式禁用windows更新,打开软件点击disable updates就可以了。 下载按钮需要页面往下拉,找到一个download按钮,不仔细找还看不到 它还可以通过编辑ini文件禁用一些其他东西,体积也很小算是很强大的工具了…

Web自动化测试工具的优势分析

Web自动化测试工具在现代软件开发中扮演着关键的角色,帮助团队确保Web应用程序的质量和稳定性。然而,选择合适的Web自动化测试工具对项目的成功至关重要。本文将介绍Web自动化测试工具优势是什么! 1. 自动化执行 Web自动化测试工具能够模拟用户的行为&am…

CSS 网页制作-学成在线

1、 准备工作 1.1 项目目录 网站根目录是指存放网站的第一层文件夹,内部包含当前网站的所有素材,包含HTML、CSS、图片、JavaScript等等。 1.2 版心效果 可以发现都是呈现版心居中的效果,但是每次都写一次太麻烦了,可以把版心居中…

【小白专用】php pdo方式连接sqlserver 设置方法 更新23.12.21

windows系统的拓展相对来说比较好安装&#xff0c;直接下载对应的dll文件&#xff0c;修改php.ini配置文件即可。 添加PHP对SQL SERVER的支持 1.新建PHP 文件&#xff0c;输入内容&#xff1a; <?php echo phpinfo(); ?> 2.运行后&#xff0c;可以查看到如下数据&…

ASP.Net实现姓名添加查询(三层架构)

目录 演示功能&#xff1a; 点击启动生成页面 点击搜索模糊查询 点击添加跳转新界面 点击Button添加姓名 步骤&#xff1a; 1、建文件 2、添加引用关系 3、根据数据库中的列写Models下的XueshengModels类 4、DAL下的DBHelper&#xff08;对数据库进行操作&#xff09;…

电商行业发展迅速,抓住风口期才能稳赢!

我是电商珠珠 电商平台层出不穷&#xff0c;随着电商的发展&#xff0c;近年来发展模式也有了新的变化。 比如抖音所发展的电商-抖音小店&#xff0c;融合了传统的电商发展模式&#xff0c;并在此基础上增添了兴趣电商的概念&#xff0c;让人们不仅可以去商城搜索自己想要的品…

基于kubernetes集群 容器云管理平台 kubesphere

基于kubernetes集群 容器云管理平台 kubesphere 一、kubesphere 官方参考资料&#xff1a;https://kubesphere.com.cn/docs/v2.1/zh-CN/introduction/intro/ 1.1 kubesphere介绍 KubeSphere是在 Kubernetes 之上构建的企业级分布式多租户容器管理平台&#xff0c;提供简单易用…

基于ssm的星巴克咖啡店管理系统论文

基于ssm的星巴克咖啡店管理系统 摘要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前星巴克咖啡店对于咖啡信息的管理和控制&#xff0c;采用人工登记的方式保存相关数据&#xff0c;这…

深度学习建模从零开始步骤流程

深度学习建模从零开始步骤流程 步骤如下&#xff1a; 环境准备三方库安装建模开发 环境准备 Anaconda安装&#xff1a; Anaconda下载网址&#xff0c;下载win10下的64位版本。 清华镜像站 下载完毕后点击安装&#xff0c;一直点确定或下一步 到上图点击 Just me&#xff…