当然最重要是爱好和兴趣!如果你这种必要学,或者根本不喜欢,请不要浪费时间,你学也学不好!
二.起步
你应该为自己创造一个学习linux的环境--在电脑上装一个linux或unix
如何选择版本:北美用redhat,欧洲用SuSE,桌面mandrake较多,而debian是技术最先进的linux开发人员中用debian的最多,其次是redhat,从全球linux各应用领域市场份额来看无疑redhat是最多的,此外还有很多出名的发行版本,不再列举。
对于初学linux的人来说,我建议是使用redhat,原因如下:
1)现在很多书都是以redhat为例讲的,为了与书本协调一致
2)周围的人都用redhat,交流比较方便
3)redhat应用范围广,有典型性和代表性
4)它易于使用和安装,我们没有必要把时间浪费在“装系统”上而应集中精力学习最有用的东西。
【注】现在觉得RH很死板,AS,ES等用在服务器上或许不错,Personal desktop用mandrake,debian,suse都不错,笔者现在用Mandrake,因为她长得漂亮:)
如果你并不打算深入学习linux,而是有诸如适应北京市政府办公平台迁移到linux上这种需要,那么中软,红旗等中文linux是不错的选择
我强烈建议:自己亲自动手把linux装到你的硬盘上,你必须学会独立安装linux系统的技能,对于现在的版本来说,其实跟装WinXP一样简单
从此现在开始,请不要以windows的工作方式来考虑问题,应该尝试挖掘linux身上的“天才unix”的气质。
三.进阶
掌握至少50个以上的常用命令
理解shell管道"|",文件流重定向">"及追加">>"等
熟悉Gnome/KDE等X-windows桌面环境 *** 作
掌握.tgz.rpm.biz等软件包的常用安装方法
学习添加外设,安装设备驱动程序(比如modem)
熟悉Grub/Lilo引导器及简单的修复 *** 作
熟悉系统固有目录的名称及公用
学会用mount命令访问其他文件系统
了解vi,gcc,gdb等常用编辑器,编译器,调试器
学习linux环境下的简单组网
建议:买一本不需要太厚的linux教材,大致可以满足要求(现在的书越来越多了,还带很多图,我当时可没这么多书)
四.高级应用
澄清一些概念:linux的普通 *** 作与真正的系统管理不能相提并论,后者需要很多知识
1.英语
即使你不学linux,我也强烈建议你学好英文[U.S.english]。因为实质上计算机语言就是英文和字符,所谓的多国语言只是外部包装。你必须能无障碍的阅读大量的英文技术文档在搜索引擎找到的英文网站和网页中熟练的检索最好能有用英文直接交流的能力,摆脱了这个障碍,你的学习和理解速度就能快很多,你就有机会拉开和别人的差距。
2.shell[sed/awk]
shell是命令解释器,是内核与用户界面交流通道,shell写的小脚本有点类似于win下的.bat但shell比.bat强大的多,shell不只是解释命令,更是一种编程语言,有时候几百行的c用shell几十行就能代替完成工作,因为shell的工作方式建立在系统已有的众多应用程序之上
这也是CS中的一个重要思想。此外,shell可以实现工作自动化,这个概念也比较重要sed,awk用来处理文本,历来很常用。
3.Perl/PHP
漂亮的脚本, CGI的首选,比ASP好,应用面很广
4.C\C++
C、C++是linux/unix的核心语言,系统代码都是C写的
5.ASM
系统底层及内核,硬件,设备驱动程序,嵌入式开发都需要。//走核心路线的话,c\c++,asm最重要
6.Java,Python,Tcl,XML
五、系统管理篇
在熟悉linux的基础上还需要掌握至少一种unix。我首推Solaris,其次是FreeBSD比如运营级系统一般是Solaris+Oracle/DB2之类的学习apache、ssh、sendmail/Qmail、proftp/vsftp、Samba、Squid、MySQL/PostgreSQL/Oracle、Bind等各种应用服务器的构架及电子商务的应用熟悉TCP/IP协议族,学习诸如apache+php+proftp+mysql+quota的实现以及大型局域网,分布式集群等各种企业级应用解决方案熟悉多用户管理,数据库管理,文件系统,逻辑存储管理,日志分析,备份与灾难数据修复系统补丁,内核升级,以及在此基础上的防火墙构架等以保障系统安全在内的各种系统管理技能。
我觉得,如果在此基础上再掌握路由/交换设备便是一个不错的系统管理员
各种基于linux的解决方案可参考相关书籍和文献,必要时用google或各大linux站点站内搜索引擎寻找最新文档,以避免错误和漏洞有几本技术大全和技术内幕我认为都是这方面不错的书
六、深入学习linux
我个人理解的读linux内核需要的基础:在此之前,希望先把应用层的东西学一下,那样会比较好理解
1.C
如果学过潭浩强的大学教科书(除了编几个数学模型好像什么也做不了的那种),建议再看一下《The C Programming Language》Second Edition这本圣经(如果想学缓冲区溢出,这点C的功力可能是不够的,还有<C陷阱与缺陷>,<C专家编程>,<C\C++深层探索>,反正经典书看多了是没有坏处的)
2.asm (AT&T语法,保护模式)
保护模式下的比较复杂,基本上每本讲内核的书都会有介绍有80x86 Intel语法的基础就行,
有兴趣可以看看Intel的官方网站
3.数据结构(离散数学)
计算机专业的核心课程,重要性我就不说了
4. *** 作系统原理
看懂这个再去读linux吧
5.微机原理/组成原理(数字电路)
底层直接和硬件打交道,所以这个也要
6.了解linux/unix
我想至少你要会 *** 作吧,了解unix的API
7.软件工程/编译原理
这方面的经典书去www.china-pub.com可以搜到很多我觉得APUE这种书不适合初学者,还是先看看UPE
前言一、open与fopen、close与fclose使用区别
二、read与fread、write与fwrite使用区别
三、lseek与fseek使用
四、creat、fgetc、fputc、feof使用
前言
这是在学习Linux文件系统编程时记录的学习心得、
从来源的角度看,open等函数和fopen等函数有所不同:
open是LUNIX系统调用函数,返回文件描述符(File Descriptor),它是文件在文件描述符表里的索引。
fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核api。返回的是一个指向文件结构的指针。
从移植角度:fopen是C标准函数,有良好的移植性;而open是LUNIX系统调用,移植性有限。如windows下相似的功能使用API函数`CreateFile`。
从适用范围:open返回文件描述符,LUNIX下的一切设备都是以文件的形式 *** 作。如网络套接字、硬件设备等。当然包括 *** 作普通正规文件(Regular File)。fopen是用来 *** 纵普通正规文件(Regular File)
从缓冲角度:open无缓冲,fopen有缓冲。缓冲文件系统是借助文件结构体指针来对文件进行管理,通过文件指针来对文件进行访问。缓冲就是先对缓冲区 *** 作,然后再对文件 *** 作。比如执行写文件的 *** 作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满再写入文件。非缓冲文件系统依赖于 *** 作系统,通过 *** 作系统的功能对文件进行读写,是系统级的输入输出
一、open与fopen、close与fclose使用区别
open和close搭配使用,fopen和fclose搭配使用
int open(const char *pathname, int flags)
FILE *fopen(const char *path, const char *mode)
open函数返回文件描述符号,是文件的索引,fopen返回文件的指针,通过文件指针来访问
int close(int fd)
int fclose(FILE *fp)
二者使用方式大同小异
二、read与fread、write与fwrite使用区别
ssize_t read(int fd, void *buf, size_t count)
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
ssize_t write(int fd, const void *buf, size_t count)
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream)
ptr就是缓冲区,fwrite从缓冲区数据写入文件,fread从文件读到缓冲区
read、write返回值是读写的字节大小,fread、fwrite返回值取决于第三个参数:读写次数
三、lseek与fseek使用
off_t lseek(int fd, off_t offset, int whence)
int fseek(FILE *stream, long offset, int whence)
二者使用相同,int whence有三种位置:
SEEK_SET光标指向头部,SEEK_CUR光标指向当前位置,SEEK_END光标指向尾部
offset相对于位置的偏移量,偏移量负数往前移,正数往后移
lseek(fd,0,SEEK_END)利用它的返回值,计算文件大小
四、creat、fgetc、fputc、feof使用
int creat(const char*pathname,mode_t mode)
绝对路径 模式:宏表示 数字
S_IRUSR 4 可读
S_IWUSR 2 可写
S_IXUSR 1 可执行
S_IRWXU 7 可读、写、执行
int fputc(int c, FILE *stream)
写入一个字符到fp文件流中,写多个字符可采用循环一个一个写
int fgetc(FILE *stream)
从文件中得到一个字符,可以循环一个一个得到字符,配合feof
int feof(FILE *stream)
判断是否到达文件流末端,未到达末端返回值是0,到达末端返回值是非0
do
{
c = fgetc(fp)
if( feof(fp) )
{
break
}
printf("%c", c)
}while(1)
复制
参考文章:https://www.cnblogs.com/NickyYe/p/5497659.html
linux
c语言
Linux程序设计:文件I/O系统调用、open函数、creat函数
258阅读·0评论·2点赞
2020年9月3日
文件的顺序读写和随机读写,fgetc、fgets、fputc、fputs、fscanf、fprintf、fread、fwrite等等函数的介绍
367阅读·0评论·2点赞
2022年7月22日
Linux—— *** 作文件的系统调用(open、write、read、close)
245阅读·0评论·0点赞
2022年10月15日
Linux应用编程之fopen()、fclose()、fread()、fwrite()函数
2882阅读·0评论·2点赞
2022年4月22日
Linux文件系统【02】creat,open,close,read,write,lseek;ioctl,fcntl,dup,dup2,自定义创建文件命令
542阅读·0评论·0点赞
2022年3月21日
Linux的系统调用open,write,read,close,及相关总结
880阅读·0评论·0点赞
2018年4月20日
linux 系统调用open和close介绍以及作用和调用关系的理解
451阅读·0评论·0点赞
2022年10月11日
fopen() 与 CreateFile() *** 作文件
1209阅读·0评论·0点赞
2011年11月14日
文件描述符,Linux *** 作系统文件的系统调用 open read write close
734阅读·0评论·0点赞
2022年5月17日
【Linux】文件 *** 作(open/read/write/close)、系统调用与库函数的区别
4273阅读·0评论·5点赞
2019年5月19日
Linux 1.文件编程(open、creat、write、read、lseek)
412阅读·0评论·0点赞
2021年8月16日
Linux文件 *** 作函数open、read、 write、lseek、ftruncate(linuxC编程篇)
1003阅读·1评论·2点赞
2021年5月17日
Centos安装python遇到ln: failed to create symbolic link ‘/usr/bin/python’: File exists
2365阅读·0评论·2点赞
2020年9月9日
【Linux】文件 *** 作函数 fopen、fwrite、fread、fclose、fseek 与 open、write、read、close、lseek
482阅读·0评论·0点赞
2021年8月10日
open、fopen与freopen
1317阅读·0评论·0点赞
2015年11月18日
linux下 c语言 用write open二进制写文件,fread与read的区别---open和fopen的区别--fread函数和fwrite函数...
174阅读·0评论·0点赞
2021年5月17日
LinuxC open() umask close() read() write() lseek() fcntl() ioctl() mmap() ext2 stat() dup() dup2()
49阅读·0评论·0点赞
2021年8月18日
Linux文件系统(四)—— open &read &write &poll
2007阅读·0评论·0点赞
2021年12月1日
python3 文件 *** 作(列出、创建、删除、复制) 文件打开模式
1037阅读·2评论·0点赞
2020年11月6日
去首页
看看更多热门内容
Linux *** 作系统的基础知识并不是很难理解,熟悉掌握基础知识能更好的学习Linux。下面由我为大家整理了Linux *** 作系统的知识点总结的相关知识,希望对大家有帮助!
Linux *** 作系统的知识点总结1. *** 作系统总体介绍
•CPU: 就像人的大脑,主要负责相关事情的判断以及实际处理的机制。
查询指令: cat /proc/cpuinfo
•内存: 大脑中的记忆区块,将皮肤、眼睛等所收集到的信息记录起来的地方,以供CPU进行判断。查询指令: cat /proc/meminfo
物理内存
物理内存,就是我们将内存条插在主板内存槽上的内存条的容量的大小。看计算机配置的时候,主要看的就是这个物理内存
虚拟内存
Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。
关系:windows中虚拟内存和物理内存可能都会被使用,Linux中,只有物理内存使用完了,才会使用虚拟内存
•硬盘: 大脑中的记忆区块,将重要的数据记录起来,以便未来再次使用这些数据。
查询指令: fdisk -l (需要root权限)
Linux *** 作系统的知识点总结2.内存和硬盘的关系
具体命令后面会介绍
Linux *** 作系统的知识点总结3. *** 作系统监控命令>单独写一份
•vmstat
•sar
•iostat
•top
•free
•uptime
•netstat
•ps
•strace
•lsof
Linux *** 作系统的知识点总结4.如何分析 *** 作系统
实际流程: 读数据》数据>硬盘》虚拟内存(swaP)》内存》cpu缓存》执行队列
分析方向,正好相反
Linux *** 作系统的知识点总结4.各个部分常出现的漏洞
•CPU: 容易出现该类瓶颈的邮件服务器、动态web服务器
•内存: 容易出现该类瓶颈的打印服务器、数据库服务器、静态web服务器
•磁盘I/O: 频繁读写 *** 作的项目
•网络带宽: 频繁大量上传下载项目
Linux *** 作系统的知识点总结5.linux本身的一些优化
1. 系统安装优化
当安装linux系统时,磁盘划分、 SWAP内存的分配都直接影响系统性能。对于虚拟内存SWAP的设定,现在已经没有了所谓虚拟内存是物理内存两倍的要求,但是根据经验,如果内存较小(物理内存小于4GB),一般设置SWAP交换分区大小为内存的2倍如果物理内存大约4GB小于16GB,可以设置SWAP大小等于或者略小于物理内存即可如果内存在16GB以上,原则上可以设置SWAP为0,但最好设置一定大小的SWAP
• 2. 内核参数优化
例如,如果系统部署的Oracle数据库应用,那么就需要对系统共享内存段( kernel.shmmax, kenerl.shmmni, kernel.shmall)、
系统信号量( kernel.sem)、文件句柄( fs.file0max)等参数进行优化设置如果部署的WEB应用,那么就需要根据web应用特性进行网络参数的优化,例如修改net.ipv4.ip_local_port_range、net.ipv4.tc_tw_reuse、 net.core.somaxconn等网络
内核参数
• 3. 文件系统优化
在linux下可选的文件系统有ext2,、 ext3、 xfs、 ReiserFS
linux标准文件系统是从VFS开始,然后ext、 ext2, ext2是linux上的标准文件系统, ext3是在ext2基础上增加日志形成的。从VFS到ext3,设计思想没有太大变化,都是早期UNIX家族基于超级块和inode的设计理念设计而成。XFS文件系统是SGI开发的一个高级日志文件系统,通过分布处理磁盘请求、定位数据、保持cache的一致性来提供对文件系统数据的低延迟、高带宽的访问,因此XFS极具伸缩性,非常健壮,具有优秀的日志记录功能、可扩展性强、快速写入等优点。ReiserFS在Hans Reiser领导下开发出来的一款高性能的日志文件系统,通过完全平衡树来管理数据,包括文件数据、文件名及日志支持等。与ext2、 ext3相比,最大的优点是访问性能和安全性大幅提升。具有高效、合理利用磁盘空间,先将的日志管理机制,特意的搜寻方式,海量磁盘存储等优点
Linux *** 作系统的知识点总结5.重点知识
物理内存和虚拟内存
1.如何查看物理内存和虚拟内存?
Top 命令可以查看物理内存和虚拟内存的数值
2.Buffer
是硬盘控制器上的一块内存芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器。由于硬盘的内部数据传输速度和外界介面传输速度不同,缓存在其中起到一个缓冲的作用。缓存的大小与速度是直接关系到硬盘的传输速度的重要因素,能够大幅度地提高硬盘整体性能。
3.Cache
CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度
4.CPU中断
当CPU执行完一条现行指令时,如果外设向CPU发出中断请求,那么CPU在满足响应的情况下,将发出中断响应信号,与此同时关闭中断,表示CPU不在受理另外一个设备的中断。这时,CPU将寻找中断请求源是哪一个设备,并保存CPU自己的程序计数器(PC)的内容。然后,他将转移到处理该中断源的中断服务程序。CPU在保存现场信息,设备服务(如交换数据)以后,将恢复现场信息。在这些动作完成以后,开放中断,并返回到原来被中断的主程序的下一条指令。
5.上下文切换
上下文切换(Context Switch) 或者环境切换
多任务系统中,上下文切换是指CPU的控制权由运行任务转移到另外一个就绪任务时所发生的事件。
在 *** 作系统中,CPU切换到另一个进程需要保存当前进程的状态并恢复另一个进程的状态:当前运行任务转为就绪(或者挂起、删除)状态,另一个被选定的就绪任务成为当前任务。上下文切换包括保存当前任务的运行环境,恢复将要运行任务的运行环境。
进程上下文用进程的PCB(进程控制块,也称为PCB,即任务控制块)表示,它包括进程状态,CPU寄存器的值等。
通常通过执行一个状态保存来保存CPU当前状态,然后执行一个状态恢复重新开始运行。
上下文切换会对性能造成负面影响。然而,一些上下文切换相对其他切换而言更加昂贵其中一个更昂贵的上下文切换是跨核上下文切换(Cross-Core Context Switch)。一个线程可以运行在一个专用处理器上,也可以跨处理器。由单个处理器服务的线程都有处理器关联(Processor Affinity),这样会更加有效。在另一个处理器内核抢占和调度线程会引起缓存丢失,作为缓存丢失和过度上下文切换的结果要访问本地内存。总之,这称为“跨核上下文切换”。
6.进程和线程
进程概念
进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位。
线程概念
线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。如果把进程理解为在逻辑上 *** 作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一
进程和线程的关系
(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。 (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
(3)处理机分给线程,即真正在处理机上运行的是线程。
(4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)