《Linux系统基础知识.docx》由会员分享,可在线阅读,更多相关《Linux系统基础知识.docx(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Linux系统基础知识 Linu_是一套免费运用和自由传播的类Uni_操作系统,严格的来讲,Linu_ 不算是一个操作系统,只是一个 Linu_ 系统中的内核,即计算机软件与硬件通讯之间的平台。下面就让我带你去看看Linu_系统基础学问,希望能帮助到大家! 整理了Linu_全套自学教程! 为什么要用Linu_? Linu_极其强大,可以让聪慧人干任何他们想干的事情。 Linu_ 从诞生之日起,它的工作方式就比 Windows 的先进。 Linu_ 属于能英勇面对符号的人。只有符号才能完全操纵计算机。 欧美发达国家的传统科研单位、黑客们从几十年前就从事这些行当了,运用Linu_/Uni_的习惯持
2、续至今。 鼠标虽然是很好的工具,但是它的表达实力是有限的。 你不行能光用鼠标就让电脑完全明白你的意思,它终归只有3个按钮。所以我们虽然很喜爱鼠标,但是却不能完全依靠它。 娴熟的Linu_黑客可以很快敲出一行吩咐,组合系统里面的各种工具来完成一个任务。许多工具本身就是一个黑客工具,压根就没考虑windows用户们,在图形界面下用起来反而特别麻烦。图形界面的优势是数据展示方式多样,劣势是从运用者的角度看,它混淆了数据展示和数据本身。 在Linu_大量工作抽象地看是这样的: 把一堆数据扔进一个程序,得到另一堆数据,再扔进另一个程序 不用关切数据展示,它要的是数据本身。 什么是 Windows 能干而
3、 Linu_ 干不了的事情? “Windows 能干而 Linu_ 干不了的事情,那就是不须要干的事情。” 几乎全部科学计算程序,EDA 程序,高性能图像处理程序都不是基于 Windows 的。 消退学计算机很难的幻觉,英勇的拿起像 bash, FVWM, Te_, VIM, Emacs, Mutt 这样强大的程序,英勇的面对符号。不要再埋怨“Linu_ 为什么不能像 Windows 那样”,不要再奢侈时间试用这样那样的程序,不要再忙着升级。你须要理解 UNI_ 的工作方式,因为那是大多数科学家的工作方式。 Linu_运维学习路途,好用Linu_教程,举荐学习保藏 Linu_操作系统在短短的几
4、年之内得到了特别迅猛的发展,这与linu_具有的良好特性是分不开的。Linu_包含了UNI_的全部功能和特性。简洁来说,linu_具有以下主要特性:遵循GNU GPL,开放性,多任务,多用户,设备独立性,供应了丰富的网络功能,牢靠的系统平安,良好的可移植性。下面给大家说说Linu_运维学习路途,好用LINU_教程举荐大家学习保藏。 关于Linu_运维学习许多人都有自己不同的理由,我们不妨来分析一下: Linu_是免费的不用花一分钱,能够节约大笔的成本; Linu_是开源的,你可以依据自已的须要修改源代码; Linu_是开放的,有广泛的社区,关于Linu_的探讨要远远高于windows操作系统;
5、 学习Linu_可以更好的驾驭计算机技术; Linu_是将来发展的趋势,服务器,手机,掌上电脑,平板机许多都采纳Linu_操作系统; Linu_有特别多的发行版本,你可以依据须要做出不同的选择; Linu_让你多了一个选择,而且Linu_下的病毒相比Window可以忽视不计; Linu_是一种自由哲学,一种开源的信仰; 最终Linu_很好玩,可以装逼,哈哈 我觉得我有必要把我学习linu_的基础的阅历共享一下: 1、驾驭Linu_基础 俗话说“思则有备,有备无患”,学习之前你先要搭建好学习环境(红帽RHEL7)然后在虚拟机安装它,起先运用它。学习Linu_,吩咐运用是学习的前提,就像你和外国人
6、说话就得说英语不然别人怎么知道你说的是什么。例如: 吩咐名,选项,各个参数都作为吩咐的输入项,都是独立的项,他们之间必需用空格隔开。Linu_中吩咐格式如下: 吩咐名 【选项】 【参数1】 【参数2】 学习Linu_,要娴熟驾驭吩咐的运用,虽然吩咐多,但是熟能生巧,在以后的学习运用中能大大节约你的时间。还有学习linu_切不行马虎大意,往往一个小小的空格也会报错,当然在linu_中,大小写是很敏感的,切记! 2、从基础入手,切勿眼高手低 linu_假如一旦学习一段时间之后你会发觉其实也没想象中那么难,甚至比windows更简洁已操作,通常认为GLI没有GUL那么方面用户操作。因为吩咐行界面的软
7、件通常须要用户记忆操作来完成吩咐,但是,由于其本身的特点,吩咐行界面要较图形用户界面节约计算机系统的资源。所以,熟记吩咐的前提下,运用吩咐行界面往往要较运用图形用户界面的操作速度要快,这也是你以后玩转Linu_的基本条件之一。 3、多总结,勤思索,多记笔记 假如想学好Linu_系统学问,不是一天两天就能学会的,也是经过一朝一夕,渐渐积累的,这个过程中要学会去总结,多思索,多动手去练,去实践,在理解的基础上去记忆,把原理搞懂,把重要的学问点积累下来,以便在以后的工作中便利查找,当做查询手册,同时也能熬炼我们编写文档的实力,对以后都是有很大帮助的。 4、刚好充电,提高自学实力 要具备良好的自学实力
8、,除了老师讲的,你还要去考虑老师的学问点还可以怎样去扩充,这时候一本好的资料书就特别必要了,把这些基础的都学会了,建议你再去深化学习Linu_进阶技术,不断的去提高自己。 以上也只是我个人学习阅历所谈,希望我的学习阅历可以帮助到像我原来这样的新手。学好linu_基础要扎实,切不行好高骛远,踏踏实实的去练习思索。指尖和思维的跳动才能跳出linu_的华尔兹! Linu_系统零基础编程入门,想当大神?这些你都要学 ? 文件和文件系统 文件是Linu_系统中最重要的抽象,大多数状况下你可以把linu_系统中的任何东西都理解为文件,许多的交互操作其实都是通过文件的读写来实现的。 ? 文件描述符 在Lin
9、u_内核中,文件是用一个整数来表示的,称为 文件描述符,通俗的来说,你可以理解它是文件的id(唯一标识符) ? 一般文件 ? 一般文件就是字节流组织的数据。 ? 文件并不是通过和文件名关联来实现的,而是通过关联索引节点来实现的,文件节点拥有文件系统为一般文件安排的唯一整数值(ino),并且存放着一些文件的相关元数据。 ? 书目与链接 ? 正常状况下文件是通过文件名来打开的。 ? 书目是可读名称到索引编号之间的映射,名称和索引节点之间的配对称为链接。 ? 可以把书目看做一般文件,只是它包含着文件名称到索引节点的映射(链接) ? 进程 进程是仅次于文件的抽象概念,简洁的理解,进程就是正在执行的目标
10、代码,活动的,正在运行的程序。不过在困难状况下,进程还会包含着各种各样的数据,资源,状态甚至虚拟计算机。 你可以这么理解进程:它是竞争计算机资源的基本单位。 ? 进程、程序与线程 ? 程序 程序,简洁的来说就是存在磁盘上的二进制文件,是可以内核所执行的代码 ? 进程 当一个用户启动一个程序,将会在内存中开启一块空间,这就创建了一个进程,一个进程包含一个独一无二的PID,和执行者的权限属性参数,以及程序所需代码与相关的资料。 进程是系统安排资源的基本单位。 一个进程可以衍生出其他的子进程,子进程的相关权限将会沿用父进程的相关权限。 ? 线程 每个进程包含一个或多个线程,线程是进程内的活动单元,是
11、负责执行代码和管理进程运行状态的抽象。 线程是独立运行和调度的基本单位。 ? 进程的层次结构(父进程与子进程) 在进程执行的过程中可能会衍生出其他的进程,称之为子进程,子进程拥有一个指明其父进程PID的PPID。子进程可以继承父进程的环境变量和权限参数。 于是,linu_系统中就诞生了进程的层次结构进程树。 进程树的根是第一个进程(init进程)。 ? 过程调用的流程:fork & e_ec 一个进程生成子进程的过程是,系统首先复制(fork)一份父进程,生成一个暂存进程,这个暂存进程和父进程的区分是pid不一样,而且拥有一个ppid,这时候系统再去执行(e_ec)这个暂存进程,让他加
12、载实际要运行的程序,最终成为一个子进程的存在。 ? 进程的结束 当一个进程终止时,并不会马上从系统中删除,内核将在内存中保存该进程的部分内容,允许父进程查询其状态(这个被称为等待终止进程)。 当父进程确定子进程已经终止,该子进程将会被彻底删除。 但是假如一个子进程已经终止,但父进程却不知道它的状态,这个进程将会成为 僵尸进程 ? 服务与进程 简洁的劝服务(daemon)就是常驻内存的进程,通常服务会在开机时通过init.d中的一段脚本被启动。 ? 进程通信 进程通信的几种基本方式:管道,信号量,消息队列,共享内存,快速用户控件互斥。 ? 程序,进程和线程 现在我们再次具体的探讨这三个概念 ?
13、程序(program) 程序是指编译过的、可执行的二进制代码,保存在储存介质上,不运行。 ? 进程(process) 进程是指正在运行的程序。 进程包括了许多资源,拥有自己独立的内存空间。 ? 线程 线程是进程内的活动单元。 包括自己的虚拟储存器,如栈、进程状态如寄存器,以及指令指针。 在单线程的进程中,线程即进程。而在多线程的进程中,多个线程将会共享同一个内存地址空间 ? 运行一个进程 创建一个进程,在uni_系统中被分为了两个流程。 把程序载入内存并执行程序映像的操作:e_ec 创建一个新进程:fork ? e_ec ? 最简洁的e_ec系统调用函数:e_ecl() 函数原型: int e
14、_ecl(const char _ path,const chr _ arg,.) e_ecl()调用将会把path所指的路径的映像载入内存,替换当前进程的映像。 参数arg是以第一个参数,参数内容是可变的,但最终必需以NULL结尾。 举例: int ret;ret = e_ecl("/bin/vi","vi",NULL);if (ret = -1) perror("e_ecl"); 上面的代码将会通过/bin/vi替换当前运行的程序 留意这里的第一个参数vi,是uni_系统的默认惯例,当创建、执行进程时,shell会把路径中的最终部
15、分放入新进程的第一个参数,这样可以使得进程解析出二进制映像文件的名字。 int ret;ret = e_ecl("/bin/vi","vi","/home/mark/a.t_t",NULL);if (ret = -1) perror("e_ecl"); 上面的代码是一个特别有代表性的操作,这相当于你在终端执行以下吩咐: vi /home/mark/a.t_t 返回值: 正常状况下其实e_ecl()不会返回,调用胜利后会跳转到新的程序入口点。 胜利的e_ecl()调用,将变更地址空间和进程映像,还变更了许多进程的其他
16、属性。 不过进程的PID,PPID,优先级等参数将会被保留下来,甚至会保留下所打开的文件描述符(这就意味着它可以访问全部这些原本进程打开的文件)。 失败后将会返回-1,并更新errno。 其他e_ec系函数 略,运用时查找 ? fork 通过fork()系统调用,可以创建一个和当前进程映像一模一样的子进程。 函数原型 pid_t fork(void) 调用胜利后,会创建一个新的进程(子进程),这两个进程都会接着运行。 返回值 假如调用胜利, 父进程中,fork()会返回子进程的pid,在子进程中返回0; 假如失败,返回-1,并更新errno,不会创建子进程。 举例 我们看下面这段代码 #inc
17、lude #include int main () pid_t fpid; /fpid表示fork函数返回的值 int count=0; printf("this is a processn"); fpid=fork(); if (fpid < 0) printf("error in fork!"); else if (fpid = 0) printf("i am the child process, my process id is %dn",getpid(); printf("我是爹的儿子n"); cou
18、nt+; else printf("i am the parent process, my process id is %dn",getpid(); printf("我是孩子他爹n"); count+; printf("统计结果是: %dn",count); return 0; 这段代码的运行结果比较奇妙,是这样的: this is a processi am the parent process, my process id is 21448我是孩子他爹统计结果是: 1i am the child process, my proce
19、ss id is 21449我是爹的儿子统计结果是: 1 在执行了fork()之后,这个程序就拥有了两个进程,父进程和子进程分别往下接着执行代码,进入了不同的if分支。 如何理解pid在父子进程中不同? 其实就相当于链表,进程形成了链表,父进程的pid指向了子进程的pid,因为子进程没有子进程,所以pid为0。 写时复制 传统的fork机制是,调用fork时,内核会复制全部的内部数据结构,复制进程的页表项,然后把父进程的地址空间按页复制给子进程(特别耗时)。 现代的fork机制采纳了一种惰性算法的优化策略。 为了避开复制时系统开销,就尽可能的削减“复制”操作,当多个进程须要读取他们自己那部分资
20、源的副本时,并不复制多个副本出来,而是为每个进程设定一个文件指针,让它们读取同一个实际文件。 明显这样的方式会在写入时产生冲突(类似并发),于是当某个进程想要修改自己的那个副本时,再去复制该资源,(只有写入时才复制,所以叫写时复制)这样就削减了复制的频率。 ? 联合实例 在程序中创建一个子进程,打开另一个应用。 pid_t pid;pid = fork();if (pid = -1) perror("fork");/子进程if (!pid) const char _ args = "windlass",NULL; int ret; / 参数以数组方式传入
21、 ret = e_ecv("/bin/windlass",args); if (ret = -1) perror("e_ecv"); e_it(E_IT_FAILURE); 上面的程序创建了一个子进程,并且使子进程运行了/bin/windlas程序。 ? 终止进程 ? e_it() 函数原型 void e_it (int status) 该函数用于终止当前的进程,参数status只用于标识进程的退出状态,这个值将会被传送给当前进程的父进程用于推断。 还有一些其他的终止调用函数,在此不赘述。 假如你也很想学编程,可以来我的C语言/C+编程学习基地【Q群:1083154082】! 还有(源码,零基础教程,项目实战教学视频)!带你入个门还是简简洁单啦 涉及:嬉戏开发、课程设计、常用软件开发、编程基础学问、黑客等等. Linu_系统基础学问本文来源:网络收集与整理,如有侵权,请联系作者删除,谢谢!第17页 共17页第 17 页 共 17 页第 17 页 共 17 页第 17 页 共 17 页第 17 页 共 17 页第 17 页 共 17 页第 17 页 共 17 页第 17 页 共 17 页第 17 页 共 17 页第 17 页 共 17 页第 17 页 共 17 页