Linux必备基础

前言

本文主要来自正点原子、野火Linux教程及本人理解,若有侵权请及时联系本人删除。如果本篇对您有帮助的话希望能一键三连,非常感谢。

正文

关于Linux操作系统

1991 Linus Linux 0.0.1版,代码为8K行。现在最新版本为5.12.4。Linux加入了GNU,整体基于GPL协议,允许开源、分享传播、修改。
内核下载的地址
https://www.kernel.org/

组成

kernel内核
核心程序,用于管理硬件设备、系统的线程进程、内存、交换空间、文件系统、精灵进程(守护进程)等。主要实现系统程序与硬件之间的控制管理功能。
Shell
包裹在内核之外的人机交互界面,用于用户和内核之间打交道的功能,类似于windows的cmd。通过Shell将输入的命令与内核通讯,好让内核可以控制硬件开正确无误的操作工作。Shell有着不同的分类,比如Bourne shell(sh),Korn shell(ksh)、C shell (csh)、Bourne-again shell(bash)、tcsh。其中最常用的有csh和bash。
user application
Linux根据程序的运行,分为用户空间和内核空间,简单的理解就是,普通的应用程序运行在用户空间,一些涉及到系统核心资源的操作的程序运行在内核空间,比如TCP/IP协议栈、驱动、进程调度、内存管理、文件系统等都运行于Linux内核空间,
其实一些应用程序当需要访问系统资源的时候,必须通过系统调用,通过一些内核函数将系统资源由内核空间拷贝到用户空间。
Files System
文件系统,管理文件和目录。

常用Shell命令

1、目录信息查看命令ls,ls -a 显示目录所有文件及文件夹,包括隐藏文件,比如以.开头的
2、目录切换命令cd
3、当前路径显示命令pwd
4、系统信息查看命令uname
5、清理屏幕命令clear
6、显示文件内容命令cat
7、切换用户身份命令sudo
8、文件拷贝命令cp
9、切换用户命令su
10、移动文件命令mv
11、创建文件夹命令mkdir
12、创建文件命令touch
13、删除命令rm
14、目录删除命令rmdir
15、显示网络配置信息命令ifconfig
16、重启命令reboot
17、关机命令poweroff
18、系统帮助命令man
19、数据同步写入磁盘命令sync
20、查找文件命令find
21、查找内容命令grep
22、文件夹大小查看命令du
23、磁盘空间检查命令df
24、使用gedit打开某个文件命令gedit
25、当前的系统进程查看命令ps
26、进程实时运行状态查看命令top
27、文件类型查看命令file

命令分类

查询命令
man
目录操作类
cd;pwd;mkdir;rmdir;mv
文本操作类
touch;cat;echo;wc;rm;ln;cp;tar;find;grep
用户管理类
useradd/adduser;usermod;userdel/deluser;passwd;groupadd/addgroup;groupdel/delgroup;su
操作权限类
sudo;chmod;chown;chgrp
磁盘管理类
df;du;mount:umount:
网络操作类
ifconfig;ping
控制终端类
clear
开关机命令
reboot;poweroff
小技巧:自动补全(tab)

绝对路径和相对路径

绝对路径:从根目录“/”算起的路径。
相对路径:相对于目前路径的文件名写法,比如./home/zzk。不是以“/”开头的就行。

“.”代表当前路径,也可以 用“./”表示
“…”代表上一层目录,也可以用“…/”表示

Ubuntu磁盘管理

一、Ubuntu磁盘文件

  • /dev/sd*文件,此类文件是磁盘设备文件,并不能直接访问磁盘,必须要将磁盘挂载到某一个目录下才可以访问。
  • /dev/sdb和/dev/sdb1是U盘的设备文件。
  • /dev/sdb表示U盘,/dev/sdb1表示U盘的第一个分区。

二、磁盘和目录的容量查询命令

  • df:列出文件系统的整体磁盘使用量。主要查看个文件系统的使用量,
  • du:评估文件系统的磁盘使用量,主要查看单个文件的大小。

三、磁盘挂载与卸载,分区和格式化、

  • 磁盘的挂载和卸载:mount和umount命令
  • 磁盘分区:fdisk命令
  • 磁盘格式化,磁盘分区创建好以后就可以格式化磁盘,使用命令mkfs。如:mkfs -t vfat /dev/sdx

Ubuntu压缩与解压缩

一、Linux下常用的压缩格式

  • Linux下常用的压缩扩展名有:.tar、.tar.bz2、.tar.gz。

二、Windows下7ZIP软件的安装

  • 因为Linux下很多文件是.bz2,.gz结尾的压缩文件,因此需要在windows下安装7ZIP软件。

三、gzip压缩工具

gzip工具负责压缩和解压缩.gz格式的压缩包。
    gzip xxx			//压缩
    gzip -d xxx.gz	//解压缩
gzip对文件夹进行压缩
	gzip -r xxx		//对文件夹进行压缩
	gzip -rd xxx.gz	//对文件夹进行解压缩
gzip虽然可以对文件夹进行压缩,但是并不能提供打包的服务,只是对文件夹中的所有文件进行了单独的压缩。

四、bzip2压缩工具

和gzip类似,只是bzip2工具负责压缩和解压缩.bz2格式的压缩包。
    bzip2 -z xxx			//压缩
    bzip2 -d xxx.gz	//解压缩

五、tar打包工具

tar工具参数:
    -f,使用归档文件或 ARCHIVE 设备
    -c:创建新归档,创建压缩文件
    -x:从图档中解出文件,解压缩
    -j:使用bzip2压缩格式。
    -z:使用gzip压缩格式
    -v:打印出命令执行过程。
tar工具提供打包服务,就是将多个文件打包,比如
    tar -vcf test.tar test	//将test打包成test.tar
    tar -vxf test.tar		//解包

上面的tar命令只提供了打包和解包的功能,tar在提供打包和解包的同时使用gzip/bzip2进行压缩,实现类似windwos下winRAR软件的命令。
1、对.tar.bz2进行压缩和解压缩
	tar -vxjf xxx.tar.bz2	解压缩
	tar -vcjf xxx.tar.bz2 xxx 压缩
2、对.tar.gz进行压缩和解压缩
	tar -vxzf	xxx.tar.gz		//解压缩
	tar -vczf xxx.tar.gz xxx 	//压缩

六、其他格式的压缩和解压缩

1.rar格式
需要先安装rar:sudo apt-get install rar
	rar x xxx.rar		//解压缩
	rar a xxx.rar xxx	//压缩
2.zip格式
zip格式压缩使用“zip“命令:
	zip -rv xxx.zip xxx	
zip格式解压缩使用“unzip”命令:
	unzip -v xxx.zip

Ubuntu用户与用户组

一、Linux用户
Linux是一个多用户操作系统,不同的用户拥有不同的权限。可以查看和操作不同的文件。 Ubuntu有三种用户:

  • 初次创建的用户(系统用户)。
  • 管理员(root用户)
  • 普通用户。

初次创建的用户权限比普通用户多,但是没有root用户多,初次创建的用户可以创建普通用户。Linux用户记录在/etc/passwd这个文件内。Linux用户密码记录在/etc/shadow这个文件内。每个用户都有一个ID,叫做UID。
二、Linux用户组
为了方便管理,将用户进行分组。这样就可以设置非本组人员不能访问某些文件。每个用户可以属于多个不同的组。

  • 用户:家里有你、弟弟、妹妹个人,每个人都有自己的房间,你们三个人都是用户,你们都不能随便的乱翻别人的房间。
  • 用户组:你们三个都是一个家庭的,也就是属于同一个用户组,你们三个可以共用厨房,书房等空间。

因此,用户和用户组的存在就是为了控制文件的访问权限的。每个用户组都有一个ID,叫做GID。用户组信息存储在/etc/group文件中。
三、创建用户和用户组
1、图形化界面创建
要使用图形化界面创建用户和用户组的话就需要安装gnome-system-tools这个工具:sudo apt-get install gnome-system-tools
2、命令创建用户和用户组

    添加用户:adduser命令,adduser 用户名
	用户查询:finger命令,finger 用户名
	修改用户密码:passwd命令,passwd 用户名
	删除用户:deluser命令,deluser 用户名
	
	添加用户组:addgroup命令,addgroup 用户组名
	显示组内用户名:groups命令,groups 用户组名
	删除用户组:delgroup命令,delgroup用户组名

四、三个核心文件

  • /etc/passwd:
    用户名:密码(x):UID:GID:用户信息说明栏:用户目录:Shell
    UID:
    ​ - 管理员(root):具有系统所有权限(0)
    ​ - 系统用户:管理系统运行服务(1~999)
    ​ - 普通用户:具有系统一部分权限(1000以上)
  • /etc/shadow:
    用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
  • /etc/group:
    组名:群组密码:GID(x):此群组支持的账号名称

Ubuntu文件权限

一、Ubuntu/Linux文件权限
文件权限是指不同的用户或用户组对某个文件拥有的权限,文件的权限分为三种:r:读;w:写;x:可执行。文件描述形式如下:

-rw-rw-r—就是文件权限,第一位表示文件类型,剩下的每三位表示一组权限。分别对应拥有者权限、拥有者所在组权限、其他用户权限。
在这里插入图片描述
a.c文件信息:

  • rw- rw- r–,a.c所属用户拥有读写权限无可执行权限。组内其他用户拥有读写权限无可执行权限,其他用户仅有可读权限。

二、Ubuntu/Linux文件权限修改
1、修改文件权限命令:chmod命令
2、修改文件所属用户:chown命令

Linux连接文件

一、Linux连接文件
Linux有两种连接文件:符号连接(软连接)和硬链接,符号链接类似Windows下的快捷方式。硬链接通过文件系统的inode连接来产生新文件名,而不是产生新文件。inode:记录文件属性,一个文件一个inode。inode相当于文件ID,查找文件的时候要先找到inode,然后才能读出文件的内容。
二、ln命令

ln命令用于创建连接文件:
ln [选项] 源文件 目标文件
选项:-s 创建符号链接(软连接)
	  -f 强制创建连接文件,如果目标存在,那么先删除掉目标文件,然后再建立连接文件。

三、硬连接
硬链接是多个文件都指向同一个inode,因为下面这些限制,硬链接其实不常用。硬链接知识点:

  • 具有相同inode的多个文件互为硬链接文件,创建硬链接相当于文件实体多了入口。
  • 对于硬链接文件,只有删除了源文件以及对应的所有硬连接文件,文件实体才会被删除。
  • 根据硬链接文件的特点,我们可以通过给文件创建硬连接的方式来防止文件误删除。
  • 不论修改源文件还是连接文件,另一个文件的数据都会被改变。
  • 硬连接不能跨文件系统。
  • 硬连接不能连接到目录。

四、符号连接(软连接)
符号连接类似Windows下的快捷方式,符号链接也叫做软连接,软连接要用的多。符号连接相当于创建了一个独立的文件,这个文件会让数据读取指向它连接的哪个文件的文件名。软连接的特点:

  • 可以连接到目录。
  • 可以跨文件系统。
  • 删除源文件以后,软连接文件也就“打不开了”。
  • 符号连接文件通过->来指示具体的连接文件。
  • 符号连接要使用绝对路径,否则连接出问题。

软件安装方法

各种Linux发行版安装软件

四个工具:
rpm、dpkg、yum、apt
在这里插入图片描述
共同点:
此四个命令都是用于在linux系统中管理软件,对软件进行安装、更新、卸载。
不同点:
1、用于离线安装软件的命令:
rpm、dpkg
两者不同:rpm用于Red HAT、CentOs、Suse、Federa,dpkg用于所有源自Debian的linux发行版,如Ubuntu、Knoppix等
2、用于线上安装软件的命令:
yum、apt
两者不同:yum用于Red HAT、CentOs,apt用于Ubuntu、Debian

  • yum配置文件:/etc/yum.conf,yum可以用于运作rpm包,支持tar包
  • apt配置文件:/etc/apt/sources.list,apt-get可以用于运作deb包,支持tar包

补充apt与apt-get命令的区别:
Ubuntu 16.04 发布时,一个引人注目的新特性便是apt 命令的引入。其实早在 2014 年,apt 命令就已经发布了第一个稳定版,只是直到 2016 年的 Ubuntu 16.04 系统发布时才开始引人关注。

随着 apt install package 命令的使用频率和普遍性逐步超过 apt-get install package,越来越多的其它 Linux 发行版也开始遵循 Ubuntu 的脚步,开始鼓励用户使用 apt 而不是 apt-get。

通过 apt 命令,用户可以在同一地方集中得到所有必要的工具,apt 的主要目的是提供一种以「让终端用户满意」的方式来处理 Linux 软件包的有效方式。

apt 具有更精减但足够的命令选项,而且参数选项的组织方式更为有效。除此之外,它默认启用的几个特性对最终用户也非常有帮助。例如,可以在使用 apt 命令安装或删除程序时看到进度条。apt 还会在更新存储库数据库时提示用户可升级的软件包个数。如果你使用 apt 的其它命令选项,也可以实现与使用 apt-get 时相同的操作。

虽然 apt 与 apt-get 有一些类似的命令选项,但它并不能完全向下兼容 apt-get 命令。也就是说,可以用 apt 替换部分 apt-get 系列命令,但不是全部。
在这里插入图片描述
当然,apt 还有一些自己的命令:
在这里插入图片描述
总结就是,apt 可以看作 apt-get 和 apt-cache 命令的子集, 可以为包管理提供必要的命令选项。apt-get 虽然没被弃用,但作为普通用户,还是应该首先使用 apt。
常见使用

yum命令用法:
    列出所有已安装包:yum list installed
    列出所有可安装的包:yum list
    安装软件包:yum install <package_name>
    查询软件包:yum search <keyword>
    删除软件包:yum remove <package_name>
    更新软件包:yum update <package_name>
rpm命令用法:
    安装:rpm -ivh *.rpm
    卸载:rpm -e packgename
    查看是否已经安装:rpm -q nginx 
    升级:rpm -Uvh xxx
    查询所有安装的包: rpm -qa
    查询某个包:rpm -qa | grep xxx        rpm -qi xxx
    查询软件的安装路径:rpm -ql xxx     rpm -qc xxx
    查询某个文件是那个rpm包产生:rpm -qf /etc/yum.conf     rpm -qpi xxx
    查看已安装的RMP包:rpm -qa|grep php 
apt命令用法:
    列出所有已安装包:apt list --installed
    安装软件包:sudo apt-get install package
    重新安装包 :sudo apt-get install package -- reinstall
    查询软件包:apt-cache search package 
    获取包的详细信息:apt-cache show package
    删除软件包:sudo apt-get remove package    sudo apt-get remove package -- purge(连同配置文件一起删除)
    更新软件包:sudo apt-get upgrade package
    清理无用的包:sudo apt-get clean && sudo apt-get autoclean
    查看该包被哪些包依赖:apt-cache rdepends package
dpkg命令用法:
    安装软件包:dpkg -i <package.deb>
    列出包的内容:dpkg -c <package.deb>
    查看包信息:dpkg -I <package.deb>
    移除安装的包:dpkg -r <package>
    完全清除包dpkg -P <package>
    列出 <package> 安装的所有文件清单:dpkg -L <package>
    显示已安装包:dpkg -s <package>
    重新配置已安装包dpkg-reconfigure <package>

Ubuntu安装软件

1、通过APP Store安装
使用apt工具安装软件,需要sudo,也就是root权限。
2、使用APT工具安装
使用apt包管理工具,apt可以自动下载,配置,安装。
3、deb软件包安装
使用dpkg命令安装deb软件包,命令如下:

sudo dpkg -i xxxx.deb

在windows下,我们安装的是.exe文件,在Ubuntu就有一个.deb。安装网易云音乐,
4、自己下载程序源码编译安装
Make
Make install
5、其他 安装方法
QT扩展名是.run

使用编辑器

gedit编译器

简单易懂,依赖图形界面,类似window上的编辑器

vi/vim编辑器

一、vi与vim的区别:

  • vim是vi的升级版本,兼容vi
  • vi按 u只能撤消上次命令,而在vim里可以无限制的撤消
  • vi只能运行于类unix系统中,而vim不仅可以运行于unix,windows ,mac等多操作平台
  • vim可以用不同的颜色来高亮代码
  • 可通过vimrc文件配置更加高级的功能

二、vim编辑器安装
Linux系统都会自带vi编辑器,但是vi编辑器太难用了!所以建议大家安装vim编辑器,安装命令:

sudo apt-get install vim

三、vim编辑器三种工作模式

  • 一般模式(默认模式)
  • 插入模式(编辑模式)
  • 命令行模式

模式切换
在这里插入图片描述
四、使用Vi/Vim
打开Vi/Vim

vi 文件名 
vim 文件名

进入/退出插入模式快捷键
在这里插入图片描述
一般模式快捷键
在这里插入图片描述
在这里插入图片描述
命令行模式快捷键
在这里插入图片描述
vim cheat sheet,一图包含了大部分常用的vim命令,建议保存
在这里插入图片描述

设置TAB键为4字节

VI 编辑器默认 TAB 键为 8 空格,我们改成 4 空格,用 vi 打开文件/etc/vim/vimrc,在此文件最后面输入如下代码:

set ts=4

添加完如下,修改完成以后保存并关闭文件
在这里插入图片描述

VIM 编辑器显示行号

VIM 编辑器默认是不显示行号的,不显示行号不利于代码查看,我们设置 VIM 编辑器显示行号,同样是通过在文件/etc/vim/vimrc 中添加代码来实现,在命令模式下输入或者在/etc/vim/vimrc 文件最后面加入下面一行代码:

set nu

添加完成以后的/etc/vim/vimrc 文件如图
在这里插入图片描述

shell脚本

初识shell脚本

一、什么是shell脚本
shell命令按一定语法组成的文件,shell脚本类似windows的批处理文件,shell脚本一般是Linux运维或者系统管理员要掌握的,作为嵌入式开发人员,只需要掌握shell脚本最基础的部分即可。
二、Shell脚本有什么用
批处理文件/整合命令

  • 软件启动
  • 性能监控
  • 日志分析

三、Shell命令的本质
Linux的命令可以分为内部命令(内置命令)和外部命令:内置命令在系统启动时就调入内存,是常驻内存的,所以执行效率高。而外部命令是系统的软件功能,用户需要时才从硬盘中读入内存。

通过type命令查看是内置命令还是外部命令
type cd
type pwd

在这里插入图片描述
输入并运行外部命令后,shell通过path环境变量找到命令的位置,即去这些目录下面找对应的应用程序,如果找到了,就创建一个进程,在这个进程里执行这条命令,没找到就报错
在这里插入图片描述
小实验:编译一个helloworld程序,将其拷贝到path环境变量目录中(/usr/bin/),这是hello应用程序变成了外部命令
在这里插入图片描述四、Shell脚本语言和C语言一样吗
C语言是编译型语言,shell脚本是解释型语言
五、常用的Shell解释器有哪些
通过/etc/shells命令查看
在这里插入图片描述
六、编写一个hello shell脚本
sudo vi hello.sh

#!/bin/bash  //指定所要使用的解释器,Linux中默认的就是bash解释器

echo "hello,world!"

修改执行权限sudo chmod 777 hello.sh,执行./hello.sh即可运行脚本
在这里插入图片描述
七、Shell启动方式

  • 当程序执行
  • 指定解释器运行
  • source命令和.
./hello.sh  //当做程序执行(shell子进程中执行)
/bin/bash hello.sh  //指定解释器运行(shell子进程中执行)
source hello.sh  //source命令执行(当前进程中执行)
. hello.sh  //.执行(当前进程中执行)

在这里插入图片描述

shell脚本语法

一、定义变量

  • variable=value 适用于变量中间没有空格

没有空格时正常打印没有空格变量
在这里插入图片描述
有空格时报错,无法打印有空格变量
在这里插入图片描述
使用单引号正常打印有空格变量
在这里插入图片描述
使用双引号正常打印有空格变量
在这里插入图片描述

  • variable=‘value’ 使用单引号就代表不需要对单引号里的变量进行解引用

使用单引号打印时不会对变量var的值进行解引用
在这里插入图片描述

  • variable=“value” 使用双引号就代表需要对双引号里的变量进行解引用

使用双引号打印时会对变量var的值进行解引用
在这里插入图片描述
test.sh脚本

#!/bin/bash

var="1234 567"
var1='${var}aa'
echo "$var1"

二、使用变量

  • $variable

使用$对变量进行引用的时候,不会自动识别变量var1,会把var1bbb一整串当成一个变量,因为没有对变量var1bbb进行定义,所以输出空符
在这里插入图片描述

  • ${variable}

使用$对变量进行引用的时候,会自动识别变量var1,并且因为变量使用双引号,将var1解引用为 ${var}aa,而 ${var}aa变量使用单引号,则无需再进一步解引用,故输出 ${var}aabbb
在这里插入图片描述
更换单引号为双引号后,即可输出1234 567aabbb
在这里插入图片描述
test.sh脚本

#!/bin/bash

var="1234 567"
var1='${var}aa'
echo "${var1}bbb"

三、将命令的结果赋值给变量

  • variable=`command`

注意这里反引号,ESC下面的键,不是单引号
在这里插入图片描述

  • variable=$(command)

这里注意是( ),不是{ }
在这里插入图片描述
test.sh脚本

#!/bin/bash

var="1234 567"
var1=$(pwd)
echo "${var1}"

四、删除变量

  • unset

在这里插入图片描述
test.sh脚本

#!/bin/bash

var="1234 567"
var1=$(pwd)
unset var
echo "${var}"

五、特殊变量
在这里插入图片描述
$0 $n(n≥1) $# $*
在这里插入图片描述
$?
在这里插入图片描述

$$
在这里插入图片描述
六、 字符串拼接
并排放
在这里插入图片描述
七、读取从键盘输入的数据
read
在这里插入图片描述
test.sh脚本

#!/bin/bash
read -p "input a:" a
read -p "input b:" b
#var="1234 567"
#var1=$(pwd)aaa
echo "${a}"
echo "${b}"

八、退出当前进程
exit
九、对整数进行数学运算
(())
在这里插入图片描述
test.sh脚本

#!/bin/bash

read -p "input a:" a
read -p "input b:" b
var=$((a+b))
echo "${var}"

十、逻辑与/或

command1 && command2
只有command1执行成功了才会执行command2
command1 || command2
只有command1执行失败了才会执行command2
十一、检测某个条件是否成立
test expression和[ expression ]
在这里插入图片描述
在这里插入图片描述
test.sh脚本

#!/bin/bash

read -p "input a:" a
read -p "input b:" b

test $a -eq $b && echo "a=b"

在这里插入图片描述

test.sh脚本

#!/bin/bash

read -p "input a:" a
read -p "input b:" b
var=$((a+b))
echo "${var}"

[ ]与参数之间要有空格
在这里插入图片描述
test.sh脚本

#!/bin/bash

read -p "input a:" a
read -p "input b:" b

[ $a -eq $b ] || echo "a!=b"

十二、管道
command1 | command2
十三、if语句

if  condition
then
​    statement(s)
fi

在这里插入图片描述
test.sh脚本

#!/bin/bash

read -p "input a:" a
read -p "input b:" b

if [ $a -eq $b ]
then
	echo "a!=b"
fi

十四、if else 语句

if  condition
then
statement1
else
statement2
fi

十五、if elif else 语句

if  condition1
then
statement1
elif condition2
then
​    statement2

……
else
statementn
fi

十六、case in语句

case expression in
​    pattern1)
​        statement1
​        ;;
​    pattern2)
​        statement2
​        ;;
​    pattern3)
​        statement3
​        ;;
​    ……
​    *)
​        statementn
esac

十七、for in 循环

for variable in value_list
do
​    statements
done

value_list

  • 直接给出具体的值
  • 给出一个取值范围
  • 使用命令的执行结果
  • 使用 Shell 通配符
  • 使用特殊变量

十八、while 循环

while condition
do
​    statements
done

在这里插入图片描述
test.sh脚本

#!/bin/bash
#read -p "input a:" a
#read -p "input b:" b
n=0
while ((n<10))
do
	echo "${n}"
        n=$((n+1))
done

十九、函数

function name() {
​    statements
​    [return value]
}

在这里插入图片描述
test.sh脚本

#!/bin/bash
#read -p "input a:" a
#read -p "input b:" b

function my_name(){
	echo "XY"
}
my_name

Linux环境变量

Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量。所以管理环境变量的文件也分为系统级和用户级的

系统级

(1)/etc/environment: 是系统在登录时读取的第一个文件,用于为所有进程设置环境变量。系统使用此文件时并不是执行此文件中的命令,而是根据KEY=VALUE模式的代码,对KEY赋值以VALUE,因此文件中如果要定义PATH环境变量,只需加入一行形如PATH=$PATH:/xxx/bin的代码即可。
(2)/etc/profile:是系统登录时执行的第二个文件,可以用于设定针对全系统所有用户的环境变量。该文件一般是调用/etc/bash.bashrc文件。
/etc/bash.bashrc:系统级的bashrc文件,为每一个运行bash shell的用户执行此文件。此文件会在用户每次打开shell时执行一次。

注意:/etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。 这两个文件修改后一般都要重启系统才能生效。

用户级(这些文件处于家目录下)

(1)~/.profile: 是对应当前登录用户的profile文件,用于定制当前用户的个人工作环境。
每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。这里是推荐放置个人设置的地方
(2)~/.bashrc: 是对应当前登录用户的bash初始化文件,当用户每次打开shell时,系统都会执行此文件一次。平时设置这个文件就可以了。

那么根据以上描述,这几个文件的执行先后顺序应当是:
/etc/enviroment –>/etc/profile –>~/.profile –>/etc/bash.bashrc–> ~/.bashrc

配置环境变量

1、在linux下设定环境变量时,如果只是临时用一下,可以直接在shell下用set或export命令设定环境变量。只能在当前shell脚本下可用.,切换到另一个终端就会失效。

#终端输入:
export PYTHONPATH=/home/yanting/learning/ssd-caffe/python  #PYTHONPATH设置为该路径

#终端查看一个特定环境变量包含的内容,比如PYTHONPATH
echo $PYTHONPATH

2、如果希望此环境变量每次开机或打开shell时自动设定而无须每次都手动设定,那么需要将export命令写入以上的系统文件中。例如:
(1)打开当前用户环境变量:
终端输入:sudo gedit ~/.bashrc,输入用户密码,则会打开.bashrc文件,
在其末尾添加:

export PYTHONPATH=/home/yanting/learning/caffe/python:$PYTHONPATH  
# path采用:来分隔,冒号左右不需要空格.
# :$PYTHONPATH在后面新添加的path优先搜索,$PYTHONPATH:在前面说明新添加的path后面搜索,不加代表新路径设置为PYTHONPATH路径。

其中/home/yanting/learning/caffe/python为自己需要设置的环境变量路径。

在终端执行:source ~/.bashrc ,使其立即生效,或者重启电脑即可。

(2)在终端使用 sudo gedit /etc/profile 打开环境变量的文件,然后将自己的环境变量加入到文件之后,用export 执行。在终端里面使用source /etc/profile 来更新环境变量

3、采用export添加新的路径到环境变量PATH中。

#比如添加搜索路径/home/cc/path1和/home/cc/path2 路径到PATH中,采用:来分隔,冒号左右不需要空格
export PATH=$PATH:/home/cc/path1:/home/cc/path2

#若需要将路径放在优先搜索位置,将$PATH放在后面
export PATH=/home/cc/path1:/home/cc/pck:$PATH

全局变量VS环境变量

直接定义
export

执行/bin/bash后,bash程序就会在shell里面创建一个shell子进程,此时打印变量abc值为空,说明shell子进程不能访问shell进程创建的变量,退出子进程后又能打印出来
在这里插入图片描述
如果想让全局变量被子进程访问,需要使用export命令,但是还是不能被其他进程访问到
在这里插入图片描述
此时就需要通过shell配置文件
Shell 配置文件
与 Bash Shell 有关的配置文件主要有

  1. /etc/profile
  2. ~/.bash_profile
  3. ~/.bash_login
  4. ~/.profile
  5. ~/.bashrc
  6. /etc/bashrc
  7. /etc/bash.bashrc
  8. /etc/profile.d/*.sh

Shell 执行顺序
/etc/profiles-> ~/.profile ( ~/.bash_profile 、 ~/.bash_login)

修改配置文件

  • 全部用户、全部进程共享:/etc/bash.bashrc
  • 一个用户、全部进程共享:~/.bashrc

shell启动方式对变量的影响

  • shell子进程中执行:/bin/bash和./
  • 当前进程中执行:source和.

内核模块

解决linux内核可扩展性和可维护性相对较差的缺陷

现代内核派系

宏内核:关键功能和服务功能均在内核空间提供(代表:Linux)

  • 运行效率高
  • 扩展性较差

微内核:内核空间只提供关键功能,服务功能在用户空间提供(代表:Windows)

  • 运行效率较低
  • 安全性、扩展性较高

在这里插入图片描述

内核模块加载/卸载

内核模块加载

  • insmod
    用于加载指定的.ko模块,不能解决模块的依赖问题
  • modprobe(推荐使用
    比insmod更智能

内核模块卸载

  • rmmod(推荐使用
    卸载指定模块
  • modprobe -r
    卸载指定模块及未被其他模块所使用的依赖模块

一般先输入depmod命令用于分析可加载模块的相依性,供modprobe命令在加载内核模块时使用。

内核模块入口/出口

  • module_init():加载模块式该函数自动执行,进行初始化操作
  • module_exit():卸载模块时函数自动执行,进行清理操作

内核模块信息声明

  • MODULE_LICENSE():表示模块代码接受的软件许可协议,Linux内核遵循GPL V2开源协议,内核模块与linux内核保持一致即可。
  • MODULE_AUTHOR():描述模块的作者信息
  • MODULE_DESCRIPTION():对模块的简单介绍
  • MODULE_ALIAS():给模块设置一个别名
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只嵌入式爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值