如何成为一个linux开发人员
2014-11-29 15:43
851 查看
如何成为一个linux开发人员
当前linux作为server, database服务器,开发平台,嵌入式实时OS的作用都随着平台的发展, 越来越成熟, 产品的使用度也越来越高, 掌握linux作为application开发,嵌入式开发都成为优秀开发人员攻克的技术之一.
阅读(305) | 评论(0) | 转发(0) |
0
上一篇:linux中oracle的日常维护命令
下一篇:程序员,DBA,架构师,项目管理,一个都不能少!
相关热门文章
欢迎vivova在ChinaUnix博客安...
欢迎zl780418在ChinaUnix博客...
欢迎qq12340000在ChinaUnix博...
欢迎letwudpobgn在ChinaUnix博...
欢迎thxtbmytjor在ChinaUnix博...
linux 常见服务端口
【ROOTFS搭建】busybox的httpd...
xmanager 2.0 for linux配置
什么是shell
linux socket的bug??
windows有发展前景吗
谁能够帮我解决LINUX 2.6 10...
现在的博客积分不会更新了吗?...
shell怎么读取网页内容...
ssh等待连接的超时问题...
给主人留下些什么吧!~~
评论热议
请登录后评论。
登录 注册
关于我们 | 关于IT168 | 联系方式 | 广告合作 | 法律声明 | 免费注册
Copyright 2001-2010 ChinaUnix.net All Rights Reserved 北京皓辰网域网络信息技术有限公司. 版权所有
感谢所有关心和支持过ChinaUnix的朋友们
京ICP证041476号 京ICP证060528号
当前linux作为server, database服务器,开发平台,嵌入式实时OS的作用都随着平台的发展, 越来越成熟, 产品的使用度也越来越高, 掌握linux作为application开发,嵌入式开发都成为优秀开发人员攻克的技术之一.
首先,程序员要了解在linux下的几个之最: 最有用开发语言: C/C++ 最流行的工具集: gtk/gdk,qt/e 最好的可视化开发工具: glade,designer,kdeveloper 最cool的代码阅读工具: source navigator 最普及的调试工具: gdb, ddd , anjuta 最高级(主要指价格高级)的程序跟踪工具: BDM,ICE 最强大的开发平台: Redhat linux 6~8, Turbolinux 6~7,Hard Hat linux(HHL), Blue cat linux 最快但最年青(年青就是不成熟,吃不得)的图形:nano-X,microwindows,minigui 部分名词的意思: gtk/gdk: 做 GIMP(linux很有名的图象处理软件的工具集 qt: trollteck公司的产品,有qt/x11跟qt/embedd glade: 开发gtk/gdk程序的图形工具,能完成界面的编辑(这比用VI做界面好10^n 倍,本人曾经用vi 以每天2000行程序的速度写过gtk的应用,整整写了一个月,后来用glade用重来,一周就完成了) anjut: 非常方便,功能强大的调试工具,程序出错不用再一行行试了,用它一目了然。 designer: 开发qt/x11程序的图形工具,能完成界面的编辑,也可以开发qt/embedded的程序 kdeveloper: 类似VC一样,功能强大 source navigator: redhat公司出的代码阅读器,supper cool. microwindows: win32接口GUI,又小又快,用于PDA nano-X: 多任务的microwindows miniGUI: 类似上面两种图形,国产的,虽然我没用过,但基于支持国产软件的原则,我想绝对比nano-X及microwindows好。 知道了如上的一些东西,我们就可以决定开发的方向了: 1. 对于C程序员 C + gtk/gdk + glade +anjuta+ 中文turbolinux 2. 对于C++程序员 C++ + qt/x11 + designer + kdeveloper + anjuta+中文turbolinux 3. embedded程序员 c/c++ + qt/embedded + gtk+ HHL 4. embedded爱好者 c/c++ + microwindows + HHL 我们Step by Step,只要肯下苦功钻研Linux,按照这条路走一定可以成为优秀的Linux开发人员。这个开发途径不一定是最好的,但肯定是一条正道,也是目前 Linux的潮流所在,是我多年开发Linux及做Linux项目的经验总结,出于对中国Linux事业的极大热情,愿意奉献出来与大家共享。 Step 1: 掌握Linux的安装运行方法,包括: a. 从CDROM直接安装Linux b. 用fdisk或pqmagic的协助手工分区安装Linux c. 硬盘上本身有Linux,但不能启动,要懂得使用软盘或CDROM恢复Linux系统 d. 使用vpc或vmware等工具安装启动Linux e. 在dos/windows下安装Linux,使用loadlin来启动系统 f. 通过网络无盘来启动Linux,其实这个原理很简单,只要懂上面所说的loadlin使用,无盘启动Linux系统和无盘启动dos做法一模一样。 Step 2: 掌握Linux的运行原理,Linux系统启动的标准流程: Bios ->Lilo/Grub->Kernel->/sbin/init(init等于是一个批处理,它将从/etc/inittab读取将要运行的指令,因此我们可以自己写这个批处理,往后要运行什么都可以自己控制)->login-> /usr/X11R6/bin/startx Step 3: 掌握Linux的常用命令,命令列表请查阅Tomlinux文档"Linux开发常用命令" Step 4: 了解Linux专业名词及开发资源,请查阅Tomlinux文档"嵌入式Linux名词及资源" Step 5: 如果从step1到step4你都掌握或比较熟悉,那么进行嵌入式Linux开发的基础就算扎实了,接下来考虑的是开发的方向,一般是从X86的开发开始,进行X86开发的最佳组合为: a . Kernel 使用最终稳定版而非最新版进行裁减,如果功能可达到,甚至可以退回到更旧的稳定版,旧版kernel可以做得更小更快。 b. bash和常用命令集要使用busybox而不是使用标准的 c. 如果存储空间足够,lib可使用标准libc,对于存储空间紧张的使用uClibc d. 图形系统使用Tinyx e. 窗口系统使用icewm f. 开发选用语言,个人认为使用C/C++是主力,其它只能作为辅助 g .图形应用选用免费而又非常优秀的GTK工具集,可以在其图形开发环境galde和anjuta、SNavigator的配合下进行,这个组合简直是黄金搭档,我自己觉得这加起来比vb/vc还好用。当然另一个不错的选择是使用QT工具集,可配置Designer、Kdeveloper来使用。 h. 开发字符应用可使用ncurses辅助,开发无图形服务器的系统可使用直接写屏framebuffer方式或SDL、QT/E方式 i. 发行时选用的存储器一般是DOC或者DOM而不使用HD 根据上面的组合开发出来的系统,装到8M的DOC/DOM上完全没有问题,如果是以没有图形服务器方式h.进行的,最小1M的DOC就够了。 Step 6: 掌握X86的开发方法后,在其它平台上进行开发也是大同小异,所需更换的主要是引导方式,kernel、基本库及编译器等。这些东西在安装相应的开发包后即可解决,不要自己耗大量时间去进行,开发精力应放到产品级的开发上去,必竟中国目前的水平还没有到编译器这一类的级别。不同的平台及相关的Linux支援主查阅 Tomlinux文档"嵌入式CPU" 。 对于非X86平台的开发,经常会需对硬件进行分析,还需要使用硬件辅助除错,比如在ARM的开发中,ARM Debugger支持连接ICE(In-Circuit Emulator)到Remote进行调试,还可通过JTAG接个ICD调试,在PPC开发中则使用BDM去调。 这些设备都比较贵,如果公司里面有现成的,那么一定要积极去使用它,即使有时有其它的代替方法,因为这样才可以表现出你是一个高手高手高高手。如果没有就要看情况是否购买它了,不是必要的就尽量为公司节省费用才是好员工。 当你成为一个优秀的嵌入式Linux开发人员时,不要因此而满足,那怕你是技术最最强的一个,但在一个公司里不表示你是值钱的。只有那些有长远目光,有想法有创意的,能为公司赚到钱的才是最棒的,所以要多了解市场信息,多了解Linux的发展动向,争取写出killer application 为公司赚钱。这也是我一向在努力的,只是至今还没能力实现,希望大家一起努力,一个是为了赚到银子,更重要的为中国的Linux发展及至软件事业作出贡献。
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Linux类中) http://www.unix5.com/
基本操作命令: ---------------------------------------------------------------------- ---------------------------------------------------------------------- ls #以默认方式显示当前目录文件列表 ls –a #显示所有文件包括隐藏文件 ls –l #显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行 ls --color=never *.so > obj #不显示文字颜色,将所有so文件记录到obj文件中 ---------------------------------------------------------------------- cd dir #切换到当前目录下的dir目录 cd / #切换到根目录 cd .. #切换到到上一级目录 cd ../.. #切换到上二级目录 cd ~ #切换到用户目录,比如是root用户,则切换到/root下 ---------------------------------------------------------------------- rm file #删除某一个文件 rm -fr dir #删除当前目录下叫dir的整个目录 ---------------------------------------------------------------------- cp source target #将文件source 复制为 target cp /root/source . #将/root下的文件source复制到当前目录 cp –av soure_dir target_dir #将整个目录复制,两目录完全一样 cp –fr source_dir target_dir #将整个目录复制,并且是以非链接方式复制,当source目录带有符号链接时,两个目录不相同 ---------------------------------------------------------------------- mv source target #将文件source更名为target ---------------------------------------------------------------------- diff dir1 dir2 #比较目录1与目录2的文件列表是否相同,但不比较文件的实际内容,不同则列出 diff file1 file2 #比较文件1与文件2的内容是否相同,如果是文本格式的文件,则将不相同的内容显示,如果是二进制代码则只表示两个文件是不同的 comm file1 file2 #比较文件,显示两个文件不相同的内容 ---------------------------------------------------------------------- echo message #显示一串字符 echo "message message2" #显示不连续的字符串 cat: cat file #显示文件的内容,和DOS的type相同 cat file | more #显示文件的内容并传输到more程序实现分页显示,使用命令less file可实现相同的功能 more #分页命令,一般通过管道将内容传给它,如ls | more ---------------------------------------------------------------------- export LC_ALL=zh_CN.GB2312 #将环境变量LC_ALL的值设为zh_CN.GB2312 export DISPLAY=0:0 #通过该设置,当前字符终端下运行的图形程序可直接运行于Xserver date #显示当前日期时间 date -s 20:30:30 #设置系统时间为20:30:30 date -s 2002-3-5 #设置系统时期为2003-3-5 clock –r #对系统Bios中读取时间参数 clock –w #将系统时间(如由date设置的时间)写入Bios ---------------------------------------------------------------------- eject #umout掉CDROM并将光碟弹出,但cdrom不能处于busy的状态,否则无效 ---------------------------------------------------------------------- du #计算当前目录的容量 du -sm /root #计算/root目录的容量并以M为单位 find -name /path file #在/path目录下查找看是否有文件file grep -ir “chars” #在当前目录的所有文件查找字串chars,并忽略大小写,-i为大小写,-r为下一级目录 ---------------------------------------------------------------------- vi file #编辑文件file vi 原基本使用及命令: 输入命令的方式为先按ctrl+c, 然后输入:x(退出),:x!(退出并保存) :w(写入文件),:w!(不询问方式写入文件), :r file(读文件file) ,:%s/oldchars/newchars/g(将所有字串oldchars换成newchars) 这一类的命令进行操作 ---------------------------------------------------------------------- man ls #读取关于ls命令的帮助 man ls | grep color #读取关于ls命令的帮助并通过grep程序在其中查找color字串 ---------------------------------------------------------------------- startx #运行Linux图形有环境 Xfree86 #只运行X图形server ---------------------------------------------------------------------- reboot #重新启动计算机 halt #关闭计算机 init 0 #关闭所有应用程序和服务,进入纯净的操作环境 init 1 #重新启动应用及服务 init 6 #重新启动计算机 ---------------------------------------------------------------------- 扩展命令 ---------------------------------------------------------------------- ---------------------------------------------------------------------- tar xfzv file.tgz #将文件file.tgz解压 tar xfzv file.tgz -C target_path #将文件file.tgz解压到target_path目录下 tar cfzv file.tgz source_path #将文件source_path压缩为file.tgz tar c directory > directory.tar #将目录directory打包成不压缩的directory.tar gzip directory.tar #将覆盖原文件生成压缩的 directory.tar.gz gunzip directory.tar.gz #覆盖原文件解压生成不压缩的 directory.tar。 tar xf directory.tar #可将不压缩的文件解包 ---------------------------------------------------------------------- dmesg #显示kernle启动及驱动装载信息 uname #显示操作系统的类型 uname -R #显示操作系统内核的version ---------------------------------------------------------------------- strings file 显示file文件中的ASCII字符内容 ---------------------------------------------------------------------- rpm -ihv program.rpm #安装程序program并显示安装进程 rpm2targz program.rpm program.tgz #将rpm格式的文件转换成tarball格式 ---------------------------------------------------------------------- su root #切换到超级用户 sulogin /dev/tty4 #在tty4即alt+F4终端等待用户登陆或直接登陆开启一个shell chmod a+x file #将file文件设置为可执行,脚本类文件一定要这样设置一个,否则得用bash file才能执行 chmod 666 file #将文件file设置为可读写 chown user /dir #将/dir目录设置为user所有 ---------------------------------------------------------------------- mknod /dev/hda1 b 3 1 #创建块设备hda1,主设备号为3,从设备号为1,即master硬盘的的第一个分区 mknod /dev/tty1 c 4 1 #创建字符设备tty1,主设备号为4,众设备号为1,即第一个tty终端 ---------------------------------------------------------------------- touch /tmp/running #在/tmp下创建一个临时文件running,重新启动后消失 ---------------------------------------------------------------------- sleep 9 #系统挂起9秒钟的时间 ---------------------------------------------------------------------- lpd stop 或 cups stop #停止打印服务程序 lpd start 或 cups start #启动打印服务程序 lpd restart 或 cups restart #重新启动打印服务程序 lpr file.txt #打印文件file.txt ---------------------------------------------------------------------- fdisk /dev/hda #就像执行了dos的fdisk一样 cfdisk /dev/hda #比fdisk界面稍为友好些 mount -t ext2 /dev/hda1 /mnt #把/dev/hda1装载到 /mnt目录 df #显示文件系统装载的相关信息 mount -t iso9660 /dev/cdrom /mnt/cdrom #将光驱加载到/mnt/cdrom目录 mount-t smb //192.168.1.5/sharedir /mnt -o username=tomlinux,password=tomlinux #将windows的的共享目录加载到/mnt/smb目录,用户名及密码均为tomlinux mount -t nfs 192.168.1.1:/sharedir /mnt #将nfs服务的共享目录sharedir加载到/mnt/nfs目录 umount /mnt #将/mnt目录卸载,/mnt目录必须处于空闲状态 umount /dev/hda1 #将/dev/hda1设备卸载,设备必须处于空亲状态 sync #将cache中的内容与磁盘同步,在Linux中复制文件,一般要系统空闲才去写文件 e2fsck /dev/hda1 #检查/dev/hda1是否有文件系统错误,提示修复方式 e2fsck -p /dev/hda1#检查/dev/hda1是否有错误,如果有则自动修复 e2fsck -y /dev/hda1#检查错误,所有提问均于yes方式执行 e2fsck -c /dev/hda1#检查磁盘是否有坏区 mkfs /dev/hda1 #格式化/dev/hda1为ext2格式 mkfs.minix /dev/hda1 #格式化/dev/hda1为minix格式文件系统 mfks /dev/hda9 #格工化/dev/hda9为Linux swap格式 swapon /dev/hda9 #将swap分区装载当作内存来用 swapoff /dev/hda9 #将swap分区卸载 ---------------------------------------------------------------------- lilo #运行lilo程序,程序自动查找/etc/lilo.conf并按该配置生效 lilo -C /root/lilo.conf #lilo程序按/root/lilo.conf配置生效 grub #在Linux shell状态下运行boot loader设置程序 grub-install #安装grub磁盘引导程序,成功后升级内核无须像lilo一样要重新启动系统,只需修改/etc/grub.conf即可实现新引导配置 rdev bzImage #显示kernel的根分区信息 rdev bzImage /dev/hda1 #将kernel的根分区设置为/dev/hda1,这在没有lilo等引导程序的系统中非常重要. ---------------------------------------------------------------------- dd if=/dev/fd0 of=floppy.fd #将软盘的内容复制成一个镜像,功能与旧石器时代常用的hd-copy相同 dd if=/dev/zero of=root.ram bs=1024,count=1024 #生成一个大小为1M的块设备,可以把它当作硬盘的一个分区来用 mkfs root.ram #将块设备格式化为ext2格式 dd if=root.ram of=/dev/ram0 #将init.rd格式的root.ram的内容导入内存 mount /dev/ram0 /mnt #ramdisk /dev/ram0装载到/mnt 目录 ---------------------------------------------------------------------- gcc hello.c #将hello.c编译成名为a.out二进制执行文件 gcc hello.c -o hello #将hello.c编译成名为hello的二进制执行文件 gcc -static -o hello hello.c #将hello.c编译成名为hello的二进制静态执行文件 ldd program #显示程序所使用了哪些库 objcopy -S program #将程序中的符号表及无用的调试信息去掉,可以小很多 ---------------------------------------------------------------------- strace netscape #跟踪程序netscape的执行,看调用的库,环境变量设置,配置文件,使用的设备,调用的其它应用程序等,在strace下,程序干了什么东东一目了然。 ps #显示当前系统进程信息 ps –ef #显示系统所有进程信息 kill -9 500 #将进程编号为500的程序干掉 killall -9 netscape #将所有名字为netscape的程序杀死,kill不是万能的,对僵死的程序则无效。 top #显示系统进程的活动情况,按占CPU资源百分比来分 free #显示系统内存及swap使用情况 time program #在program程序结束后,将计算出program运行所使用的时间 ---------------------------------------------------------------------- chroot . #将根目录切换至当前目录,调试新系统时使用 chroot /tomlinux #将根目录切换至/tomlinux目录 chroot /tomlinux sbin/init #将根目录切换至/tomlinux并执行sbin/init adduser id #增加一个叫id的用户 userdel id #增除叫id的用户 userlist #显示已登陆的用户列表 passwd id #修改用户id的密码 passwd -d root #将root用户的密码删除 chown id /work #指定/work目录为id用户所拥有 ---------------------------------------------------------------------- ifconfig eth0 192.168.1.1 netmask 255.255.255.0 #设置网卡1的地址192.168.1.1,掩码为255.255.255.0,不写netmask参数则默认为255.255.255.0 ifconfig eth0:1 192.168.1.2 #捆绑网卡1的第二个地址为192.168.1.2 ifconfig eth0:x 192.168.1.x #捆绑网卡1的第二个地址为192.168.1.x ifconfig down eth1 #关闭第二块网卡,使其停止工作 hostname -F tomlinux.com #将主机名设置为tomlinux.com route #显示当前路由设置情况 route add default gw 192.168.1.1 metric 1 #设置192.168.1.1为默认的路由 route del default #将默认的路由删除 dhcp #启动dhcp服务 dhclient #启动dhcp终端并自动获取IP地址 ping 163.com #测试与163.com的连接 ping 202.96.128.68 #测试与IP 202。96.128.68的连接 ---------------------------------------------------------------------- probe rtl8139 #检查驱动程序rtl8139.o是否正常工作 lsmod #显示已装载的驱动程序 insmod rtl8139.o #装载驱动程序rtl8139.o insmod sb.o io=0x280 irq=7 dma=3 dma16=7 mpu_io=330 #装载驱动程序并设置相关的irq,dma参数 rmmod rtl8139 #删除名为rtl8139的驱动模块 gpm -k #停止字符状态下的mouse服务 gpm -t ps2 #在字符状态下以ps2类型启动mouse的服务 ---------------------------------------------------------------------- telnet 192.168.1.1 #登陆IP为192.168.1.1的telnet服务器 telnet iserver.com #登陆域名为iserver.com的telnet服务器 ftp 192.168.1.1 或 ftp iserver.com #登陆到ftp服务 [作者:Tomsoftware骨干之一 Linux天字一号 ] [关于版权的声明:本着Linux自由开放的精神,Tomlinux所公开的Tomlinux文档,充许任意转载或出版,但作为对文章作者努力工作的回报,必须保留文章出处(http://www.tomlinux.com)及作者,Tomlinux转发文章时也将遵守这一个原则。] L i n u x用户指南 系统管理员指南 U n i x操作系统由一个内核和一些系统程序组成。系统程序利用内核所提供的工具执行操作系统要求的各种服务程序。系统程序和其他所有的程序一起,以“用户模式”运行于内核顶部。 L i n u x内核由几个重要部件组成:进程管理、内存管理、硬件设备驱动程序、文件系统驱 动程序、网络管理和其他零碎的东西.内存管理照管已分配给进程、内核部件和缓冲区的内存区和交换空间。进程管理则创建进程,并通过在处理器上交换活动进程的方式,实施多任务操作。 在最低级上,针对每个自己支持的硬件设备,内核中都包含相应的驱动程序. Unix系统提供的主要服务: - init : i n i t是每个U n i x系统中第一个启动的进程,也是内核在启动时所进行的最后一件事情 网络管理员指南 如何在在Linux 和Unix 系统下编写安全程序? “安全程序”是指一个位于安全区域内的程序,要从不具有与该程序相同访问权限的信息源获取输入数据。这样的程序包括用来浏览远端数据的应用程序、CGI 脚本程序、网络服务器和setuid/setgid 程序。 Unix 1969-1970 年,AT&T 贝尔实验室的Kenneth Thompson、Dennis Ritchie 和其 他人开始在一台较老的PDP-7 上开发一个小型的操作系统。不久这个操作系统 被命名为Unix,是对此前一个叫做MULTICS 的操作系统项目的双关语。在 1972-1973 年,系统被重新用C 语言改写了,这是一个很有眼光的不寻常的举动: 这个决定使Unix 成为第一个可以脱离其原始硬件而存在的被广泛应用的操作系 统。其它的新方法也不断被加入Unix,一部分原因是贝尔实验室与学术界的良 好协作。1979 年,Unix 的“第七版”(V7)发布了,它是所有现存Unix 系统的 鼻祖。 从此,Unix 的历史开始变得错综复杂。由Berkeley 领导的学术界开发了被称为 Berkeley 软件发行版(BSD)的变种,而AT&T 继续在“系统III”和随后的“系统 V”的名义下开发Unix。在八十年代后期到九十年代早期,这两个主要分支间的 “战争”激化了。经过多年开发,每个变种都采用了其它变种的许多关键特性。在 商业上,系统V 赢得了“标准之战”(使其绝大部分接口进入了正式标准),而且 绝大多数硬件厂商都切换到AT&T 的系统V。但是,系统V 包含了许多BSD 的 革新,使该系统更像是两大分支的融合。BSD 分支并未消失,而是广泛应用在 研究、PC 硬件和目的单一的服务器上(例如许多WEB 站点都使用某个BSD 变 种)。 最终结果是有很多不同版本的Unix,都来源于原先的第七版。绝大多数版本的 Unix 都是私有的,由其相应的硬件厂商维护,例如,Sun 的Solaris 就是系统V 的变种。Unix 的BSD 分支中有三个版本成为开放源码软件:FreeBSD(注重在 PC 类硬件上安装简便)、NetBSD(注重于很多不同的CPU 结构)和NetBSD 的一个变种,OpenBSD(注重于安全性) Linux 1991 年,Linus Torvalds 开始开发一个他称为“Linux”的操作系统内核[Torvalds 1999]。这个内核可以同FSF 的资料和其它软件(特别是某些BSD 软件和MIT 的X-windows 软件)结合起来构成一个可以自由修改而且非常有用的操作系统。 本文把内核本身称为“Linux 内核”,而把该完整的结合体称为“Linux”。注意,很 多人使用术语“GNU/Linux”来称呼该结合体。 在Linux 社团中,不同的组织以不同的方式结合可用软件。每一种结合被称为一 个“发行版”,而开发发行版的组织就被称为“发行商”。普通的发行版包括Red Hat、Mandrake、SuSE、Caldera、Corel 和Debian。各种发行版间存在差异, 但所有的发行版都基于同一个基础:Linux 内核与GNU 的glibc 库。由于这两 者都是受“copyleft”类型许可证保护的,对它们的修改一般也必须提供给所有人, 这是BSD 和源于AT&T 的Unix 系统之间所不存在的统一力量,使不同Linux 发行版统一在同一个基础之上。 。计算机安全目标通常由三个总体目标来描述: ? 秘密性(也被称为秘密),意味着计算系统的内容只能被授权对象访问。 ? 完整性,意味着内容只能被授权对象以被授权的方式所修改。 ? 可用性,意味着内容可以被授权对象使用。该目标经常提到的反义词就是 拒绝服务。 Saltzer [1974]和Saltzer and Schroeder [1975] 列出了以下依然有效的设计安全 保护系统的原则: ? 最小特权。每个用户和程序在操作时应当使用尽可能少的特权。该原则限 制了事故、错误或攻击带来的危害。它还减少了特权程序之间潜在的相互 作用,从而使对特权无意的、没必要的或不适当的使用不太可能发生。这 种想法还可以引申到程序内部:只有程序中需要那些特权的最小部分才拥 有特权。 ? 机制经济。保护系统的设计应当尽可能地简单和小。用他们的话来说,“逐 行审阅软件和对硬件进行物理检查一类的技术是实现保护机制所必需的。 这样的技术要想成功,小而简单的设计是必不可少的。” ? 公开设计。保护机制不应该依赖于攻击者的无知。其机制反而应当是公开 的,依赖于象密码或密钥这样比较少的(而且容易改变的)项目的保密。 公开设计使广泛的公开详细检查成为可能,而且还可以让用户确信所要使 用的系统是可以满足需要的。坦白地说,要保持一个广泛应用系统的秘密 是不现实的;反向编译和硬件破解能够很快暴露一个产品的任何“秘密”。 Bruce Schneier 证明了聪明的设计者应当“对任何有关安全的东西都要求 公开源码”,以及确保它受到普遍的审核,而且任何找到的问题都已得到 修正[Schneier 1999]。 ? 完全中介。每一个访问企图都应该被检查;把认证机制放在不会被推翻的 位置上。例如,在客户--服务器模型中,通常服务器应该进行所有的访问 检查,因为用户可以构建或修改他们自己的客户程序。 ? 安全失败的缺省值(例如,基于许可的方案)。缺省反应应当是拒绝服务, 而且保护系统能随后辨别哪种情况下访问是允许的。 ? >特权分离。理想情况下,访问对象应当依赖于多个条件,这样破坏一个 保护系统并不能进行完全的访问。 ? 最少的公共机制。使共享机制的数量和使用(例如,对/tmp 或/var/tmp 目录的使用)最小化。共享对象提供了信息流和无意的相互作用的潜在危 险通道。 ? 心理上的接受程度/使用简便。人机界面必须设计得易于使用,这样用户 就可以按惯例自动地正确使用保护机制。如果安全机制非常符合用户对自 己保护目标的想象,错误就很少发生。 进程 在类Unix 系统上,用户级别的活动由运行的进程来实现。绝大多数Unix 系统 支持作为独立概念的“线程”;一个进程内的线程共享内存,而且系统的调度器实 际上是调度线程。Linux 的做法与此不同(依我看是做得更好):线程与进程没 有本质的差异。在Linux 下,在某个进程创建另一个进程时,它可以选择共享哪 些资源(比如内存可以共享)。随后Linux 内核会进行优化以获得线程级的速度; 参见clone(2)以了解更多信息。值得注意的是Linux 内核的开发者倾向于使用“任 务”一词,而不是“线程”或“进程”,但外界的文档则倾向于使用进程一词 在类Unix 系统中,每个进程所有的典型属性如下: ? RUID, RGID -- 运行进程的用户的真实用户ID 和组ID ? EUID, EGID -- 用于权限检查(文件系统除外)的有效用户ID 和组ID ? SUID, SGID -- 保存的用户ID 和组ID;用来支持下面要讨论的切换许可 “开和关”。不是所有的类Unix 系统都支持它。 ? 补充群组 -- 用户有成员资格的群组(GID)列表。 ? umask -- 在创建一个新的文件系统对象时决定缺省访问控制设置的一组 比特位;参见umask(2)。 ? scheduling parameters -- 每个进程都有一个调度策略,缺省策略为 SCHED_OTHER 的进程还具有nice、priority 和counter 的附加属性。 参见sched_setscheduler(2)以了解更多信息。 ? limits -- 每个进程的资源限制(参见下文)。 ? filesystem root -- 进程角度的根文件系统起始处;参见see chroot(2)。 嵌入式Linux 系统的开发指南 参阅<嵌入式Linux 系统的研究及其在串口通信中的应用> Linux 系统内核的分析:Linux 系统使用了单一内核结构,即操作系统中所 有的系统相关功能都被封装在内核中。程序通过一套称作系统调用(System Call) 的界面访问内核结构。在 Linux 中,可以动态装入和卸载内核中的部分模块。 Linux 内核由5 个 部分组成:进程管理、内存管理、文件系统管理、进程间通 信和网络接口。 开发环境的建立: Linux 下建立交叉编译器,在Windows 操作系统中用ADS 开发工具实现启动程序,在Linux 操作系统下,用交叉编译器进行Linux 内核、库函数及应用程序的编译。 嵌入式系统中,Boot Loader 是在操作系统内核或用户应用程序运行之前运 行一段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软 硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准 备好正确的环境。大多数BootLoader 都包含2 种不同的操作模式:启动加载 (BootLoading)模式和下载(DownLoading)模式。 内核的初始化分为以下几个阶段: (1)内核的入口stext。 stext 是BootLoader 所调用的内核入口,从stext 进入后,将完成一些针对程 序运行环境的建立。 (2)内核的初始化函数start_kernel。 start_kernel 是内核初始化的主体。在调用这个函数的时候,系统已经有了一 个初始化的页目录表和堆栈。 (3)内核的初始化线程init。 在start_kernel 中,通过创建了一个内核进程来执行init 函数,进行初始化。 (4)系统的初试化程序 编译内核需要3 个步骤,分别是创建内核依赖关系、创建内核镜像文件和创 建内核模块。命令依次为:make dep,make zImage,make modules。 编译完成以后,会生成镜像文件arch/arm/boot/zImage,把这个文件下载到开 发板上,就会看到Linux2.6 的内核启动信息,即完成了Linux2.6 内核移植的第 一步。 使用Linux 自身的配置工具,编译定制内核。根据功能对内核进行剪裁 根文件系统的作用是存放了各种工具、应用程序、init 程序、必需的库和需 要加载的模块。 ARM公司的编译工具RVCT(Realview Compilation Tools)是业界最优化的 ARM编译器。在开发基于ARM Linux的系统时,用户可以使用GNU工具编译Linux内核,而将Linux上层应用代码的编译工作交给RVCT来完成,从而享受到RVCT高效的代码强优化功能。 用户可以在Codesourcery的官方网站(http://www.codesourcery.com/gnu_toolchains/arm)下载到复合ARM ABI标准的Codesourcery GNU工具链。 Cygwin一个Linux-like environment for Windows. http://www.cygwin.com/ Cygwin is a Linux-like environment for Windows. It consists of two parts:
|
阅读(305) | 评论(0) | 转发(0) |
0
上一篇:linux中oracle的日常维护命令
下一篇:程序员,DBA,架构师,项目管理,一个都不能少!
相关热门文章
欢迎vivova在ChinaUnix博客安...
欢迎zl780418在ChinaUnix博客...
欢迎qq12340000在ChinaUnix博...
欢迎letwudpobgn在ChinaUnix博...
欢迎thxtbmytjor在ChinaUnix博...
linux 常见服务端口
【ROOTFS搭建】busybox的httpd...
xmanager 2.0 for linux配置
什么是shell
linux socket的bug??
windows有发展前景吗
谁能够帮我解决LINUX 2.6 10...
现在的博客积分不会更新了吗?...
shell怎么读取网页内容...
ssh等待连接的超时问题...
给主人留下些什么吧!~~
评论热议
请登录后评论。
登录 注册
关于我们 | 关于IT168 | 联系方式 | 广告合作 | 法律声明 | 免费注册
Copyright 2001-2010 ChinaUnix.net All Rights Reserved 北京皓辰网域网络信息技术有限公司. 版权所有
感谢所有关心和支持过ChinaUnix的朋友们
京ICP证041476号 京ICP证060528号
相关文章推荐
- 如何成为一个linux开发人员
- 如何成为一个linux开发人员
- 如何成为一个linux开发人员
- 如何成为一个偷懒又高效的Android开发人员
- 一步一步成为一个Linux开发人员
- 如何成为一个偷懒又高效的Android开发人员
- 如何成为一个偷懒又高效的Android开发人员
- 如何成为一个偷懒又高效的Android开发人员
- 如何成为一个偷懒又高效的Android开发人员
- 如何成为一个偷懒又高效的Android开发人员
- 如何成为一个偷懒又高效的Android开发人员
- 如何成为一个偷懒又高效的Android开发人员
- 如何成为一个偷懒又高效的Android开发人员
- 如何成为一个偷懒又高效的Android开发人员
- 如何成为一个真正的程序开发人员
- 如何成为一个偷懒又高效的Android开发人员
- 如何成为优秀开发人员[5]:正确地做事(概述)
- 如何成为一个Linux内核开发者
- 如何成为优秀的开发人员(转)
- 如何成为优秀开发人员[3]:设定个人发展目标和计划