shell教程(2):积木游戏之认识积木--重要的系统命令

本文是shell教程,介绍了shell的基本概念,讲解了所有命令的用法规则,如命令加选项参数的形式。还传授查看命令选项参数的方法,阐述程序运行原理和Linux文件系统架构。最后列举常用命令,包括显示输入、文件操作、文本处理等命令,助你玩转Linux系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


作者:余涛
email:yutao@big.ac.cn
中国科学院大学

前言

第一课shell教程(1):有没有兴趣玩耍一下shell版俄罗斯方块?简单介绍了什么是shell、它的版本、功能和特性。那么应该如何学习一门编程语言呢,其实就如同小孩们玩搭积木的游戏,想要造一个城堡,首先你要学会认识每一块积木都是用来干什么,这个是用来建造地基,这个是用来建造城墙,那个是用来建造大门…对于shell来说,这一阶段首先要认识一些常用命令,工欲善其事必先利其器,熟悉这些工具在编程的时候才能得心应手。

所有命令的用法规则

俗话说没有规矩不成方圆,所有命令的使用都有着统一的使用方式,一般是
命令 [选项 参数] <输入>
选项结合参数的设置使得命令更为强大,多数命令不需要加任何选项参数就可以运行,但是如果想使用更多的功能你就需要指定选项参数一个或者多个。
所谓的标准输入其实就是键盘输入,文件输入就是存到文本的内容作为命令的输入。
什么鸟语?能不能说人话?请看以下实例。

[Neptuneyut]$echo "Hello Shell"  #在屏幕显示/打印“Hello Shell”
Hello Shell
#“Hello Shell”即为标准输入,我们直接敲到屏幕的,很好理解吧,这里中间缺省选项参数
[Neptuneyut]$ echo -n "Hello Shell" #加参数-n,使得结尾不再换行,不加-n的默认会在结尾加换行
Hello Shell[Neptuneyut]$

经过上面的实例想必大家对命令的一般用法有了感性的认识,但是问题在于每个命令都有不同的选项,我们不可能都记住,这个时候怎么办呢?

授人以渔

command --help[-h]
的方式来查看命令选项参数,这几乎是所有命令或者软件必备的选项功能。值得一提的是,这也应该成为你写脚本必须要提供的一个功能,尽量为每一个脚本提供一个帮助选项,除非你或者别人可以不费周折的知道怎么使用。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h7v7dkJC-1605446904219)(http://lc-1db1mrbq.cn-n1.lcfile.com/c12be56dabba7614d9e4/Image.png)]
从显示的帮助信息可见echo所有选项的功能都描述的比较清楚,稍微懂点英文就可以理解,如果某些描述实在令人费解,那你就加上这个参数按下Enter键大胆尝试,看看结果再理解它的涵义。
除了上面的方式,还有
man command
info command

可以查看系统内建命令(built-in)更为详细的使用方法,但是对于外部的软件就不一定了。
所谓系统内建命令,是指伴随着你操作系统的安装而附带的命令,不需要再通过第三方软件源另行下载安装
可以通过ls /bin/命令查看系统内建命令,对于2.6.32-279.el6.x86_64内核的系统来说有140个内建命令。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ovQ8MRe4-1605446904223)(http://lc-1db1mrbq.cn-n1.lcfile.com/264cd7203c9bf717fa99/Image1.png)]
好了,如何使用命令的方法已经告诉你了,本期推送完!
皮一下,当然没完,下面还有很多干货呢!

程序运行原理

想要理解为什么命令是这样调用的需要理解程序是怎么运行,linux的文件系统又是什么。我们知道程序(或者命令)无非是按照某种语法写在磁盘的文本,运行一个程序,首先就要告诉这个程序存在的物理路径,即磁盘的位置,随后将程序读入内存,并激活cpu的运算能力,由于计算机只认识0101的符号,我们写的代码需要经过一个编译过程,将其转化成计算机识别的语言。纵观这个过程,准确告诉程序的位置是第一步,那么Linux系统的文件系统是如何架构的呢?
上面的命令ls的功能是显示目录下的内容,后面的/bin/是想要的显示的具体目录,为什么系统内建命令都放在这个目录呢?对于Linux系统来说,一切皆文件(程序是文件、设备是文件,各种配置也是文件),既然是文件,就需要文件系统架构,Linux所有的文件都源于根目录,用“/”表示,上下级目录之间也用“/”分割,为了便于管理,系统在安装的时候就会默认生成一些必要的目录用来分类存放各种文件,例如/bin/下存放着各种内建命令,/dev/下存放着各种设备文件,/etc/存放着用户密码和系统配置等文件,/proc/存放着系统动态内核、参数等信息…
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-34VuB5EY-1605446904225)(http://lc-1db1mrbq.cn-n1.lcfile.com/c1222661b696d3e3760d/Image2.png)]
需要注意的是这种从根目录写文件路径的称为绝对路径(例如上面的/bin/echo),在任何时候你都可以找到该文件,进行读、写、执行的操作,但是这样带来的问题是冗长的书写,有可能一条命令光引用路径就写了好几行,那有什么办法吗?此处先卖个关子,将在下期揭晓答案。

常用命令指南

上一节有点歪楼,还是回到本期的主题,简要介绍最为常用的命令。需要说明的是,Liunx完整的系统命令数量庞大,没必要都学一遍,对于大多数人来说掌握常用的一些命令即可,另一个好消息是系统命令使用一般极其简单,因此下面内容仅作为学习指南,具体的参数使用和延申需要大家多动手实践,还是那句话,老司机请绕过。

显示标准输入

  • echo
  • printf

功能:以上命令均能显示输出标准输入,相比echo,printf功能更为强大,可以格式化输出文本内容。
shell应用:在脚本中打印某一步处理输出的结果,用来排查错误;对文本按照特定要求格式化输出,使得输出结果更为整齐、美观。
实用命令:

#彩色输出
echo -e "\e[32mHello shell\e[0m" 
printf "\e[35mHello shell\n\e[0m"
#echo -e "\e[文字颜色m字符串\033[0m"
#指定-e选项后\e将有着特殊含义,即用来设置文字颜色打印字符串,然后再把文字颜色恢复默认设置,0表示使用默认设置。

#格式化输出
printf "%-10s %.2f\n"   二黑  60.256 狗蛋  80.2235
#%s 格式化字符串,-10表示长度10个字符,左对齐
#%f 格式化浮点数,.2表示保留2位小数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0aY4iA0I-1605446904231)(http://lc-1db1mrbq.cn-n1.lcfile.com/dc4a3729790824c70381/Image3.png)]

显示文件输入

  • cat
  • less
  • more
    功能:查看文本内容,cat一次性将文本输到屏幕,more每次输出一部分,less很像more,分次输出,但最后输出结果不会占领屏幕,对于长文本推荐less -S,谁用谁知道。除此之外,cat > filename,可以新建文件按Ctrl+c结束输入(最后要按enter换行,否则不会保存最后一行)。

目录/文件外部操作

  • ls:#查看目录
  • mkdir:#创建目录
  • touch:#创建文件
  • cp:#拷贝文件
  • mv:#移动文件
  • rename:#重命名文件按
  • rm:#删除文件
  • tar:#打包/解包目录
  • gzip:#压缩/解压缩文件
    实例:
ls -lh #l详细显示文件的属性,h根据文件大小自动显示大小(Kb/Mb/Gb)
touch {1..10}.txt #批量创建1.txt 2.txt...10.txt

linux老鸟委员会提醒您:命令千万条,安全第一条,rm -rf / ,老板把命要!!!

文本处理套件

  • seq #生成等差数列
  • tr #从标准输入转换、压缩和删除字符串
  • rev #反转字符串
  • sort #排序
  • uniq #去重,必须先sort才能去重
  • wc #统计文本
  • sed #流编辑器
  • grep #在文件或者标准输入搜索特定的模式
  • awk #强大的文本处理功能,本身就是一门语言,将在后续讲解
echo "aaatcg" |tr atcg tagc|rev #实现序列的反向互补
grep -A n "pattern" file    #在file中搜索pattern,并输出匹配到的行及紧接着的n行 
grep -f list file    #按照list中的patern在file中批量搜索
sed -n "s/pattern/string/pg" file   #将file中匹配pattern的所有字符替换为其他string
seq 1 10|awk '{sum+=$1}END{print sum}' #计算1-10的累加和

文本编辑器

  • vi #强大的文本编辑器,将在后续讲解

系统

  • top #动态查看系统进程和负载
  • ps #静态查看系统进程和负载
  • jobs #查看后台任务

磁盘

  • df #查看磁盘分区大小
  • du #统计文件占用的磁盘大小

网络

ping #测试网络是否畅通
netstat #查看网络连接状态

熟悉以上命令基本可以玩转Linux系统以及做一些简单的任务处理了,其实数一数也才20几个常用的命令,所以,骚年加油,让键盘跳跃起来吧!

本次shell教程的讲解和源码在Github Shell-10-Lessons,欢迎大家star、fork、watch!

输入: ```shell curl --location http://10.1.2.163:8005/v1/chat/completions \ --header 'Content-Type: application/json' \ --header "Authorization: Bearer sk-7Dp9vR2qXyLw3eZa1oN8cKb5jHtF6gM7" \ --data '{ "model": "minicpm-o", "messages": [ { "role": "user", "content": [ {"type": "text", "text": "描述一下这张图片"}, { "type": "image_url", "image_url": {"url": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-VL/boxes.png"} } ] } ], "tools": [], "temperature": 0.1, "top_p": 0.1, "n": 2, "max_tokens": 512, "stream": false }' ``` 输出: ```json { "id": "chatcmpl-785e0369ac974129990cd6863500345f", "object": "chat.completion", "created": 1742530731, "model": "minicpm-o", "choices": [ { "index": 0, "message": { "role": "assistant", "reasoning_content": null, "content": "这张图片展示了一组彩色的塑料积木,每个积木上都有一个数字。这些积木堆叠在一起,形成一个金字塔形状。积木的颜色包括红色、橙色、黄色、绿色、紫色、蓝色和浅蓝色。每个积木上的数字从0到9不等,数字是凸起的,与积木的颜色相匹配。背景是白色的,突出了积木的颜色和数字。", "tool_calls": [] }, "logprobs": null, "finish_reason": "stop", "stop_reason": null } ], "usage": { "prompt_tokens": 500, "total_tokens": 589, "completion_tokens": 89, "prompt_tokens_details": null }, "prompt_logprobs": null } ```结合这个输出输入形式,生成一个相应的后端调用多模态大模型然后生成相应的问题去进行后续流程
最新发布
03-22
在这个场景下,我们可以基于上述 `curl` 请求以及返回结果的设计思路,进一步构建一个后端服务接口用于调用多模态大模型,并根据其输出内容动态生成新的问题以支持更复杂的交互式流程。 ### 后端设计思路 #### 1. 接口功能说明 我们将创建一个 RESTful API 接口(如 `/api/generate_next_question`),接收用户上传的内容(文本或图像 URL)作为输入,通过调用底层的大规模预训练模型(例如 `minicpm-o` 或其他类似模型)完成任务并生成新问题供后续操作使用。 #### 2. 参数结构示例 **请求体 (Request Body)** 示例: ```json { "model": "minicpm-o", "inputs": [ { "type": "text", "content": "描述一下这张图片" }, { "type": "image_url", "content": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-VL/boxes.png" } ], "parameters": { "temperature": 0.1, "top_p": 0.1, "n": 1, "max_tokens": 512, "stream": false } } ``` 其中关键点包括但不限于以下几个方面: - **Inputs**: 可同时包含多种类型的媒体文件(比如纯文字信息、链接指向的远程资源等等)- **Parameters**: 控制采样策略和其他特定行为设置; #### 3. 返回值格式 假设成功解析了给定素材,则应该提供关于素材的具体解释之外还附加一条或多条相关的追问建议,引导用户继续探索相关内容。下面是一个简单的响应 JSON 格式的例子: ```json { "status":"success", "description":"This image shows a set of colorful plastic building blocks...", "next_questions":[ "What specific number sequences do you see on these bricks?", "Can you identify any patterns among the colors used for each digit?" ] } ``` --- ### 实际应用中的步骤分解 1. 用户提交初始数据至我们的自定义API; 2. 将接收到的数据转换成适合目标LLM接受的形式发送过去; 3. 对来自该大型语言模型的答案做必要的处理提取有用部分出来; 4. 基于得到的信息构造出一组可供选择的新话题方向交给前端呈现给最终使用者互动之用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值