Linux应用程序相关环境变量的设置

Linux应用程序相关环境变量的设置
Linux应用程序相关环境变量的设置

Linux应用程序相关环境变量的设置

一、什么环境变量(linux下)

环境变量是一个具有特定名字的对象,它包含了一个或者多个应用程序的运行环境信息。Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。用户可以对自己的应用程序运行环境进行定制,其方法就是修改相应的系统环境变量。通过环境变量的设置,可以很容易的修改一个牵涉到一个或多个应用程序的运行环境信息。

二、常用的应用程序相关环境变量

通常linux下,如果一个应用程序的安装路径不为/usr、/usr/local等系统默认的安装路径,则运行该应用程序时至少要指定环境变量PATH及LD_LIBRARY_PATH,来分别指定该应用程序命令的查找路径和共享库(动态链接库)的查找路径路径。(这两个用环境变量设置的路径通常在在默认路径之前查找)

除了常用的应用程序相关变量PATH及LD_LIBRARY_PATH,有些应用程序运行还需要一些特殊的环境变量。如:Qte4需要环境变量QTEDIR;Java 需要环境变量JAVA_HOME和CLASSPATH 等。总之,在应用程序运行是必须保证其要求的环境变量已经设置好。

三、设置环境变量

3.1、用命令export设置环境变量

linux提供了一个专门的命令:export来设置环境变量。其使用方式如下:语法:export [-fnp][变量名称]=[变量设置值]

说明:在shell中执行程序时,shell会提供一组环境变量。export可一次新增,修改或删除多个环境变量,供后续执行的程序使用。但export的效力仅及于该此登录操作,当当前shell关闭后export设置的环境变量也失去了效力。

参数:

-f 代表[变量名称]中为函数名称。

-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。

-p 列出所有的shell赋予程序的环境变量。

示例:用export设置LD_LIBRARY_PATH 。

#export LD_LIBRARY_PATH = /opt/qte--x86/lib: /opt/qte--x86/lib:$LD_LIBRARY_PATH

#export PATH = /opt/qte--x86/bin: /opt/qte--x86/bin:$ PATH LD_LIBRARY_PATH、PATH环境变量可以有多个取值(路径),各取值之间用冒号隔开。上述命令中之说以加上:$LD_LIBRARY_PATH、:$PATH是保证此次LD_LIBRARY_PATH、PATH环境变量的设置不会覆盖以前的取值,这也是在设置可有多个取值环境变量是必须注意的问题。

3.2、修改相关环境定义文件来设置环境变量

上面提到过:export的效力仅及于当前shell登陆,当当前shell关闭后

export设置的环境变量也失去了效力。也就是说每次登陆shell时,都要用export设置相关环境变量。这显然是很麻烦的是,linux提供了更好的解决办法——环境定义文件。在环境定义文件中设置的环境变量的有效性不再限于当前shell,即使系统关机它们也保持有效。

Linux下,常用的环境定义文件有:/etc/environment、/etc/profile、~/.bashrc、/etc/ld.so.conf 。

各文件介绍如下:

/etc/environment:用于设置系统默认的PATH环境变量,如/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games ,用户也可以再行在里面添加PATH环境变量,设置非/usr安装路径应用程序的PATH环境变量。Ubuntn下,在该文件中不宜设置LD_LIBRARY_PATH (LD_LIBRARY_PATH not loading from .profile nor /etc/environment )。

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集shell的设置。推荐在/etc/profile.d目录下建立shell文件设置LD_LIBRARY_PATH及其他环境变量。

~/.bashrc:该文件包含专用于当前用户的bash shell的环境信息,当登录时以及每次打开新的shell时,该文件被读取。该文件是个sh脚本文件,可在该文件中设置各种用户应用程序需需要的环境变量。

/etc/ld.so.conf:该文件保存非标准共享库路径,并从/etc/ld.so.conf.d/目录

下的文件中搜集共享库的非标准路径。推荐用户在/etc/ld.so.conf.d里创建一个文件,并把非标准共享库路径加加到这个文件里。添加完之后要调用一下ldconfig,重新生成/etc/ld.so.cache不然这个添加的路径会找不到。这是替代指定LD_LIBRARY_PATH环境变量一个很好的方法。

以下是摘自网上的资料,很有参考价值:

/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。

例如:编辑/etc/profile文件,添加CLASSPATH变量

# vi /etc/profile

export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。

2.2 在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】

用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。

例如:编辑guok用户目录(/home/guok)下的.bash_profile

$ vi /home/guok/.bash.profile

添加如下内容:

export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

注:修改文件后要想马上生效还要运行$ source

/home/guok/.bash_profile不然只能在下次重进此用户时生效。

2.3 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】

在shell的命令行下直接使用[export 变量名=变量值] 定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。

3.环境变量的查看

3.1 使用echo命令查看单个环境变量。例如:

echo $PATH

3.2 使用env查看所有环境变量。例如:

env

3.3 使用set查看所有本地定义的环境变量。

unset可以删除指定的环境变量。

4.常用的环境变量

PATH 决定了shell将到哪些目录中寻找命令或程序

HOME 当前用户主目录

HISTSIZE 历史记录数

LOGNAME 当前用户的登录名

HOSTNAME 指主机的名称

SHELL 当前用户Shell类型

LANGUGE 语言相关的环境变量,多语言可以修改此环境变量MAIL 当前用户的邮件存放目录

PS1 基本提示符,对于root用户是#,对于普通用户是$

嵌入式Linux应用程序开发报告

湖南工业大学 课程设计 资料袋 计算机与通信学院学院(系、部)2015~ 2016 学年第一学期 课程名称嵌入式Linux应用程序开发指导教师叶伟琼职称副教授 学生姓名皓月叶舞专业班级通信工程12XX 学号124082004XX 题目AD驱动 成绩起止日期2015 年12 月14 日~2015年12月20 日 目录清单 序号材料名称资料数量备注 1 课程设计任务书 1 2 课程设计说明书 1 3 课程设计图纸10 张4 5 6

湖南工业大学 课程设计任务书 2015 —2016学年第1 学期 计算机与通信学院通信工程专业12XX 班 课程名称:嵌入式Linux应用程序开发 设计题目: AD驱动 完成期限:自2015 年12 月14 日至2015 年12 月20 日共 1 周 内容及任务一、设计的主要技术参数 数模转换、数模编程 二、设计任务(内容) 1、完成相关编程模拟量输入采集和转换 2、将结果显示 3、测试并运行,改变模拟量输入 4、验证 5、完成课程设计说明书 三、设计工作量 1周完成 进度安排 起止日期工作内容 12月14日分组、任务分配、课题理解 12月15日-12月17日功能分析、程序设计 12月18日-12月19日实验验证和测试 12月20 日总结、书写实验报告 参考资料[1] 王实甫. 嵌入式Linux系统设计与实例开发. 吉林大学出版社,2004年 [2] 田丰兴. 嵌入式控制系统. 北京航空航天大学出版社,2002年 指导教师(签字):年月日系(教研室)主任(签字):年月日

湖南工业大学 嵌入式Linux应用程序设计 课程设计说明书 AD驱动 起止日期: 2015年 12月14日至 2015年 12月 20 日 学生姓名皓月叶舞 班级通信1204班 学号124082004XX 成绩 指导教师(签字) 计算机与通信学院 2015年 12月20日

ARM的嵌入式Linux应用程序开发设计

ARM的嵌入式Linux应用程序开发设计 嵌入式系统已经渗透到人们工作、生活中的各个领域,嵌入式处理器已占分散处理器市场份额的94%。而嵌入式Linux系统也蓬勃发展,不仅继承了Linux 源码开放、内核稳定高效、软件丰富等优势,还具备支持广泛处理器结构和硬件平台、占有空间小、成本低廉、结构紧凑等特点。1ARM处理器及开发板在嵌入式领域,ARM已取得了极大的成功,造就了IP核商业化、市场化的神话。据统计,全球有103家巨型IT公司在采用ARM技术,20家最大的半导体,一 嵌入式系统已经渗透到人们工作、生活中的各个领域,嵌入式处理器已占分散处理器市场份额的94%。而嵌入式Linux系统也蓬勃发展,不仅继承了Linux源码开放、内核稳定高效、软件丰富等优势,还具备支持广泛处理器结构和硬件平台、占有空间小、成本低廉、结构紧凑等特点。 1 ARM处理器及开发板 在嵌入式领域,ARM已取得了极大的成功,造就了IP核商业化、市场化的神话。据统计,全球有103家巨型IT公司在采用ARM技术,20家最大的半导体,一商中有19家是ARM的用户。ARM系列芯片已经被广泛的应用于移动电活、手持式计算机以及各种各样的嵌入式应用领域,成为世界上销量最大的32位微处理器。ARM已成为业界实际的RISC芯片标准。 ARM系列处理器根据各自特点应用于不同领域。从应用的角度上ARM芯片选择的一般原则:MMU;处理器速度;内置存储器容量;USB接口;GPIO数量;中断控制器;IIS(integrate interface ofsound)音频接口;nWAIT信号; RTC(real timeclock);LCD控制器;PWM输出等各项指标。 本文使用的是ARM9,其性能远远高过ARM7。开发板使用的是广州斯道信息技术有限公司的开发板,中央处理器是三星公司的S3C2410。ARM9具有以下特点:5级流水线;采用哈佛结构;高速缓存和写缓存的引入;支持MMU。 2 嵌入式Linux系统 嵌入式操作系统是嵌入式应用软件的基础和开发平台,它的出现解决了嵌入式软件开发标准化的难题。嵌入式系统具有操作系统的最基本的功能。目前主流的嵌入式系统有以下儿种:Linux、VxWorks、QNX、Windows CE、Palm OS。 嵌入式Linux操作系统具有一些独特的优势:层次结构及内核完全开放;强大的网络支持功能;具备一整套工具链;广泛的硬件支持特性。 嵌入式Linux系统有很多种。本文使用的是Red Hat9操作系统。 在安装有Windows和Linux双系统的PC上,系统会以Linux的GRUB作为引导装入器来选择启动二者。此时若直接删除Linux分区,会导致系统无法启动

Linux设备驱动程序举例

Linux设备驱动程序设计实例2007-03-03 23:09 Linux系统中,设备驱动程序是操作系统内核的重要组成部分,在与硬件设备之间 建立了标准的抽象接口。通过这个接口,用户可以像处理普通文件一样,对硬件设 备进行打开(open)、关闭(close)、读写(read/write)等操作。通过分析和设计设 备驱动程序,可以深入理解Linux系统和进行系统开发。本文通过一个简单的例子 来说明设备驱动程序的设计。 1、程序清单 //MyDev.c 2000年2月7日编写 #ifndef __KERNEL__ #define __KERNEL__//按内核模块编译 #endif #ifndef MODULE #define MODULE//设备驱动程序模块编译 #endif #define DEVICE_NAME "MyDev" #define OPENSPK 1 #define CLOSESPK 2 //必要的头文件 #include //同kernel.h,最基本的内核模块头文件 #include //同module.h,最基本的内核模块头文件 #include //这里包含了进行正确性检查的宏 #include //文件系统所必需的头文件 #include //这里包含了内核空间与用户空间进行数据交换时的函数宏 #include //I/O访问 int my_major=0; //主设备号 static int Device_Open=0; static char Message[]="This is from device driver"; char *Message_Ptr; int my_open(struct inode *inode, struct file *file) {//每当应用程序用open打开设备时,此函数被调用 printk ("\ndevice_open(%p,%p)\n", inode, file); if (Device_Open) return -EBUSY;//同时只能由一个应用程序打开 Device_Open++; MOD_INC_USE_COUNT;//设备打开期间禁止卸载 return 0; } static void my_release(struct inode *inode, struct file *file)

一个简单的演示用的Linux字符设备驱动程序.

实现如下的功能: --字符设备驱动程序的结构及驱动程序需要实现的系统调用 --可以使用cat命令或者自编的readtest命令读出"设备"里的内容 --以8139网卡为例,演示了I/O端口和I/O内存的使用 本文中的大部分内容在Linux Device Driver这本书中都可以找到, 这本书是Linux驱动开发者的唯一圣经。 ================================================== ===== 先来看看整个驱动程序的入口,是char8139_init(这个函数 如果不指定MODULE_LICENSE("GPL", 在模块插入内核的 时候会出错,因为将非"GPL"的模块插入内核就沾污了内核的 "GPL"属性。 module_init(char8139_init; module_exit(char8139_exit; MODULE_LICENSE("GPL"; MODULE_AUTHOR("ypixunil"; MODULE_DESCRIPTION("Wierd char device driver for Realtek 8139 NIC"; 接着往下看char8139_init( static int __init char8139_init(void {

int result; PDBG("hello. init.\n"; /* register our char device */ result=register_chrdev(char8139_major, "char8139", &char8139_fops; if(result<0 { PDBG("Cannot allocate major device number!\n"; return result; } /* register_chrdev( will assign a major device number and return if it called * with "major" parameter set to 0 */ if(char8139_major == 0 char8139_major=result; /* allocate some kernel memory we need */ buffer=(unsigned char*(kmalloc(CHAR8139_BUFFER_SIZE, GFP_KERNEL; if(!buffer { PDBG("Cannot allocate memory!\n"; result= -ENOMEM;

linux环境变量修改

redhat和ubuntu中修改环境变量 2010-03-06 23:43 有些命令的路径没有在PATH环境变量中,可以用echo $PATH命令查询得知,添加路径到PATH环境变量的方法如下: (如添加/sbin到PATH环境变量中) (1)如果只想在本次开机过程中临时性的添加修改,下次开机就无效的话,可以: 输入export PATH=$PATH:/sbin (2)如果只给当前用户永久添加,则: 在~/.bash_profile中的靠近末尾有类似这样的一行 PATH=$PATH:$HOME/bin后添加:/sbin,就变成 PATH=$PATH:$HOME/bin:/sbin 文件修改并保持完以后,运行source ~/.bash_profile命令即可使修改操作立即生效 (3)如果给系统中所有的用户都永久添加,则: 在/etc/profile文件中添加pathmunge :/sbin 如:/etc/profile文件打开后有如下代码 .....................

16 # Path manipulation 17 if [ `id -u` = 0 ]; then 18 pathmunge /sbin 19 pathmunge /usr/sbin 20 pathmunge /usr/local/sbin 21 fi ........................ 你将之改成: ........................ 16 # Path manipulation 17 if [ `id -u` = 0 ]; then 18 pathmunge /sbin 19 pathmunge /usr/sbin 20 pathmunge /usr/local/sbin 21 pathmunge /usr/local/arm/bin 22 fi ....................... 表示将/usr/local/arm/bin添加进环境变量 文件修改并保持完以后,运行source etc/profile命令即可使修改操

嵌入式Linux应用软件开发流程

从软件工程的角度来说,嵌入式应用软件也有一定的生命周期,如要进行需求分析、系统设计、代码编写、调试和维护等工作,软件工程的许多理论对它也是适用的。 但和其他通用软件相比,它的开发有许多独特之处: ·在需求分析时,必须考虑硬件性能的影响,具体功能必须考虑由何种硬件实现。 ·在系统设计阶段,重点考虑的是任务的划分及其接口,而不是模块的划分。模块划分则放在了任务的设计阶段。 ·在调试时采用交叉调试方式。 ·软件调试完毕固化到嵌入式系统中后,它的后期维护工作较少。 下面主要介绍分析和设计阶段的步骤与原则: 1、需求分析 对需求加以分析产生需求说明,需求说明过程给出系统功能需求,它包括:·系统所有实现的功能 ·系统的输入、输出 ·系统的外部接口需求(如用户界面) ·它的性能以及诸如文件/数据库安全等其他要求 在实时系统中,常用状态变迁图来描述系统。在设计状态图时,应对系统运行过程进行详细考虑,尽量在状态图中列出所有系统状态,包括许多用户无需知道的内部状态,对许多异常也应有相应处理。 此外,应清楚地说明人机接口,即操作员与系统间地相互作用。对于比较复杂地系统,形成一本操作手册是必要的,为用户提供使用该系统的操作步骤。为使系统说明更清楚,可以将状态变迁图与操作手册脚本结合起来。

在对需求进行分析,了解系统所要实现的功能的基础上,系统开发选用何种硬件、软件平台就可以确定了。 对于硬件平台,要考虑的是微处理器的处理速度、内存空间的大小、外部扩展设备是否满足功能要求等。如微处理器对外部事件的响应速度是否满足系统的实时性要求,它的稳定性如何,内存空间是否满足操作系统及应用软件的运行要求,对于要求网络功能的系统,是否扩展有以太网接口等。 对于软件平台而言,操作系统是否支持实时性及支持的程度、对多任务的管理能力是否支持前面选中的微处理器、网络功能是否满足系统要求以及开发环境是否完善等都是必须考虑的。 当然,不管选用何种软硬件平台,成本因素都是要考虑的,嵌入式Linux 正是在这方面具有突出的优势。 2、任务和模块划分 在进行需求分析和明确系统功能后,就可以对系统进行任务划分。任务是代码运行的一个映象,是无限循环的一段代码。从系统的角度来看,任务是嵌入式系统中竞争系统资源的最小运行单元,任务可以使用或等待CPU、I/O设备和内存空间等系统资源。 在设计一个较为复杂的多任务应用系统时,进行合理的任务划分对系统的运行效率、实时性和吞吐量影响都极大。任务分解过细会不断地在各任务之间切换,而任务之间的通信量也会很大,这样将会大大地增加系统的开销,影响系统的效率。而任务分解过粗、不够彻底又会造成原本可以并行的操作只能按顺序串行执行,从而影响系统的吞吐量。为了达到系统效率和吞吐量之间的平衡折中,在划分任务时应在数据流图的基础上,遵循下列步骤和原则:

linux下jdk安装及环境变量的配置

1.先准备好jdk ,制作iso 映像文件。 jdk 下载: https://www.360docs.net/doc/7d2604611.html,/technetwork/java/javase/downloads /java-se-jdk-7-download-432154.html 2.在虚拟机中设置加载光驱iso 文件。(注意要启动光驱) 3.进入客户机系统,使用命令mount /mnt/cdrom 加载光驱到cdrom ,在使用cp 命令将cdrom 中的jdk 文件复制到home 文件夹中,用命令./jdk1.6.0_34运行即可。 1.修改/etc/profile 文件

如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell 都有权使用这些环境变量,但可能会给系统带来安全性问题。 (1)用文本编辑器打开/etc/profile (2)在profile 文件末尾加入: JAVA_HOME=/usr/share/jdk1.5.0_05 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOM E/lib/tools.jar export JAVA_HOME export PATH export CLASSPATH (3)重新登录 注解: a. 你要将 /usr/share/jdk1.5.0_05jdk 改为你的jdk 安装目录 等同于CLASSPATH=.:$JAVA_HOM E/jre/lib/rt.jar

b. linux下用冒号“:”来分隔路径 c. $PATH / $CLASSPATH / $JAVA_HOME 是用来引用原来的环境变量的值,在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种常见的错误。 d. CLASSPATH中当前目录“.”不能丢,把当前目录丢掉也是常见的错误。 e. export是把这三个变量导出为全局变量。 f. 大小写必须严格区分。 2. 修改.bashrc文件 这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。 (1)用文本编辑器打开用户目录下的.bashrc文件 (2)在.bashrc文件末尾加入: set JAVA_HOME=/usr/share/jdk1.5.0_05 export JAVA_HOME set PATH=$JAVA_HOME/bin:$PATH

linux系统及应用应用开发实验报告册

合肥师范学院 实验报告册 2013-2014第二学期 系别计算机科学与技术 实验课程 linux系统及应用 专业 11级计算机科学与技术 班级嵌入式应用技术 姓名 学号 指导教师何冀军

实验项目一览表 实验一Linux系统安装和简单配置 一、实验目的 (1)掌握Linux操作系统的安装步骤; (2)掌握Linux系统的简单配置方法; (3)掌握Linux系统的启动、关闭步骤。 二、实验内容 (1)安装Linux系统; (2)配置Linux系统运行环境; (3)正确地启动、关闭系统。

三、实验软件 VMWare Workstation 5.0; Red hat linux 9.0镜像文件; 四、实验主要步骤 (1)配置并安装操作系统; (2)vi创建程序并实用GCC编译; (3)运行程序; 五、实验结果 实验项目二Linux基本命令的使用 一、实验目的 (1)掌握Linux一般命令格式; (2)掌握有关文件和目录操作的常用命令; (3)掌握有关进程操作的常用命令; (4)熟练使用man命令。 二、实验内容 (1)正确地登陆和退出系统; (2)熟悉date,cal,who,echo,clear,passwd命令; (3)在用户主目录下对文件进行如下操作:复制一个文件、显示文件内容、查找指定内容、排序、文件比较、文件删除等; (4)对目录进行管理:创建和删除子目录、改变和显示工作目录、列出和更改文件权限、链接文件等; (5)利用man显示date,echo等命令的手册页; (6)显示系统中的进程信息。 三、实验软件 VMWare Workstation 5.0; Red hat linux 9.0; 四、实验主要步骤 1、登录进入系统,修改个人密码。 2、使用简单命令:date,cal,who,echo,clear等,了解linux命令格式; 3、浏览文件系统: (1)运行pwd命令,确定当前工作目录; (2)运行ls –l命令,理解各字段含义; (3)运行ls –ai命令,理解各字段含义。 (4)使用cd命令,将工作目录改到根目录(/)上。 (5)直接使用cd,用pwd命令验证回到的位置。 (6)用mkdir建立一个子目录subdir; (7) 将工作目录改到subdir. 4、文件操作 (1)验证当前工作目录在subdir; (2)运行date >file1,然后运行cat file1,看到什么信息? (3)运行cat subdir,会有什么结果,为什么?

怎样执行在Linux上运行应用程序

如何执行在Linux上运行的应用程序 关键字:Linux 先决条件 要充分理解本文,必须具备Windows 环境下桌面应用程序的工作经验,我认为读者对如何使用Linux 桌面有一个基本的了解。使用一个运行的Linux 计算来机探讨本文的概念和示例是很有帮助的。 概述 有时候第一次在Linux 上运行一个应用程序需要一点额外工作。有些应用程序,比如服务器服务,可能无法安装为服务,因此您需要从命令行启动这些应用程序。对于启动这些应用程序的用户帐户而言,需要在应用程序文件中设置执行许可标志(x)。 运行用户空间应用程序 Linux 在内核空间或用户空间运行进程。用户空间是操作系统的区域,应用程序通常在此运行。简单地说,每个用户帐户有其自己的用户空间,应用程序在这个领域内运行。 默认情况下,只有root 用户有权访问内核空间。root 用户是Linux 中的超级用户,相当于Windows 中的管理员帐户。在root 用户帐户下运行应用程序可能会引起安全风险,是不可取的。 很多服务器服务需要root 权限启动服务。然而,服务启动后,root 帐户通常会将其移至服务帐户。严格地说,Linux 中的服务帐户才是标准的用户帐户。主要区别是服务帐户仅用于运行一个服务,而不是为任何实际登录的用户准备的。 设置权限 您可以使用chmod 命令在一个文件中设置执行权限。在Linux 中,umask 设置通常用来防止下载的文件被执行,也有充分的理由相信,因为它有助于维护Linux 计算机的安全性。 大多数Linux 发行版具有一个值为022 的umask 设置,这意味着,默认情况下一个新文件权限设置为644.权限的数字表示形式采用读(4)、写(2)、执行(1) 的格式。因此,默认权限为644 的应用程序下载意味着文件所有者有读写权限,而组用户和其他用户只有读权限。 例如,为每个人赋予一个文件的执行权限,使用chmod a+x 命令。a 表示所有人,加号(+) 表示添加,而x 表示执行。同样地,如果应用程序是一个服务器服务,您应该确保只有授权帐户才有权执行此服务。 如果一个应用程序能够在标准用户帐户权限下运行,但只有特定组中的用户才需要使用它,您可以将该组所有者权限设置为可执行,然后将这些用户添加到该组中。 更具体地说,您可以在一个可执行文件中设置访问控制列表(ACL) 权限,赋予特定用户或组权限来运行该应用程序。使用setfacl 实用工具设置ACL 权限。 对于这些需要以root 用户启动进程的应用程序,比如服务器服务,您有几个选择。总结了允许用户执行需要root 权限的服务器服务的各种选项。 选项描述 作为root 用户不推荐用于服务器服务。当用户已经知道root 密码而且应用程序泄露不是首要关注问题时,可用于应用程序。 SetUID 由于安全问题,不推荐使用。SetUID 允许标准用户以另一个用户方式,比如root 用户,执行一个文件。 sudo 很常用,并且被认为是一个很好的实践。sudo 授予一个用户或组成员权限以执行可能额外需要root 权限的文件。该用户不需要知道root 密码。 带有文件权限的标准用户帐户在一个文件上为用户所有者、组所有者或其他人(所有人)

Linux环境变量设置总结

Linux环境变量设置总结 1、引言 在linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现“command not found”的提示内容。如果每次都到安装目标文件夹内,找到可执行文件来进行操作就太繁琐了。这涉及到环境变量PATH的设置问题,而PATH的设置也是在linux下定制环境变量的一个组成部分。本文基于RedHat9.0,详细讲解了环境变量定制的问题。 2、变量简介 Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。 3、常见的环境变量 $PATH:决定了shell将到哪些目录中寻找命令或程序 $HOME:当前用户主目录 $MAIL:是指当前用户的邮件存放目录。 $SHELL:是指当前用户用的是哪种Shell。 $HISTSIZE:是指保存历史命令记录的条数 $LOGNAME:是指当前用户的登录名。 $HOSTNAME:是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。 $LANG/LANGUGE:是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。 $PS1:是基本提示符,对于root用户是#,对于普通用户是$,也可以使用一些更复杂的值。 $PS2:是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,比如下列命令会将提示符修改成字符串“Hello,My NewPrompt:)”。 #PS1="Hello,My NewPrompt:)" $IFS:输入域分隔符。当shell读取输入时,用来分隔单词的一组字符,它们通常是空格、制表符和换行符。 $0:shell脚本的名字。 例如,在我的Linux系统中: $echo$0 /bin/bash

嵌入式Linux应用程序开发测试题

嵌入式Linux应用程序开发测试题(14级嵌入式方向专用) 一、选择题 1、下列哪一项不是嵌入式操作系统的特点D A、占有资源少 B、低成本 C、高可靠性 D、交互性 2、在Linux内核配置过程中,下面哪项命令采用的是基于图形窗口模式的配置 界面C A、make config B、make menuconfig C、make xconfig D、make oldconfig 3、在Linux内核配置过程中,下面哪项命令建立依赖关系C A、make config B、make menuconfig C、make dep D、make clean 4、交叉编译器中,下面哪项不是必需包含的D A、glibc B、gcc C、binutils D、tmake 5、内核的编译主要步骤不包括下面哪项D A、内核配置 B、建立依存关系 C、建立内核 D、加载内核 6、内核编译时选项前的尖括号中可以是空,*,M,其中*表示C A、选项将编译为模块 B、不包含选项 C、包含选项 7、Bootloader的stage1阶段主要完成的工作不包括下面哪项D A、基本的硬件初始化 B、为加载stage2准备RAM空间 C、拷贝stage2到RAM中 D、用汇编语言跳转到main入口函数 8、GCC的正确编译流程为A A、预处理-编译-汇编-链接 B、预处理-编译-链接-汇编

C、预处理-链接-编译-汇编 D、编译-预处理-汇编-链接 9、如需GCC提供编译过程中所有有用的报警信息,则在编译时应加入选项B A、-w B、-Wall C、-werror D、-error 10、下面哪些与GDB相关的说法是错误的B A、GDB能调试可执行文件 B、GDB能调试源代码 C、GDB对编译过程有要求D、GDB支持交叉调试 11、在GDB调试过程中,使用下面哪项命令设置断点,其中m代表行号A A、b m B、c m C、n m D、s m 12、open函数原型中的O_RDWR标志表示文件打开方式为C A、只读方式打开文件 B、可写方式打开文件 C、读写方式打开文件 D、以添加方式打开文件,在打开文件的同时,文件指针指向文件末尾 13、在Linux操作系统中,串口设备的设备名一般为C A、com1 B、port1 C、ttyS0 D、serl1 14、下面哪项对Linux操作系统下fork函数的描述是错误的D A、fork函数执行一次返回两个值 B、新进程称为子进程,而原进程称为父进程 C、父进程返回值为子进程的进程号 D、子进程返回值为父进程的进程号 15、编写守护进程的第一步为A A、创建子进程,父进程退出 B、在子进程中创建新会话 C、改变当前目录为根目录 D、关闭文件描述符 16、在关于TCP/UDP的描述中,下面哪项是错误的C A、TCP数据传输实现了从一个应用程序到另一个应用程序的数据传递

Linux Centos6.5下安装JDK8和配置环境变量详细步骤

Linux下安装JDK及其配置环境变量步骤:(我的环境centos6.5,用户名:zhang) 1.下载jdk,(我这里下载的jdk8)默认在/home/zhang/下载/ 这个目录下。 注意:a.这里的zhang是你登录的用户名 b.使用火狐浏览器下载,下载完成后,右键》打开所在文件夹,点击文件>打开位置.可以查看文件位置。 2.右键打开终端,如果显示$表示当前为普通用户,输入命令su root回车,再输入密码(安装时的密码),切换到超级管理用户root。 a.输入cd /home/zhang/下载/ 进入下载目录,再输入ls命令,列出此目录下文件,可以看到jdk-8u121-linux-x64.tar.gz刚刚下载的压缩文件 b.输入命令:cp jdk-8u121-linux-x64.tar.gz /usr/tmp 把文件拷贝到/usr/tmp目录下。以免中文目录引起莫名问题 3.解压压缩文件: a.在/usr/tmp目录下 b.命令:tar -xzf all.tar.gz -C 文件目录; c.tar -xzf jdk-8u121-linux-x64.tar.gz -C /usr/share 回车。把文件解压到/usr/share目录下 也可以解压到其他目录下,不过你可以看到在share目录下有很多安装的文件目录,有点儿类似windows中的programe files目录 ******--------配置java环境变量:-------************ 1.我们这里解压后的jdk目录为/usr/share/jdk1.8.0_121 2.可以先在终端中输入javac回车,会提示不是命令,说明没有配置环境变量。 3.使用命令vim /etc/profile回车打开编辑配置文件 4.上下光标到文件最后一行,键入o,快捷键,进入插入模式并定位到文件最后一行。 输入如下内容: export JAVA_HOME=/usr/share/jdk1.8.0_121 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 然后esc,输入:冒号。输入wq回车,保存并退出。 5.注销当前登录系统的用户,再次登录系统,打开终端,输入javac,输出一堆命令说明,成功! **********-----JDK的使用测试------********** 1.命令cd /home/zhang/ 回车,进入目录 2.命令mkdir workspace回车,创建一个新目录workspace,命令cd workspace进入 3.命令cat>Test.java回车 输入public class Test{ public static void main(String[] args){ System.out.println("Hello,Java!"); } } Ctrl+D快捷键保存并退出

一个简单字符设备驱动实例

如何编写Linux设备驱动程序 Linux是Unix操作系统的一种变种,在Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环境下的驱动程序有很大的区别。在Linux环境下设计驱动程序,思想简洁,操作方便,功能也很强大,但是支持函数少,只能依赖kernel中的函数,有些常用的操作要自己来编写,而且调试也不方便。本文是在编写一块多媒体卡编制的驱动程序后的总结,获得了一些经验,愿与Linux fans共享,有不当之处,请予指正。 以下的一些文字主要来源于khg,johnsonm的Write linux device driver,Brennan's Guide to Inline Assembly,The Linux A-Z,还有清华BBS上的有关device driver的一些资料. 这些资料有的已经过时,有的还有一些错误,我依据自己的试验结果进行了修正. 一、Linux device driver 的概念 系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能: 1)对设备初始化和释放; 2)把数据从内核传送到硬件和从硬件读取数据; 3)读取应用程序传送给设备文件的数据和回送应用程序请求的数据; 4)检测和处理设备出现的错误。 在Linux操作系统下有两类主要的设备文件类型,一种是字符设备,另一种是块设备。字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了,块设备则不然,它利用一块系统内存作缓冲区,当用户进程对设备请求能满足用户的要求,就返回请求的数据,如果不能,就调用请求函数来进行实际的I/O操作。块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待. 已经提到,用户进程是通过设备文件来与实际的硬件打交道。每个设备文件都都有其文件属性(c/b),表示是字符设备还是块设备。另外每个文件都有两个设备号,第一个是主设备号,标识驱动程序,第二个是从设备号,标识使用同一个设备驱动程序的不同的硬件设备,比如有两个软盘,就可以用从设备号来区分他们。设备文件的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问到驱动程序. 最后必须提到的是,在用户进程调用驱动程序时,系统进入核心态,这时不再是抢先式调度。也就是说,系统必须在你的驱动程序的子函数返回后才能进行其他的工作。如果你的驱动程序陷入死循环,不幸的是你只有重新启动机器了,然后就是漫长的fsck。 二、实例剖析 我们来写一个最简单的字符设备驱动程序。虽然它什么也不做,但是通过它可以了解Linux的设备驱动程序的工作原理.把下面的C代码输入机器,你就会获得一个真正的设备

LINUX系统中环境搭建

LINUX系统中服务器环境搭建 一:软件介绍 Apache:世界使用排名第一的Web服务器软件。 Tomcat:是运行在java环境(JDK)下的web服务器,只要有java环境就可以运行。 PHP:是一种HTML内嵌式的语言,是一种在服务器端执行的脚本语言,(PHP是服务端脚本,而HTML 是客户端脚本。服务器将php解析后生成HTML,服务器对HTML文件不做解析,然后通过网络将HTML传到客户端(直接传HTML的代码内容),再由浏览器解析HTML。任何语言写出来的网页最终都被解析成HTML语言, 然后返回客户端,被浏览器解析,浏览器只认html) MySQL:是一个开放源码的数据库管理系统。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。 二:防火墙关闭 1、Selinux是强制访问控制(MAC)系统(一种防火墙) 命令getenforce检查selinux是否已禁用,如果不是disabled或setenforce 0 则修改/etc/selinux/config文件,将状态改成disabled,保存并重启linux!! 2、检查防火墙是否禁用,命令/etc/init.d/iptables status或(service iptables status)查看状态,如果没禁 用则: 临时关闭方式:命令/etc/init.d/iptables stop或(service iptables stop)禁用。 永久关闭方式:命令chkconfig --level 35 iptables off,重启之后防火墙关闭。 三:安装前的准备工作: 将安装文件传到虚拟机linux上,可以采用两种方式 1:使用连接器secureFX进行上传。 2:在windows的机器上创建一个共享文件夹,例如:sharedoc,将安装文件放入sharedoc。然后在linux里面运行命令:mount -t cifs -o username=user1,password=password //ip/sharedoc /mnt/share 注意:user1使用windows机器具有共享权限的用户名,password使用用户对应的密码,ip 替换成windows机器的真实IP。/mnt/share这个表示linux上的某个路径,可以更改为任意 实际存在的文件夹,建议将要安装的源文件放到/opt/source路径下。 b、如果要自定义安装的话,手动创建软件安装的目录。 比如:mkdir /opt/lamp/apache 安装apache用 mkdir /opt/lamp/mysql 安装mysql用 mkdir /opt/lamp/php 安装php用

Linux应用程序开发

Linux应用程序开发 二、项目 说明:下列各个项目中的程序都要同时支持单字符选项和长选项 还需要支持一些事实上每一个GNU程序都会接受或应该接受的普通选项 具体要求每个程序都要增加以下两个选项: -h --help 列出所有可用选项用法信息,然后顺利退出程序。 -v --version 输出版本号,然后顺利退出程序。 4. 模式的含义。 4.1 创建库libpm.a,库中至少有以下函数。 // 判断模式是否整数代码 bool isIntcode (char *pattern); // 在作为模式的信号符号名前面加上SIG char *plussig (char *pattern); // 在作为模式的资源符号名前面加上RLIMIT_ char *plusrlimit (char *pattern); // 输出模式的含义,采用选项-o时,outf为1;否则为0 void printpm (int outf); 4.2 在调用库函数sqrt(x)时,如果x当前的值小于零,则会导致定义域错误。 如果你的程序还调用了strerror函数或perror函数,则有可能在标准输出看到如下错误消息: Math argument out of domain of func 这一错误消息在头文件/usr/include/asm-generic/errno-base.h中列出: #define EDOM 33 /* Math argument out of domain of func */ 其符号名和代码分别是EDOM和33,错误消息实际上是错误的含义。 errno-base.h共列出34个错误,而头文件errno.h中的错误代码为35-131。 类似地,头文件/usr/include/bits/signum.h中定义了信号的符号名和代码。 例如:只要从键盘按下Ctrl-C键,系统就把信号SIGINT发送给当前进程,提前结束运行。 此信号的定义如下: #define SIGINT 2 /* Interrupt (ANSI). */ 头文件/usr/include/asm-generic/resource.h也用同样的方式列出资源限制,例如:

《Linux应用程序设计》复习题

.一、选择题 1.下面哪个命令是用来定义shell的全局变量( ) A. exportfs B. alias C. exports D. export 2. 将当前目录下的文件移动到目录/home/linux下的命令为。 A. cp /home/linux B. mv /home/linux C. lls / home/linux/ D. mv /root/ /home/linux/ 3.如果要列出一个目录下的所有文件需要使用命令行( )。 A. ls –l B. ls-t C. ls –a D. ls –d 下Makefile文件中,表示第一个依赖目标的系统变量是() A.$@ B.$* C.$< D.$# 位系统下,定义一个指向字符类型的变量short i,那么sizeof(i)的值是( ) B.2 6.在用ls –l 查看文件属性时,字符设备文件类型的标志是( ) 7. 在linux下进行shell编程时,注释符是。 A. # B. /* */ D. 以上都不对 8. 任何时候用户需要回到用户主目录时可以使用命令。 A. cd B. pwd C. path D. cd . 9. 下列属于文件包含的命令是_________。 A. #define N 25 B. #endif C. #include "" D. #else 10. 下列关于Linux安装的说法中,不正确的是。 A.如果计算机的内存为128MB,则SWAP分区(交换分区)的大小通常设定为256M。 B.安装时Linux分区的文件系统类型一般为ext2或ext3。

C.安装时要进行磁盘分区,如果选择“自动分区”,系统会自动保留硬盘上原来的数据。 除了可以从光盘安装外,还可以从网上下载Linux的iso映像文件,从硬盘安装。 11. 下列说法中,不正确的是。 A. Shell程序编写完后还需要用gcc编译器编译。 B.可以通过将shell程序作为sh命令的输入来执行shell程序。 C. shell程序中定义的函数不能有参数。 D. Linux是免费使用和自由传播的类UNIX操作系统,但它并不是没有版权。 二.判断题 init 启动进程需要读取的系统配置文件是/etc/inittab。(√) 下令某个进程在后台运行,可在此命令后面加符号&。( √) 3.如果route add default gw netmask 命令成功运行的话,此机器的IP地址有可能是。 (X ) 程序编写完后还需要用gcc编译器编译。(X ) 5.计算机内存中正数的补码和原码一样,负数的补码等于其原码加1(X ) 6.在RedHat中cd ~ 这个命令会把你送回到你的家目录。(√) 三.填空题 IP协议采用四层层级结构,从下到上分别是:网络接口层.____ 互联网络层______ 、_ ___传输层______ .和应用层。 2.使用GCC 生成可执行文件似乎是一步完成的,实际上经历了如下四个步骤:__预处理____.编译.汇编和__连接______。 3.一个C语言程序的执行起点是__主函数________。

linux简单的gpio驱动实例

今天完成了嵌入式linux的第一个驱动的编写和测试,虽然是个简单的程序,但是麻雀虽小,五脏俱全,希望可以给刚开始接触驱动编写的人一些提示,共同进步。 源代码: 分析如下: 下面是我的驱动程序: #include //配置头文件 #include /*内核头文件,作为系统核心的一部分,设备驱动程序在申请和释放内存时,不是调用malloc和free,而是调用kmalloc和 kfree*/ #include //调度,进程睡眠,唤醒,中断申请,中断释放 #include //时钟头文件 #include //用户定义模块初始函数名需引用的头文件 #include //模块加载的头文件 #include #include //这个是2440的寄存器头文件,asm/srch只是个链接 //实际根据自己的情况查找,一般 是../../linux2.*.*/include/asm/arch-s3c2440里编译器 //自己会查询链接,以前不知道,找了半天 // GPIO_LED DEVICE MAJOR #define GPIO_LED_MAJOR 97 //定义主设备号 //define LED STATUS 我的板子 LED在GPB0 与GPB1 处大家根据自己情况改 #define LED_ON 0 //定义LED灯的状态开 #define LED_OFF 1 // // ------------------- READ ------------------------ 这个前面要加static 否则警告 static ssize_t GPIO_LED_read (struct file * file ,char * buf, size_t count, loff_t * f_ops) {

相关文档
最新文档