教程攻略
linux系统编程用什么软件?
一、linux系统编程用什么软件?
命令行格式下可用vi、 gcc,如果是图形界面的话有相应的集成开发环境如KDevelop之类的
二、linux系统编程和shell脚本编程的关系?嵌入式linux需要学哪种?
大家好,是矜辰所致,嵌入式 Linux入 门第五课,本课开始简单学习一下 Shell 脚本编程。
前言
虽然对于做嵌入式 Linux 来说,Shell 脚本使用相对来说不需要那么深入,一般使用的脚本也不会太复杂,但是我们也经常需要用到,所以还是需要特别学习一下。
何为脚本?脚本有很多名字,比如可称为自动化程序,它的目的都是减少人工操作,提高效率,脚本语言是像剧本一样教计算机办某个事情的语言。
我们在前面的文章中已经学习过 Linux Shell ,我们知道Shell 既是一种命令语言,又是一种程序设计语言,本文我们就来认识学习一种为 Shell 编写的脚本程序,Shell 脚本(shell script)。
博主当初在学习 Shell 脚本的时候,其实也是有点坎坷,最主要的是当时的心态问题,心中认为嵌入式开发 Shell 脚本会简单的就好,但是因为有这种心态,导致学习的时候不是那么用心,以至于入门就花了好长一段时间,所以学习还是得摆正心态,用心!
嵌入式 Linux 入门系列博文: 嵌入式 Linux 入门(一、Linux 基本介绍及文件结构)嵌入式 Linux 入门(二、Linux 文件系统、文件类型及权限管理) 嵌入式 Linux 入门(三、Linux Shell 及常用命令说明)嵌入式 Linux 入门(四、Linux 下的编辑器 — 让人爱恨交加的 vi )
一、Shell 脚本基础说明
所谓脚本,就是一个文件,文件里面存放的是 特定格式的指令,系统可以 使用脚本解析器翻译指令并执行 。
在我们熟悉的 Windows 中,我们会有 bat 文件,这可以认为是 Windows 中的脚本,通过代码来实现一系列的任务。
比如在以前学习 STM32 的时候正点原子源码中的工程清理脚本:
1.1 什么是 Shell 脚本
在 linux 中,我们所说的 Shell 脚本: 由 Shell 命令 以及 相关的语法语句 组合组成的一个文件。
Shell 脚本通过解释器解释运行,不用编译即。
上面说的 Shell 命令,就是我们在前面文章 嵌入式 Linux 入门(三、Linux Shell 及常用命令说明) 学习过的 Shell 命令。
上面说的 相关的语法语句,就是我们本文需要学习的 Shell 脚本的语法。在 Shell 脚本中,也有变量,流程控制语句等,他们和 Shell 命令结合起来就形成了一个功能强大的shell 脚本。
<3 Shell 脚本是一个文件,由 Shell 命令 和 相关语法语句 组成!
1.2 Shell 脚本的意义
我们开头就说过,脚本的目的都是减少人工操作,提高效率。
Shell 脚本的意义简单概括为以下几点:
1. 重复步骤的执行;
2. 批量事物的处理;
3. 定时任务执行;
4、方便管理员进行文件管理,Linux下一切接文件,所以可以理解为方便管理员进行所有东西的管理,包括安装,部署,启动,备份,监控,分析等等功能 。
在我们开发 STM32 的时候,也可以使用 GCC 环境,那么就有一个 Makefile 文件,Makefile 就是一种类似于 Shell 脚本的 “脚本” (Makefile 与 Shell 脚本语法有不同)。
使用 Makefile 我们可以简单的使用一个 make 命令经常程序的编译工作,大大提高了我们的开发效率。(Makefile 的内容,我们在后面也会有文章说明)。
1.3 Shell 命令的本质
本小结是为了让我们加深对 Shell 命令的理解。
首先要说明几个概念 : Shell 的 内置命令 与 外部命令 。
Shell 内置命令
Shell 内置命令是内嵌在shell中的,是shell的一部分,这些命令由 shell 程序识别并在 shell 程序内部完成运行,当系统加载 shell 时被加载并驻留在内存中。
比如 linux 的一些简单命令 cd,pwd 等。
Shell 外部命令
外部命令其实是 linux 的 程序,其命令执行过程是由shell程序控制的,在需要时才将其调用内存,当一个外部命令被执行时,一个新的进程即被创建同时命令被执行,外部命令是对应着一个程序,可以理解为 Shell 调用了其他程序的运行。
shell 程序管理外部命令执行的路径查找、加载存放,并控制命令的执行。注意,程序功能强大程序量也会很大。
外部命令是在 bash 之外额外安装的,通常放/bin,/usr/bin,/sbin,/usr/sbin 文件夹中。
判断内部命令还是外部命令:
我们可以使用 type
命令判断命令是内置还是外部的,如下图:
☆ 那么问题就来了 ,一个程序是如何成为一个 Shell 命令的呢?☆
直接简单点说明:
当一个命令被敲下, Shell 首先回到内存中去寻找它的内置命令,当遍历所有内置命令没有找到的时候,它会去设置好的 环境变量 中寻找外部命令,其实就是寻找所对应的应用程序,如果找到对应的应用程序,它会创建一个新的进程,然后在进程里面执行这个应用程序。 如果内外命令都没有找到,就会报错。
在上面的句子中,外部命令是在设置的环境变量中查找的,那么如何查看环境变量呢?
我们可以使用echo
命令 直接打印环境变量,使用语句echo $PATH
,如下图:
一个有趣的测试
我们上面知道了 Shell 外部命令是通过设置好的环境变量(就是一些目录)中的一些应用程序。
所以我们是不是可以自己做一个 Shell 命令呢?
我们使用 vi 编辑器写一个简单的 hello world 程序,如下图:
完成上面步骤我们看到, hello 现在可以运行,可以认为是一个应用程序,结果是输出 hello,world!
重点来了,首先我们这里要运行,是需要用 “.” 指定为当前路径,./hello
表示当前路径下的 hello 程序,我们也只能在这个路径中运行 hello 程序。 但是 Shell 命令,不受路径的约束,我们想要把 hello 这个程序变成 Shell 命令,我们尝试把 hello 放到环境变量的路径中去。
如上图,我们把一个 c 语言的 hello 程序变成了一个 shell 命令。
通过上面的测试,详细大家应该更加理解 Shell 命令的本质。
1.4 Shell 脚本解释器
Shell 脚本解释器?本小结就是说明一下,shell 脚本解释器的种类。
在我们前面讲解 Shell 命令的文章中介绍 Shell 的时候有说过: Shell 有很多种实现,我们最常用为 bash。
我们再复习说明一下 Shell,Shell 介于操作系统内核与用户之间,负责接收用户输入的操作指令并进行解释,将需要执行的操作传递给内核执行,最后输出执行结果, Shell 是一个 命令解释器 。
综上我们可以总结出, 在 Linux 下面有多种命令解释器,bash (Bourne Again Shell)是我们最常用的命令解释器。
原因好像是因为 bash 易用以及免费,使用不同的 Shell 时,其内部指令、命令行提示符等方面会存在一些区别。
我们在 嵌入式 Linux 入门(二、Linux 文件系统、文件类型及权限管理) 中说明用户的时候,已经知道了用户使用的是哪种 Shell ,但是我们有更加直接的方式,直接使用命令echo $SHELL
:
我们说系统中的 Shell 有很多种,那么到底有哪些呢?
在我们使用的 Ubuntu 中,可以通过查看 /etc/shells 文件了解当前系统下所有支持的 shell,如下图:
<3本文脚本编程,是针对于我们最常用的 bash 来说明的。
1.5 编译型语言 和 解释型语言
简单说明一下 编译型语言 和解释型语言,区别一下我们熟悉的 C 语言 于本文学习的 Shell 脚本语言。
本小结参考文章:编译型语言和解释型语言的区别
编译型语言
- 编译型语言要求必须提前将所有源代码一次性转换成二进制指令,也就是生成一个可执行程序(Windows 下的 .exe),比如C语言、C++、Golang、Pascal(Delphi)、汇编等
- 使用的转换工具称为编译器
对于编译型语言,开发完成以后需要将所有的源代码都转换成可执行程序,只要我们拥有可执行程序,就不再需要源代码和编译器了,可以随时运行。
编译型语言可以脱离开发环境运行。
编译型语言一般是不能跨平台的。
首先,可执行程序不能跨平台,pc 端的程序不能在 arm 芯片上运行,windows 下的程序不能在 linux 上运行;
其次,源代码不能跨平台,这个有些是可以跨平台,有些是不可以。
解释型语言
- 解释型语言可以一边执行一边转换,需要哪些源代码就转换哪些源代码,不会生成可执行程序,比如 Python、JavaScript、PHP、Shell、MATLAB 等
- 使用的转换工具称为解释器。
对于解释型语言,每次执行程序都需要一边转换一边执行,用到哪些源代码就将哪些源代码转换成机器码,用不到的不进行任何处理。每次执行程序时可能使用不同的功能,这个时候需要转换的源代码也不一样。
因为每次执行程序都需要重新转换源代码,所以解释型语言的执行效率天生就低于编译型语言,甚至存在数量级的差距。计算机的一些底层功能,或者关键算法,一般都使用 C/C++ 实现,只有在应用层面(比如网站开发、批处理、小工具等)才会使用解释型语言。
在运行解释型语言的时候,我们始终都需要源代码和解释器,所以说它无法脱离开发环境。
相比于编译型语言,解释型语言几乎都能跨平台。
这里要注意一下,解释型语言的跨平台,是指源代码跨平台,而不是解释器跨平台。
解释器用来将源代码转换成机器码,它就是一个可执行程序,是绝对不能跨平台的。
官方需要针对不同的平台开发不同的解释器,同样的代码在不同平台的执行结果才是相同的。在不同的平台下,解释器会将相同的源代码转换成不同的机器码,解释器帮助我们屏蔽了不同平台之间的差异。
.
对于编译型语言,只需要提供可执行文件就可以运行,源代码可以不提供,所以编译型语言的可以不开源。 对于解释型语言,需要所有的源代码才能运行,所以解释型语言的程序一般是开源的。
额外提一句,最近几年很火的 Python 属于典型的解释型语言,运行 Python 程序需要解释器的支持,只要你在不同的平台安装了不同的解释器,你的代码就可以随时运行,不用担心任何兼容性问题,也就是说,Python 的可移植性是很强的。
我们开发 STM32 使用的C 语言 是编译型语言,本文说明的 Shell 脚本语言是 解释型语言。
<3通过上面的介绍,让我们更好的理解了上一小节说的 Shell 脚本解释器为什么有不同种类,同时也能让我们对编程语言能够一个新的认识或者理解。
二、第一个 shell 脚本
2.1 写一个 Shell 脚本
讲了这么多,我们来写第一个 Shell 脚本,使用 vi 编辑器创建一个脚本文件:
#! 用来声明脚本由什么shell解释,否则使用默认shell
# 号代表注释当前行
<3 扩展名并不影响脚本执行,脚本后缀名可以任意修改,仍然可以正常运行。只不过我们写脚本的时候一般都需要见名知意,所以对给对于的后缀名: shell 脚本后缀为 .sh,Python 后缀名为 .py 。
2.2 Shell 脚本的启动方式
在上面我们写完了一个 Shell 脚本,我们尝试用以往的程序启动命令 "./" 运行试试:
发现无法运行,那么 Shell 脚本到底是如何启动的呢?
当程序运行
首先我们先说我们熟悉的方式,就是上面这种方式,当做程序运行,但是上面实际上是失败了,这是为什么呢?
我们看一下文件属性,如下图,新创建的 hello.sh 脚本并没有执行权限:
那么我们就给他执行权限,在以前我们讲解过,给一个文件权限是用 chmod 命令,我们还说过可以使用chmod 777
直接给一个文件最大权限,今天我们说另外一种方式使用 chmod +x
添加执行权限 ,如下图:
添加了执行权限以后,我们就可以把脚本当成一个程序一样执行,如下图:
指定解释器运行
在上文我们介绍过,Linux 中也有很多种 Shell 解释器,我们可以直接使用解释器来运行 Shell 脚本,如下图:
直接指定解释器执行不需要为脚本赋予执行权限,有和没有权限都可以。
当然,除了 bash 我们使用其他的解释器也是可以的,如下图:
source 和 .
直接使用命令source
和 .
执行 Shell 脚本,此种方式也不需要执行权限,如下图:
那么初学者会疑问,source
和 .
是什么?
当你不知道是什么的时候,不妨根据文章前面提到的判断内建命令还是外部命令的方式尝试一下!如下图:
测试过后,我们知道了, source
和 .
是 shell 的内置命令,那么是命令就好说了,记住就行了。
source
是一个 linux 命令,通常使用 .
来代替,使用方式如下:
source filename # filename必须是可执行的脚本文件
或
. filename # “.”号后面还有一个空格
额外说明一下: 前两种方式:当成程序运行和指定解释器运行 shell 脚本时都是在当前 shell 环境下又开了一个子 shell 环境,当脚本执行完后,子 shell 环境立刻就会关闭。而使用source
命令是在当前 shell 环境下执行的。
结语
本来是想一篇文章把 Shell 脚本说完,但是作为入门文章,在基础知识的说明上写了很多的东西,其中也不乏有一些需要理解测试的内容,所以还是把 Shell 脚本编程分成两篇文章。
此篇主要在于基础的介绍说明,下一篇文章主要介绍 Shell 脚本的语法。
<3 本文虽然只是理论的介绍说明,但是不乏有很多值得品味的小细节,对于入门者来说看完以后值得好好的想一想,试一试,希望大家都能有所收获! <3
本文先到这里,谢谢大家!
三、linux系统编程手册怎么样?
不得不说,这是一本内容非常之详实的书,对于想要学习在linux平台下开发的同学来说是至宝。
本书中文版分上下两册,两册是又不同的人来翻译的。我只想说上册译者的水平比下册译者水平高出太多了,下册翻译的个什么鬼,是没校对吧,错误连篇。
总体来说,书的内容非常好,但是下册的翻译太烂,推荐看英文原版。
四、新手怎么在Linux系统上用c语言编程?
下面这篇文章写给初次接触C语言,且想尝试在Linux环境尝试的人:
醉卧沙场:进入Linux世界大门的第二步——Hello World涉及系统环境的细节可能会有差异,学习者应自行举一反三。但是看完这些还是远远不够的,你需要对系统和语言的知识有更多的学习。
想了解更多的可以到我的专栏里的这篇索引文章:
醉卧沙场:README - 专业性文章及回答总索引去看下面这个系列的入门文章:
五、unix/linux系统编程
博客文章:Unix/Linux系统编程的深入探讨
随着计算机技术的不断发展,Unix/Linux系统编程已成为程序员必备的技能之一。它不仅涉及到计算机科学的基础知识,还涵盖了各种高级技术,如文件系统、网络编程、进程管理等。在本文中,我们将深入探讨Unix/Linux系统编程的核心概念和技巧。
文件系统
文件系统是Unix/Linux系统编程的基础,它提供了对文件和目录的管理和操作。程序员需要了解文件系统的结构、文件和目录的创建、删除、重命名以及文件的读写操作。同时,掌握文件权限和所有权的管理也是非常重要的。
进程管理
进程管理是Unix/Linux系统编程的重要组成部分,它涉及到进程的创建、终止、挂起、恢复等操作。程序员需要熟悉进程的状态、类型和相关系统调用,以便更好地控制和管理系统资源。
网络编程
网络编程是Unix/Linux系统编程的高级应用之一,它涉及到socket编程、HTTP协议、TCP/IP协议等。程序员需要掌握网络编程的基本概念和技巧,如套接字的创建、数据的传输、错误处理等。
内存管理
内存管理是Unix/Linux系统编程中不可或缺的一部分,它涉及到内存的分配、释放、缓存等。程序员需要了解内存管理的原理和技巧,以便更好地优化程序性能。
Shell脚本
Shell脚本是Unix/Linux系统编程中常用的工具之一,它提供了简单易用的命令行界面。程序员需要掌握Shell脚本的基本语法和常用命令,以便快速编写简单的自动化脚本。
总之,Unix/Linux系统编程是一门综合性较强的技术,需要程序员具备扎实的基础知识和丰富的实践经验。通过深入了解和掌握这些核心概念和技巧,我们可以更好地驾驭Unix/Linux系统,提高程序性能和稳定性。
六、怎么用c编程来修改linux系统时间?
可以调用函数
settimeofday
int settimeofday(const struct timeval *tv , const struct timezone *tz);struct timeval {time_t tv_sec; /* seconds since Jan. 1, 1970 */suseconds_t tv_usec; /* 微妙 */ };
也可以用system调用系统命令date
七、Linux可以编程吗?
Linux可以编程的。Linux是一款开源免费的操作系统,他和其他的操作系统一样,都是可以在上面编写程序的,是linux本身并不是编程语言,你可以在linux中使用各种编程语言来开发你自己的程序。
另外,linux比WINDOWS强的地方在于,它自带了一些语言的编译器,比如C语言,你直接在命令行就可以编译程序,不需要去购买或者另行安装C语言的开发环境和编译工具。
八、unix/linux系统编程手册
UNIX/Linux系统编程手册
UNIX/Linux系统编程手册是一本非常重要的书籍,它涵盖了UNIX/Linux系统编程所需的各种知识和技能。这本书详细介绍了UNIX/Linux系统的基本概念、操作命令、文件系统、进程管理、网络编程等方面的内容,为读者提供了丰富的实践经验和技巧。
在UNIX/Linux系统中,编程是一项非常重要的技能,它可以帮助用户更好地控制系统的运行和资源的使用。通过编程,用户可以编写自己的脚本和程序,实现自动化操作和高效管理。这本书还介绍了各种编程语言和工具,如C、C++、Python等,以及它们的语法和用法,帮助读者更好地掌握这些语言。
此外,这本书还提供了大量的示例和案例,让读者能够更好地理解和应用所学知识。这些示例和案例涵盖了各种实际场景和问题,如文件操作、网络通信、系统监控等方面,让读者能够在实际操作中不断积累经验,提高自己的编程能力。
总之,UNIX/Linux系统编程手册是一本非常实用的书籍,它为读者提供了丰富的知识和技能,帮助读者更好地掌握UNIX/Linux系统的编程技能。对于想要深入了解UNIX/Linux系统的用户来说,这本书是一本不可或缺的参考书籍。
关键字的应用
在UNIX/Linux系统中,关键字的应用非常重要。通过使用关键字,用户可以更好地描述和定位所需的信息。以下是一些常用的关键字及其用法:
- 操作系统:UNIX/Linux是UNIX和Linux操作系统的统称,它们是当前最流行的操作系统之一。关键字“操作系统”可用于描述操作系统的主要功能和特点。
- 文件系统:UNIX/Linux系统支持多种文件系统,如ext4、xfs等。关键字“文件系统”可用于描述文件系统的类型、特点和使用场景。
- 进程管理:关键字“进程管理”可用于描述UNIX/Linux系统中进程的创建、终止、调度等方面的知识和技巧。
- 网络编程:关键字“网络编程”可用于描述UNIX/Linux系统中的网络编程技术和方法,包括TCP/IP协议、套接字编程等方面的内容。
九、unix/linux系统编程pdf
Unix/Linux系统编程中的PDF文件处理
在Unix/Linux系统中,PDF文件处理是程序员常常需要面对的一个问题。PDF是一种用于存储和传递文档信息的格式,具有极高的安全性和易读性,因此在学术报告、文档传输等方面被广泛应用。然而,由于PDF格式的复杂性,如何在Unix/Linux系统中进行PDF文件处理成为了一个值得探讨的话题。 在Unix/Linux系统中,有多种方法可以用来处理PDF文件。其中,使用命令行工具是一种简单而有效的方法。例如,使用`pdftk`命令可以轻松地合并、分割或加密PDF文件。此外,还可以使用`mupdf`等库来读取和写入PDF文件。这些工具的使用方法可以在相关的文档和教程中找到。 除了命令行工具,还可以使用编程语言来处理PDF文件。例如,Python提供了一个名为`PyPDF2`的库,可以用来读取、合并、分割和加密PDF文件。此外,还有一些第三方库如`PDFMiner`等也可以用来处理PDF文件。这些库的使用方法通常需要一定的编程知识和经验,但它们提供了更多的灵活性和功能。 值得注意的是,处理PDF文件时需要注意版权和授权问题。在修改或使用他人PDF文件时,必须遵守相关的版权法规。此外,一些PDF文件可能包含加密或数字签名,需要特定的权限才能进行操作。 总的来说,Unix/Linux系统中的PDF文件处理是一个相当复杂的话题,需要综合考虑工具的选择、操作的合法性以及安全性等因素。对于初学者来说,建议先了解基本的PDF格式和常见操作,再逐步探索更高级的功能和工具。 以上就是关于Unix/Linux系统编程中PDF文件处理的介绍,希望对大家有所帮助。如有任何疑问,请随时联系我们。十、unix/linux系统编程干啥
关于Unix/Linux系统编程
系统编程是计算机科学中一个重要的领域,它涉及到操作系统的底层实现,以及各种硬件设备的驱动程序开发。在Unix/Linux系统中,系统编程具有许多优势,例如稳定性和高效性,因此受到了广大开发者的青睐。 在Unix/Linux系统中,系统编程通常涉及到对文件系统、进程管理、内存管理、设备驱动、网络编程等方面的操作。这些操作需要对操作系统原理和计算机硬件有深入的了解,以及对各种编程语言的熟练掌握。对于初学者来说,掌握Unix/Linux系统编程是一项极具挑战性的任务,但是一旦掌握了它,就可以更好地理解和控制操作系统,从而提高软件的开发效率和性能。 对于初学者来说,学习Unix/Linux系统编程可以从基础开始,例如学习C语言和汇编语言。这些语言是Unix/Linux系统编程中最常用的语言,也是最接近硬件的语言。通过学习这些语言,可以更好地理解操作系统的底层实现,以及各种硬件设备的驱动程序开发。此外,还可以通过阅读开源代码和参与开源项目来提高自己的技能水平。 总之,Unix/Linux系统编程是一个非常有前途和挑战性的领域,它需要开发者具备深厚的计算机科学知识和编程技能。如果你对操作系统和硬件感兴趣,并且想要提高自己的编程技能,那么学习Unix/Linux系统编程是一个非常不错的选择。学习资源
以下是一些学习Unix/Linux系统编程的资源: * 官方文档:Unix/Linux系统的官方文档是学习该系统编程的重要资源之一。其中包括了操作系统的原理、命令行工具的使用、库函数的使用等方面的内容。 * 开源代码:开源代码是学习Unix/Linux系统编程的另一个重要资源。通过阅读开源代码,可以了解该系统的实现细节和性能优化技巧。 * 培训课程:互联网上有很多免费的和收费的培训课程,可以帮助初学者学习Unix/Linux系统编程。 * 论坛和社区:论坛和社区是学习Unix/Linux系统编程的另一个好去处。在这里可以向其他开发者提问和交流经验。热点信息
-
在Python中,要查看函数的用法,可以使用以下方法: 1. 使用内置函数help():在Python交互式环境中,可以直接输入help(函数名)来获取函数的帮助文档。例如,...
-
一、java 连接数据库 在当今信息时代,Java 是一种广泛应用的编程语言,尤其在与数据库进行交互的过程中发挥着重要作用。无论是在企业级应用开发还是...
-
一、idea连接mysql数据库 php connect_error) { die("连接失败: " . $conn->connect_error);}echo "成功连接到MySQL数据库!";// 关闭连接$conn->close();?> 二、idea连接mysql数据库连...
-
要在Python中安装modbus-tk库,您可以按照以下步骤进行操作: 1. 确保您已经安装了Python解释器。您可以从Python官方网站(https://www.python.org)下载和安装最新版本...