本篇内容介绍了“linux操作系统的常用命令及环境变量是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
Linux是一个可以自由发布的类UNIX内核实现,它是一个操作系统的底层核心。Linux是由芬兰赫尔辛基大学的Linus开发,期间得到了网上广大UNIX程序员的帮助。它最初是受其教授的Minix(一个小型的类UNIX系统)启发而开发的程序,纯属个人的爱好,但是后来它自身逐步发展成为一个完整的系统
要理解什么是Linux,首先要了解在Linux之前诞生的系统和应用程序——UNIX和GNU软件。
UNIX操作系统最初是由贝尔实验室开发的,当时的贝尔实验室是电信巨头AT&T(美国电报电话公司)旗下的一员。如今,它已经成为一种非常流行的多用户、多任务操作系统。UNIX操作系统可以运行在大量不同种类的硬件平台上,其适用范围从PC机到多处理器服务器和超级计算机。
在UNIX上进行程序开发有些典型的风格和特点:
1)简单性:许多很有用的UNIX工具是非常简单的。“小而简单”是一种值得学习的技术。越大、越复杂的系统注定会包含越大、越复杂的错误。
2)集中性:让一个程序很好地执行一项任务好过把所有功能都堆在一起。功能臃肿的程序难于使用和维护,单一目标的程序更容易随着更好的算法被开发出来而得到改进。在UNIX中,当用户出现新的需求时,我们通常是把小工具组合起来完成更复杂的任务,而不是试图将一个用户期望的所有功能放在一个大程序里。
3)可重用的组件:将应用程序的核心实现为库。具有简单而灵活的编程接口的库可以帮助其他人开发出同类程序,或者把这些技术应用到新的应用领域。
有了操作系统内核还不够,Linux能够发展到今天是无数人共同努力的结果。操作系统内核本身仅仅是可用开发系统的一小部分。一般的UNIX系统还包括提供系统服务和工具的应用程序,对于Linux系统,这些程序是由许多程序员编写并自由发布的。
Linux社区支持自由软件的概念,即软件本身不应受限,它们遵守GNU(GNU是GNU’s Not UNIX的递归缩写)通用公共许可证(GPL)。
自由软件基金会(Free Software Foundation)是由Richard Stallman创立,其宗旨是:试图创建一个与UNIX系统兼容,但并不受UNIX名字和源代码私有权限制的操作系统和开发环境。
GNU项目已经为软件社区提供了许多UNIX系统上应用程序的仿制品。例如大名鼎鼎的:
GCC:GNU编译器集,它包括GNU C编译器。
G++:G++编译器,是GCC的一部分。
GDB:源代码级的调试器。
GNU make
bash:命令解释器(shell的一种)
有了这些可用的自由软件,再加上Linux内核,我们可以说:创建一个GNU的、自由的类UNIX系统的目标已经通过Linux系统实现了。由于GNU软件做出的贡献,现在许多人通常把Linux系统称为GNU/Linux。
工欲善其事必先利其器,想要进行Linux程序开发需要先搭建开发环境。
进行 Linux 开发需要安装一个 linux 系统环境,一般使用 VMWare 安装Ubuntu 系统进行开发。具体安装过程大家可以参考以下帖子https://zhuanlan.zhihu.com/p/38797088这里我就不做过多介绍。
Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。传统的网络服务程序,如 FTP、 Pop 和 Telnet 其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人攻击方式的攻击。
SSH 分为客户端 openssh-client 和服务器 openssh-server,我们需要在 ubuntu 系统下安装 ssh 服务器,以便使用 ssh 客户端登录到系统。
sudo apt update
sudo apt install openssh-server
sudo service ssh start
ip addr show
命令查看 ubuntu 系统 ip可以看出,当前 ubuntu IP 地址为 192.168.176.148
在 Ubuntu 上安装完成 ssh 服务器后,接下来在 Windows 系统下使用 MobaXterm 进行连接,测试 ssh 服务器是否安装成功。 操作步骤如下:
运行 Xterm 软件,选择“Session”,如下图所示:
点击“SSH”并进行设置,如下图所示:
在该对话框中,选择“协议”为“SSH”, “主机名”为 ubuntu 的 IP 地址,用户名为当前用户名。端口号使用默认值 22。 设置完成后,点击"OK",出现如下命令行终端,表示已经连接上虚拟机的ubuntu系统。
通过这种方法,确定主机和开发板之间网络通讯正常后,即可以登录到开发板上。
Visual Studio Code(简称 VSCode)是微软出的一款免费的编辑器,有 Windows、 Linux 和 macOS 三个版本,是一款跨平台编辑器。 安装过程大家可以自行搜索,这里主要介绍用于C/C++程序开发的扩展包,安装步骤见下图:
常用的有如下插件需要安装:
C/C++。
C/C++ Snippets,即 C/C++重用代码块。
C/C++ Advanced Lint,即 C/C++静态检测 。
Code Runner,即代码运行。
Include AutoComplete,即自动头文件包含。
Rainbow Brackets,彩虹花括号,有助于阅读代码。
One Dark Pro, VSCode 的主题。
GBKtoUTF8,将 GBK 转换为 UTF8。
ARM,即支持 ARM 汇编语法高亮显示。
Chinese(Simplified),即中文环境。
vscode-icons, VSCode 图标插件,主要是资源管理器下各个文件夹的图标。
compareit,比较插件,可以用于比较两个文件的差异
DeviceTree,设备树语法插件。
Markdown Preview Enhanced, markdown 预览插件。
Maridown pdf,将.md 文件转换成其他格式。
Linux的命令有几百个,对于初学者来说,常用的并不多,并不需要全部掌握。在平时的学习和工作过程中,遇到了陌生的Linux命令,多查资料,日积月累,自然就记住了。下面为大家介绍Linux最基础的17个命令。
clear
ip addr
date
文件系统像一棵树,树干是/(根)目录,树枝是子目录,树枝后面还有树枝(子目录中还有子目录),目录的最后是文件。
目录和文件的路径分为绝对路径和相对路径,绝对路径是从根(/)算起,例如/usr/etc/readme.txt。相对路径是从当前工作目录算起,如果当前工作目录是/usr,etc/readme.txt等同于/usr/etc/readme.txt。此外,需要注意的是:一个圆点.表示当前工作目录;两个圆点…表示当前工作目录的上一级目录。
下面为大家简单介绍Linux系统目录结构,为了避免诸多使用者对 Linux 系统目录结构天马行空,Linux 基金会发布了 FHS 标准。多数 Linux 发行版系统都遵循这一标准。注:FHS(Filesystem Hierarchy Standard),文件系统层次化标准,该标准规定了 Linux 系统中所有一级目录以及部分二级目录(/usr 和 /var)的用途。发布此标准的主要目的就是为了让用户清楚地了解每个目录应该存放什么类型的文件。
FHS 认为,Linux 系统的根目录(/)最为重要,其原因有以下 2 点:
1. 所有目录都是由根目录衍生出来的;
2. 根目录与系统的开机、修复、还原密切相关;
因此,根目录必须包含开机软件、核心文件、开机所需程序、函数库、修复系统程序等文件,如下表所示。
usr(注意不是 user),全称为 Unix Software Resource,此目录用于存储系统软件资源。FHS 建议开发者,应把软件产品的数据合理的放置在 /usr 目录下的各子目录中,而不是为他们的产品创建单独的目录。
Linux 系统中,所有系统默认的软件都存储在 /usr 目录下,/usr 目录类似 Windows 系统中 C:\Windows\ + C:\Program files\ 两个目录的综合体。
FHS 建议,/usr 目录应具备下表所示的子目录。
/var 目录用于存储动态数据,例如缓存、日志文件、软件运行过程中产生的文件等。通常,此目录下建议包含如表 4 所示的这些子目录。
pwd
cd 目录名
示例:
cd /tmp
cd ..
cd
ls
是list的缩写,通过 ls
命令不仅可以查看目录和文件信息,还可以查看目录和文件的权限、大小、主人和组等信息。
选项 -l
列出目录和文件的详细信息。
示例:
ls
ls -l
正则表达式又称规则表达式、通配符,目录和文件名都支持正则表达式,正则表达式的规则比较多,在这里我们只需要掌握最常用的两种:星号 “*” 。
星号 “*” :匹配任意数量的字符。
例如:ls open*.zip
mkdir aaa
mkdir aaa/bbb -p
rm [-rf]
目录或文件
选项-r
可以删除目录,如果没有-r只能删除文件。
选项-f
表示强制删除,不需要确认。
rm aaa -r
rm -f ccc.c
mv 旧目录或文件名 新目录或文件名
mv book.c book1.c
mv book.c OPC/test3
mv book.c OPC/test3
cp [-r] 旧目录或文件名 新目录或文件名
注:-r 是递归的意思,英文 recursion
选项-r
可以复制目录,如果没有选项-r
只能复制文件。
示例:
cp book1.c book2.c
cp aaa bbb -r
cp book1.c aaa/book1.c
cp book1.c aaa/.
以上两个命令的效果相同。
cp -r aaa /tmp/aaa
cp -r aaa /tmp/.
以上两个命令的效果相同。
ping -c 包的个数 ip地址或域名
ping用于确定本地主机是否能与另一台主机成功交换数据包,判断网络是否通畅。
ping -c 5 127.0.0.1
ping -c 5 www.baidu.com.cn
可以看出百度的服务器是可以ping
通的。
ping -c 5 www.google.com
可以看出谷歌的服务器是ping
不通的。
显示文本文件的内容有三个命令:cat
、more
和tail
。
cat 文件名
cat命令一次显示整个文件的内容。
cat main.cpp
more 文件名
为了方便阅读,more命令分页显示文件的内容,按空格键显示下一页,按b键显上一页,按q键退出。
tail -f 文件名
tail -f
用于显示文本文件的最后几行,如果文件的内容有增加,就实时的刷新。对程序员来说,tail -f
极其重要,可以动态显示后台服务程序的日志,用于调试和跟踪程序的运行。
wc(word count)功能为统计指定的文件中字节数、字数、行数,并将统计结果输出
wc 文件名
grep "内容" 文件名
注意,如果内容中没有空格等特殊字符,可以不用双引号括起来。
示例:
grep signal main.cpp
find 目录名 -name 文件名
参数说明:
目录名:待搜索的目录,搜索文件的时候,除了这个目录名,还包括它的各级子目录。
文件名:待搜索的文件名匹配的规则。
示例:
从 OPC 目录开始搜索,把全部的 *.cpp 文件显示出来。
find OPC -name *.cpp
locate 文件名
示例:
搜索open62541.c文件
locate open62541.c
注意:第一次使用该命令,可能需要更新数据库,按照提示的命令执行一下就好了.
find多用于在某个目录下进行模糊搜索,而locate则是进行全盘准确定位。
用于改变linux文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。
举例:ls -l example
第一列共有10个位置,第一个字符指定了文件类型。在通常意义上,一个目录也是一个文件。如果第一个字符是横线,表示是一个非目录的文件。如果是d,表示是一个目录。从第二个字符开始到第十个共9个字符,3个字符一组,分别表示了3组用户对文件或者目录的权限。权限字符用横线代表空许可,r代表只读,w代表写,x代表可执行。
常用参数:
-c 当发生改变时,报告处理信息
-R 处理指定目录以及其子目录下所有文件
权限范围:
u :目录或者文件的当前的用户
g :目录或者文件的当前的群组
o :除了目录或者文件的当前用户或群组之外的用户或者群组
a :所有的用户及群组
权限代号:
r :读权限,用数字4表示
w :写权限,用数字2表示
x :执行权限,用数字1表示
- :删除权限,用数字0表示
s :特殊权限
示例:
chmod a-x example
chmod 751 example -c
chmod u+r,g+r,o+r -R text/ -c
df [-h] [-T]
选项-h
以方便阅读的方式显示信息:
df -h
选项-T
列出文件系统类型:
df -h -T
程序(操作系统命令和应用程序)的执行都需要运行环境,这个环境是由多个环境变量组成的。
系统环境变量:公共的,对全部的用户都生效。
用户环境变量:用户私有的、自定义的个性化设置,只对该用户生效。
永久环境变量:在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。
临时环境变量:使用时在Shell中临时定义,退出Shell后失效。
Linux环境变量也称之为Shell环境量变,以下划线和字母打头,由下划线、字母(区分大小写)和数字组成,习惯上使用大写字母,例如PATH、HOSTNAME、LANG等。
在Shell下,用env命令查看当前用户全部的环境变量。
上图只截取了部分环境变量,并非全部。
注:用env命令的时候,满屏显示了很多环境变量,不方便查看,可以用grep筛选。
env|grep 环境变量名
例如查看环境变量名中包含PATH的环境变量。
env|grep PATH
echo $环境变量名
例如:echo $LANG
可执行程序的搜索目录,可执行程序包括Linux系统命令和用户的应用程序,PATH变量的具体用法本文后面的章节中有详细的介绍。
Linux系统的语言、地区、字符集。
echo $LANG
服务器的主机名。
echo $HOSTNAME
用户当前使用的Shell解析器。
echo $SHELL
保存历史命令的数目。
当前登录用户的用户名。
echo $USER
当前登录用户的主目录。
echo $HOME
当前工作目录。
echo $PWD
C/C++语言动态链接库文件搜索的目录,它不是Linux缺省的环境变量,但对C/C++程序员来说非常重要,具体用法本文后面的章节中有详细的介绍。
export 变量名='值'
如果环境变量的值没有空格等特殊符号,可以不用单引号包含。
示例:
export PATH=$PATH:.
以上命令为当前shell的环境变量PATH添加.目录(是.)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
以上命令为当前shell的环境变量LD_LIBRARY_PATH添加.目录
采用export设置的环境变量,在退出Shell后就会失效,下次登录时需要重新设置。如果希望环境变量永久生效,需要在登录脚本文件中配置。
系统环境变量对全部的用户生效,设置系统环境变量有三种方法。
用户登录时执行/etc/profile文件中设置系统的环境变量。但是,Linux不建议在/etc/profile文件中设置系统环境变量。
/etc/profile在每次启动时会执行 /etc/profile.d下全部的脚本文件。/etc/profile.d比/etc/profile好维护,不想要什么变量直接删除 /etc/profile.d下对应的 shell 脚本即可。
/etc/profile.d目录下有很多脚本文件,例如:
ls /etc/profile.d
该文件配置的环境变量将会影响全部用户使用的bash shell。但是,Linux也不建议在/etc/bashrc文件中设置系统环境变量。
用户环境变量只对当前用户生效,设置用户环境变量也有多种方法。
在用户的主目录,有几个特别的文件,用ls
是看不见的,用ls .bash*
可以看见。
当用户登录时执行,每个用户都可以使用该文件来配置专属于自己的环境变量。
当用户登录时以及每次打开新的Shell时该文件都将被读取,不推荐在里面配置用户专用的环境变量,因为每开一个Shell,该文件都会被读取一次,效率肯定受影响。
当每次退出系统(退出bash shell)时执行该文件。
保存了当前用户使用过的历史命令。
环境变量脚本文件的执行顺序如下:
/etc/profile->/etc/profile.d->/etc/bashrc->用户的.bash_profile->用户的.bashrc
同名的环境变量,如果在多个脚本中有配置,以最后执行的脚本中的配置为准。
可执行程序的搜索目录,可执行程序包括Linux系统命令和用户的应用程序。如果可执行程序的目录不在PATH指定的目录中,执行时需要指定目录。
export PATH=目录1:目录2:目录3:…目录n:.
示例:
ls /bin/ls
可以查看到ls
命令位于/bin目录下
此时我们执行命令 export PATH=
将PATH变量清空,再执行ls
命令,系统会提示找不到ls
命令。
采用绝对路径就可以使用,/bin/ls
为环境变量PATH添加/bin目录后,ls
也可以执行了。
示例:
在当前目录下执行 example 命令,提示无法执行。
将圆点.添加到环境变量PATH之后,便可以执行了。
export PATH=$PATH:.
C/C++语言动态链接库文件搜索的目录,它不是Linux缺省的环境变量,但对C/C++程序员来说非常重要。
LD_LIBRARY_PATH环境变量存放的也是目录列表,目录之间用冒号:分隔,最后的圆点.表示当前目录,与PATH的格式相同。
export LD_LIBRARY_PATH=目录1:目录2:目录3:......目录n:.
这个环境变量我们会在下次课讲解Linux静态库与动态库时详细介绍。
1)在Shell下,用export设置的环境变量对当前Shell立即生效,Shell退出后失效。
2)在脚本文件中设置的环境变量不会立即生效,退出Shell后重新登录时才生效,或者用source命令让它立即生效,例如:
source /etc/profile
虽然设置环境变量的方法有多种,但是建议大家系统环境变量在/etc/profile.d目录中配置,用户环境变量在用户的.bash_profile中配置,不建议在其它脚本文件中配置环境变量,会增加系统运维的麻烦,容易出错。
“linux操作系统的常用命令及环境变量是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。