《linux的基本介绍和命令行》
【什么是Shell】
(1)简介:shell是一款保护内核的软件。bash是shell的一个版本。
性质:命令解析器
用途:接受用户命令
1)在计算机科学中,shell俗称壳(用来区别核),是指“提供使用者使用界面”的软件(命令解析器)。他类似于DOS和后来的cmd.exe。他接收用户命令,然后调用相应的应用程序。同时他又是一种程序设计语言。作为命令语言,他交互式解释和执行用户输入的命令,或者自动地解释和执行预先设定好的一连串命令;作为程序设计语言,他定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
2)文字操作系统与外部最主要的接口就叫shell。shell是操作系统最外面的一层。3)shell管理你与操作系统之间的交互:等待你的输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。
4)shell提供了你与操作系统之间的通讯的方式。这种通讯方式可以交互方式(从键盘输入,并且可以立即得到回应),或者以非交互(shell script)方式执行。shell script 是放在文件中的一串shell和操作系统命令,他们可以被重复使用。本质上shell script是命令行命令简单的组合到一个文件里面。
5)shell基本上是一个解析器,类似于DOS下的command.它接收用户命令(如ls等),然后调用相应的应用程序。较为通用的shell有标准的Bourne shell(sh)和C shell(csh)
(2)分类:
图形界面shell(Graphical User Interface shell 即GUI shell)
eg:应用最为广泛的Windows Exploree(微软的windows列操作系统)
广为人知的linux shell,包括X windows manager (BlackBox和FluxBox)
功能强大的CDE、GNOME、KDE、XFC
命令行式shell(Command Line Interface shell,即CLI shell)
eg: bash,sh,ksh,csh (Unix/linux系统)
DOS Shell (MS-DOS系统)
Windows PowerShell(支援.NET Framework技术的Windows NT 系统)
----Windows PowerShell----
Windows PowerShell是一种新的交互式的命令行和基于任务脚本编写技术,它使信息技术(IT) 管理员能够全面地自动操作和控制系统管理任务,从而提高了管理员的生产力。Windows PowerShell 包括多个系统管理实用工具、一致的语法和命名惯例、及对普通管理数据更好地导航,如登记、证书存储 或 Windows Management Instrumentation (WMI)。Windows PowerShell 还专门针对 IT 管理,提供直观的脚本编写语言。
Shell也是一个VB函数,它的作用是运行程序,语法是Shell(命令字符串[窗口类型])
传统意义上的shell是指命令行式的shell,不特别注明时一般shell就指命令行shell,命令行式shell又分为交互式shell,非交互式shell。
交互式shell:等待你的输入,并且执行你提交的命令。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。
非交互式shell:不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
(3)shell的类型
在UNIX中主要有:
Bourne shell (包括 sh,ksh, bash)
Bourne shell ( sh)
Korn shell ( ksh)
Bourne Again shell ( bash)
POSIX shell ( sh)
C shell (包括 csh and tcsh)
C shell ( csh)
TENEX/TOPS C shell ( tcsh)
----Bourne Shell----
首个重要的标准Unix Shell是1970年底在V7 Unix(AT&T第7版)中引入的,并且以它的创始科技部基础条件平台“国家气象网络计算应用节点建设”(2004DKA50730)资助者Stephen Bourne的名字命名。Bourne shell 是一个交换式的命令解释器和命令编程语言。Bourne shell 可以运行为login shell或者login shell的子shell(subshell)。只有login命令可以调用Bourne shell作为一个login shell。此时,shell先读取/etc/profile文件和$HOME/.profile文件。/etc/profile文件为所有的用户定制环境,$HOME/.profile文件为本用户定制环境。最后,shell会等待读取你的输入
----C Shell----
Bill Joy于20世纪80年代早期,在伯克利的加利福尼亚大学开发了C shell。它主要是为了让用户更容易的使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格。它新增了命令历史、别名、文件名替换、作业控制等功能。
----Korn Shell----
有很长一段时间,只有两类shell供人们选择,Bourne shell用来编程,C shell用来交互。为了改变这种状况,AT&T的bell实验室David Korn开发了Korn shell。ksh结合了所有的C shell的交互式特性,并融入了Bourne shell的语法。因此,Korn shell广受用户的欢迎。它还新增了数学计算,进程协作(coprocess)、行内编辑(inline editing)等功能。Korn Shell 是一个交互式的命令解释器和命令编程语言.它符合POSIX——一个操作系统的国际标准.POSIX不是一个操作系统,而是一个目标在于应用程序的移植性的标准——在源程序一级跨越多种平台。
----Bourne Again Shell (bash)----
bash是GNU计划的一部分,用来替代Bourne shell。它用于基于GNU的系统如Linux.大多数的Linux(Red Hat,Slackware,Caldera)都以bash作为缺省的shell,并且运行sh时,其实调用的是bash。
----POSIX Shell----
POSIX shell 是Korn shell的一个变种. 当前提供POSIX shell的最大卖主是Hewlett-Packard。在HP-UX 11.0,POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh.
各主要操作系统下缺省(指未经其他任何指令更改,程序或系统默认的设置)的shell:
AIX下是Korn Shell.
Solaris缺省的是Bourne shell.
FreeBSD缺省的是C shell
HP-UX缺省的是POSIX shell.
Linux是Bourne Again shell.
【内核kernel】
(一)概述
shell是和系统交流,保护系统重要的内核程序
内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。内核的分类可分为单内核和双内核以及微内核。严格地说,内核并不是计算机系统中必要的组成部分。
内核,是一个操作系统的核心。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、内核体系结构 内核体系结构设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
现代操作系统设计中,为减少系统本身的开销,往往将一些与硬件紧密相关的(如中断处理程序、设备驱动程序等)、基本的、公共的、运行频率较高的模块(如时钟管理、进程调度等)以及关键性数据结构独立开来,使之常驻内存,并对他们进行保护。通常把这一部分称之为操作系统的内核。
使用“两路”编号方法标注内核的开发:偶数号的内核版本是稳定的(如1.0,2.2,2.4,2.6),奇数号的内核版本(如1.1,2.3)是前沿的或者“发展中”的内核
(二)内核分类
----单内核----
单内核(Monolithic kernel),是个很大的进程。它的内部又能够被分为若干模块(或是层次或其他)。但是在运行的时候,它是个单独的二进制大映象。其模块间的通讯是通过直接调用其他模块中的函数实现的,而不是消息传递。 [8]
单内核结构在硬件之上定义了一个高阶的抽象界面,应用一组原语(或者叫系统调用)来实现操作系统的功能,例如进程管理,文件系统,和存储管理等等,这些功能由多个运行在核心态的模块来完成。
尽管每一个模块都是单独地服务这些操作,内核代码是高度集成的,而且难以编写正确。因为所有的模块都在同一个内核空间上运行,一个很小的bug都会使整个系统崩溃。然而,如果开发顺利,单内核结构就可以从运行效率上得到好处。
很多现代的单内核结构内核,如Linux和FreeBSD内核,能够在运行时将模块调入执行,这就可以使扩充内核的功能变得更简单,也可以使内核的核心部分变得更简洁。
单内核结构是非常有吸引力的一种设计,由于在同一个地址空间上实现所有低级操作的系统控制代码的复杂性的效率会比在不同地址空间上实现更高些。 单核结构正趋向于容易被正确设计,所以它的发展会比微内核结构更迅速些。传统的UNIX内核----例如伯克利大学发行的版本,Linux内核。
----微内核----
微内核(Microkernelkernel)结构由一个非常简单的硬件抽象层和一组比较关键的原语或系统调用组成,这些原语仅仅包括了建立一个系统必需的几个部分,如线程管理,地址空间和进程间通信等。
微核的目标是将系统服务的实现和系统的基本操作规则分离开来。例如,进程的输入/输出锁定服务可以由运行在微核之外的一个服务组件来提供。这些非常模块化的用户态服务器用于完成操作系统中比较高级的操作,这样的设计使内核中最核心的部分的设计更简单。一个服务组件的失效并不会导致整个系统的崩溃,内核需要做的,仅仅是重新启动这个组件,而不必影响其它的部分。
微内核将许多OS服务放入分离的进程,如文件系统,设备驱动程序,而进程通过消息传递调用OS服务。微内核结构必然是多线程的,第一代微内核,在核心提供了较多的服务,因此被称为‘胖微内核‘,它的典型代表是MACH。它既是GNU HURD也是APPLE SERVER OS的核心,可以说,蒸蒸日上.第二代为微内核只提供最基本的OS服务,典型的OS是QNX,QNX在理论界很有名,被认为是一种先进的OS。
微内核只提供了很小一部分的硬件抽象,大部分功能由一种特殊的用户态程序:服务器来完成。微核经常被用于机器人和医疗器械的嵌入式设计中,因为它的系统的关键部分都处在相互分开的,被保护的存储空间中。这对于单核设计来说是不可能的,就算它采用了运行时加载模块的方式。
微内核的例子:AIX,BeOS,L4微内核系列,.Mach中用于GNU Hurd和Mac OS X,Minix,MorphOS,QNX,RadiOS,VSTa。
----混合内核----
混合内核它很像微内核结构,只不过它的的组件更多的在核心态中运行,以获得更快的执行速度。混合内核实质上是微内核,只不过它让一些微核结构运行在用户空间的代码运行在内核空间,这样让内核的运行效率更高些。这是一种妥协做法,设计者参考了微内核结构的系统运行速度不佳的理论。然而后来的实验证明,纯微内核的系统实际上也可以是高效率的。大多数现代操作系统遵循这种设计范畴,微软公司开发的Windows操作系统就是一个很好的例子。另外还有XNU,运行在苹果Mac OS X上的内核,也是一个混合内核。混合内核的例子: BeOS 内核 ,DragonFly BSD,ReactOS 内核。Windows NT、Windows 2000、Windows XP、Windows Server 2003以及Windows Vista等基于NT技术的操作系统。
----外内核----
外内核系统,也被称为纵向结构操作系统,是一种比较极端的设计方法。外内核这种内核不提供任何硬件抽象操作,但是允许为内核增加额外的运行库,通过这些运行库应用程序可以直接地或者接近直接地对硬件进行操作。
它的设计理念是让用户程序的设计者来决定硬件接口的设计。外内核本身非常的小,它通常只负责系统保护和系统资源复用相关的服务。
传统的内核设计(包括单核和微核)都对硬件作了抽象,把硬件资源或设备驱动程序都隐藏在硬件抽象层下。比方说,在这些系统中,如果分配一段物理存储,应用程序并不知道它的实际位置。而外核的目标就是让应用程序直接请求一块特定的物理空间,一块特定的磁盘块等等。系统本身只保证被请求的资源当前是空闲的,应用程序就允许直接存取它。既然外核系统只提供了比较低级的硬件操作,而没有像其他系统一样提供高级的硬件抽象。那么就需要增加额外的运行库支持。这些运行库运行在外核之上,给用户程序提供了完整的功能。外核设计还停留在研究阶段,没有任何一个商业系统采用了这种设计。几种概念上的操作系统正在被开发,如剑桥大学的Nemesis,格拉斯哥大学的Citrix系统和瑞士计算机科学院的一套系统。麻省理工学院也在进行着这类研究。
【使用内核的优点】
----抽象隐藏----
内核提供一种硬件抽象的方法来完成对硬件操作,因为这些操作是非常复杂的,硬件抽象隐藏了复杂性,为应用软件和硬件提供了一套简洁,统一的接口,使程序设计更为简单。
----源代码管理----
历史上,从来没有出现过用于Linux内核的正式的源代码管理或修正控制系统。实际上,很多开发者实现了他们自己的修正控制器,但是并没有官方的LinuxCVS档案库,让LinusTorvalds检查加入代码,并让其他人可以由此获得代码。修正控制器的缺乏,常常会使发行版本之间存在“代沟”,没有人真正知道加入了哪些改变,这些改变是否能很好地融合,或者在即将发行的版本中哪些新内容是值得期待的。通常,如果更多的开发者可以像了解他们自己所做的改变一样了解到那些变化,某些问题就可以得到避免。
非常有必要使用一个实时的、集中的档案库来保存对Linux内核的最新更新。每一个被内核接受的改变或者补丁都被作为一个改变集被追踪。终端用户和开发者可以保存他们自己的源文件档案库,并根据需要可以通过一个简单的命令用最新的改变集进行更新。对开发者来说,这意味着可以始终使用最新的代码拷贝。测试人员可以使用这些逻辑的改变集合来确定哪些变化导致了问题的产生,缩短调试所需要的时间。甚至那些希望使用最新内核的用户也可以直接利用实时的、集中的档案库,因为一旦他们所需要的部件或缺陷修复加入到内核中,他们就可以马上进行更新。当代码融合到内核时,任何用户都可以提供关于这些代码的即时反馈和缺陷报告。
---- 并行开发----
随着Linux内核的成长,变得更加复杂,而且吸引更多开发者将注意力集中到内核的特定方面的专门开发上来,出现了另一个开发Linux方法的有趣改变。在2.3内核版本的开发期间,除了由LinusTorvalds发行的主要的一个内核树之外,还有一些其他的内核树。
在2.5的开发期间,内核树出现了爆炸式的增长。由于使用源代码管理工具可以保持开发的同步并行进行,这样就可能实现开发的部分并行化。为了让其他人在他们所做的改变被接受之前可以进行测试,有一些开发需要并行化。那些保持自己的树的内核维护者致力于特定的组件和目标,比如内存管理、NUMA部件、改进扩展性和用于特定体系结构的代码,还有一些树收集并追踪对许多小缺陷的纠正。
这种并行开发模型的优点是,它使得需要进行重大改变的开发者,或者针对一个特定的目标进行大量类似改变的那些开发者可以自由地在一个受控环境中开发,而并不影响其他人所用内核的稳定性。当开发者完成工作后,他们可以发布针对Linux内核当前版本的补丁,以实现到此为止他们所完成的改变。这样,社区中的测试人员就可以方便地测试这些改变并提供反馈。当每一部分都被证明是稳定的之后,那些部分可以单独地,或者甚至同时全部地,融合到主要Linux内核中。
linux内核的一个体系结构透视图:
VFS在用户和文件系统之间提供了一个交换层:
----代码覆盖分析----
新工具为内核提供了代码覆盖分析的功能。覆盖分析表明,在一个给定的测试运行时,内核中哪些行代码被执行。更重要的是,覆盖分析提示了内核的哪些部分还根本没有被测试到。这个数据是重要的,因为它指出了需要再编写哪些新测试来测试内核的那些部分,以使内核可以得到更完备的测试。
----大量信息----
在为将来的2.6Linux内核进行开发的过程中,除了这些自动化的信息管理方法之外,开放源代码社区的不同成员还收集和追踪了数量惊人的信息。
例如,在KernelNewbies站点上创建了一个状态列表,来保持对已经提出的内核新部件的追踪。这个列表包含了以状态排序的条目,如果它们已经完成了,则说明它们已经包含在哪个内核中,如果还没有完成,则指出还需要多长时间。列表上很多条目的链接指向大型项目的Web站点,或者当条目较小时,链接指向一个解释相应部件的电子邮件信息的拷贝。
【linux】
严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU (GNU计划,又称革奴计划,目标是创建一套完全自由的操作系统)工程各种工具和数据库的操作系统。
Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
(一)主要特性
----基本思想----
Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近
-----完全免费----
Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他的操作系统所做不到的。正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变,这让Linux吸收了无数程序员的精华,不断壮大。
----完全兼容POSIX1.0标准----(可移植操作系统接口Portable Operating System Interface,POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API(应用程序编程接口Application Programming Interfac)标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945)
这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。POSIX标准是由IEEE和ISO/IEC共同开发的标准系统。该标准基于当时现有的UNIX实践和经验,描述了操作系统的系统调用编程接口API,用于保证应用程序可以在源程序一级上在多种操作系统上移植运行。这些系统调用编程接口主要是通过C库(LIBC)来实现的。
----多用户、多任务----
Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现在电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行
----良好的界面----
Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作。在X-Window环境中就和在Windows中相似,可以说是一个Linux版的Windows。
----支持多种平台----
Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。2001年1月份发布的Linux 2.4版内核已经能够完全支持Intel 64位芯片架构。同时Linux也支持多处理器技术。多个处理器同时工作,使系统性能大大提高。
(二)桌面环境
----介绍----
在图形计算中,一个桌面环境(Desktop environment,有时称为桌面管理器)为计算机提供一个图形用户界面(GUI)。但严格来说窗口管理器和桌面环境是有区别的。桌面环境就是桌面图形环境,它的主要目标是为Linux/Unix操作系统提供一个更加完备 的界面以及大量各类整合工具和使用 程序,其基本 易用性吸引着大量的新用户。桌面环境名称来自桌面比拟,对应于早期的文字命令行界面(CLI)。一个典型的桌面环境提供图标,视窗,工具栏,文件夹,壁纸以及像拖放这样的能力。整体而言,桌面环境在设计和功能上的特性,赋予了它与众不同的外观和感觉。
----种类----
现今主流的桌面环境有KDE,gnome,Xfce,LXDE等,除此之外还有Ambient,EDE,IRIX Interactive Desktop,Mezzo,Sugar,CDE等。
(1)gnome
即GNU网络对象模型环境 (The GNU Network Object Model Environment),GNU计划的一部分,开放源码运动的一个重要组成部分。是一种让使用者容易操作和设定电脑环境的工具.目标是基于自由软件,为Unix或者类Unix操作系统构造一个功能完善、操作简单以及界面友好的桌面环境,他是GNU计划的正式桌面。
(2)Xfce
即XForms Common Environment,创建于2007年7月,类似于商业图形环境CDE,是一个运行在各类Unix下的轻量级桌面环境。原作者Olivier Fourdan最先设计XFce是基于XForms三维图形库。Xfce设计目的是用来提高系统的效率,在节省系统资源的同时,能够快速加载和执行应用程序。
(3)Fluxbox
是一个基于GNU/Linux的轻量级图形操作界面,它虽然没有GNOME和KDE那样精致 ,但由于它的运行对系统资源和配置要求极低,所以它被安装到很多较旧的或是对性能要求较高的机器上,其菜单和有关 配置被保存于用户根目录下的.fluxbox目录里,这样使得它的配置极为便利。
(4)Enlightenment
是一个功能强大的窗口管理器,它的目标是运用用户轻而易举地配置所见即所得的桌面图形界面。现在Enlightenment的界面已经相当豪华,它拥有像AfterStep一样的可视化时钟以及其它浮华的界面效果,用户不仅可以任意选择边框和动感的声音效果,最有吸引力的是由于它开放的设计思想,每一个用户可以根据自己的爱好,任意地配置窗口的边框、菜单以及屏幕上其它各个部分,而不须要 接触源代码,也不须要 编译任何程序。
(三)文件系统
1.文件类型
(1)普通文件(regular file):就是一般存取的文件,由ls -al显示出来的属性中,第一个属性为 [-],例如 [-rwxrwxrwx]。另外,依照文件的内容,又大致可以分为:
1)纯文本文件(ASCII):这是Unix系统中最多的一种文件类型,之所以称为纯文本文件,是因为内容可以直接读到的数据,例如数字、字母等等。设 置文件几乎都属于这种文件类型。举例来说,使用命令“cat ~/.bashrc”就可以看到该文件的内容(cat是将文件内容读出来)。
2)二进制文件(binary):系统其实仅认识且可以执行二进制文件(binary file)。Linux中的可执行文件(脚本,文本方式的批处理文件不算)就是这种格式的。举例来说,命令cat就是一个二进制文件。用 hexdump -C /usr/bin/cat查看内容。
3)数据格式的文件(data):有些程序在运行过程中,会读取某些特定格式的文件,那些特定格式的文件可以称为数据文件(data file)。举例来说,Linux在用户登入时,都会将登录数据记录在 /var/log/wtmp文件内,该文件是一个数据文件,它能通过last命令读出来。但使用cat时,会读出乱码。因为它是属于一种特殊格式的文件。
(2)目录文件(directory):就是目录,第一个属性为 [d],例如 [drwxrwxrwx]。
(3)链接文件(link):类似Windows下面的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx]。
(4)设备与设备文件(device):与系统外设及存储等相关的一些文件,通常都集中在 /dev目录。通常又分为两种:
-块设备文件:就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。第一个属性为 [b]。
-字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c]。
(5)套接字(sockets):这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型。
(6)管道(FIFO,pipe):FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p]。
2.文件结构 --“树形结构”
/:根目录,所有的目录、文件、设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者。
/bin:bin 就是二进制(binary)英文缩写。在一般的系统当中,都可以在这个目录下找到linux常用的命令。系统所需要的那些命令位于此目录。
/sbin:这个目录是用来存放系统管理员的系统管理程序。大多是涉及系统管理的命令的存放,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,这个目录和/usr/sbin; /usr/X11R6/sbin或/usr/local/sbin目录是相似的,凡是目录sbin中包含的都是root权限才能执行的。
/boot:Linux的内核及引导系统程序所需要的文件目录,比如 vmlinuz initrd.img 文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录。
/proc:可以在这个目录下获取系统信息。这些信息是在内存中,由系统自己产生的。
/sys:
/etc:etc这个目录是linux系统中最重要的目录之一。在这个目录下存放了系统管理时要用到的各种配置文件和子目录。要用到的网络配置文件,文件系统,x系统配置文件,设备配置信息,设置用户信息等都在这个目录下。/etc/sysconfig/selinux对SElinux的一些配置文件目录,SElinux可以让linux更加安全。
/dev:dev 是设备(device)的英文缩写。这个目录对所有的用户都十分重要。因为在这个目录中包含了所有linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序。这一点和常用的windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口。可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别
/lib:lib是库(library)英文缩写。这个目录是用来存放系统动态连接共享库的。几乎所有的应用程序都会用到这个目录下的共享库。因此,千万不要轻易对这个目录进行什么操作,一旦发生问题,系统就不能工作了。
/lib64:
/root:Linux超级权限用户root的家目录。
/home:如果建立一个用户,用户名是"xx",那么在/home目录下就有一个对应的/home/xx路径,用来存放用户的主目录。
/usr:这是linux系统中占用硬盘空间最大的目录。用户的很多应用程序和文件都存放在这个目录下。在这个目录下,可以找到那些不适合放在/bin或/etc目录下的额外的工具。
/usr/local:这里主要存放那些手动安装的软件,即不是通过“新立得”(Synaptic,是Debian和Ubuntu Linux操作系统的包管理工具apt的图形化前端)或apt-get安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面。
/usr/share :系统共用的东西存放地,比如 /usr/share/fonts 是字体目录,/usr/share/doc和/usr/share/man帮助文件。
/opt:这里主要存放那些可选的程序。
/srv:服务启动后,所需访问的数据目录,举个例子来说,www服务启动读取的网页数据就可以放在/srv/www中。
/var:这个目录的内容是经常变动的,看名字就知道,可以理解为vary的缩写,/var下有/var/log 这是用来存放系统日志的目录。/var/ www目录是定义Apache服务器站点存放目录;/var/lib 用来存放一些库文件,比如MySQL的,以及MySQL数据库的的存放地.
/tmp:临时文件目录,用来存放不同程序执行时产生的临时文件。有时用户运行程序的时候,会产生临时文件。/tmp就用来存放临时文件的。/var/tmp目录和这个目录相似。
/media:有些linux的发行版使用这个目录来挂载那些usb接口的移动硬盘(包括U盘)、CD/DVD驱动器等等。
/run:
/mnt:这个目录一般是用于存放挂载储存设备的挂载目录的,比如有cdrom等目录。可以参看/etc/fstab的定义。
/cdrom:这个目录在刚刚安装系统的时候是空的。可以将光驱文件系统挂在这个目录下。例如:mount /dev/cdrom /cdrom
/lost+found:在ext2或ext3文件系统中,当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方式来修复,或移到文件到原来的位置上。
(四)常用命令及技巧
1.通用命令
- date :print or set the system date and time
- stty -a: 可以查看或者打印控制字符(Ctrl-C, Ctrl-D, Ctrl-Z等)
- logout, login: 登录shell的登录和注销命令
- pwd: print or set the system date and time
- more, less, head tail: 显示或部分显示文件内容.
- lp/lpstat/cancel, lpr/lpq/lprm: 打印文件.
- fg jobid :可以将一个后台进程放到前台。
- Ctrl-z 可以将前台进程挂起(suspend), 然后可以用bg jobid 让其到后台运行。
- job & 可以直接让job直接在后台运行。
- kill 的作用: send a signal to a process. eg: kill -9 发送的是SIG_KILL信号。具体发送什么信号,可以通过 man kill 查看。
- ps 的用法, ps -e 或 ps -o pid,ppid,session,tpgid, comm (其中session显示的sessionid, tpgid显示前台进程组id, comm显示命令名称。)
2.ubuntu常用命令
(1)dpkg: package manager for Debian
* 安装: dpkg -i package
* 卸载: dpkg -r package
* 卸载并删除配置文件: dpkg -P |--purge package
* 如果安装一个包时。说依赖某些库。 可以先 apt-get install somelib...
* 查看软件包安装内容 :dpkg -L package
* 查看文件由哪个软件包提供: dpkg -S filename
* 另外 dpkg还有 dselect和aptitude 两个frontend.
(2)apt
* 安装: apt-get install packs
* apt-get update : 更新源
* apt-get upgrade: 升级系统。
* apt-get dist-upgrade: 智能升级。安装新软件包,删除废弃的软件包
* apt-get -f install : -f == --fix broken 修复依赖
* apt-get autoremove: 自动删除无用的软件
* apt-get remove packages :删除软件
* apt-get remove package --purge 删除包并清除配置文件
* 清除所以删除包的残余配置文件: dpkg -l |grep ^rc|awk ‘{print $2}‘ |tr ["/n"] [" "]|sudo xargs dpkg -P
* 安装软件时候包的临时存放目录 : /var/cache/apt/archives
* 清除该目录: apt-get clean
* 清除该目录的旧版本的软件缓存: apt-get autoclean
* 查询软件some的依赖包: apt-cache depends some
* 查询软件some被哪些包依赖: apt-get rdepends some
* 搜索软件: apt-cache search name|regexp
* 查看软件包的作用:apt-cache show package
* 查看一个软件的编译依赖库: apt-cache showsrc packagename|grep Build-Depends
* 下载软件的源代码 : apt-get source packagename (注: sources.list 中应该有 deb-src 源)
* 安装软件包源码的同时, 安装其编译环境 :apt-get build-dep packagename (有deb-src源)
* 如何将本地光盘加入安装源列表: apt-cdrom add
(3)系统命令:
* 查看内核版本: uname -a/-r
* 查看ubuntu 版本: cat /etc/issue
* 查看网卡状态 : ethtool eth0
* 查看内存,cpu的信息:cat /proc/meminfo ; cat /proc/cpuinfo(/proc下面的有很多系统信息)
* 打印文件系统空间使用情况: df -h
* 查看硬盘分区情况: fdisk -l
* 查看文件大小: du -h filename;
* 查看目录大小: du -hs dirname ; du -h dirname是查看目录下所有文件的大小
* 查看内存的使用: free -k|-m|-g (对应单位k,M,G)
* 查看进程: ps -e 或ps -aux -->显示用户
* 杀掉进程: kill pid
* 强制杀掉: killall -9 processname
(4)网络相关:
* 配置 ADSL: sudo pppoeconf
* ADSL手工拨号: sudo pon dsl-provider
* 激活 ADSL : sudo /etc/ppp/pppoe_on_boot
* 断开 ADSL: sudo poff
* 根据IP查网卡地址: arping IP地址
* 查看本地网络信息(包括ip等): ifconfig | ifconfig eth0
* 查看路由信息: netstat -r
* 关闭网卡: sudo ifconfig eth0 down
* 启用网卡: sudo ifconfig eth0 up
* 添加一个服务: sudo update-rc.d 服务名 defaults 99
* 删除一个服务: sudo update-rc.d 服务名 remove
* 临时重启一个服务: /etc/init.d/服务名 restart
* 临时关闭一个服务: /etc/init.d/服务名 stop
* 临时启动一个服务: /etc/init.d/服务名 start
* 控制台下显示中文: sudo apt-get install zhcon
* 查找某个文件: whereis filename 或 find 目录 -name 文件名
*通过ssh传输文件
scp -rp /path/filename username@remoteIP:/path #将本地文件拷贝到服务器上
scp -rp username@remoteIP:/path/filename /path #将远程文件从服务器下载到本地
(5)压缩:
*解压缩 a.tar.gz: tar zxvf a.tar.gz
*解压缩 a.tar.bz2: tar jxvf a.tar.bz2
*压缩aaa bbb目录为xxx.tar.gz: tar zcvf xxx.tar.gz aaa bbb
*压缩aaa bbb目录为xxx.tar.bz2: tar jcvf xxx.tar.bz2 aaa bbb[6]
(6)Nautilus:特殊 URI 地址
* computer:/// - 全部挂载的设备和网络
* network:/// - 浏览可用的网络
* burn:/// - 一个刻录 CDs/DVDs 的数据虚拟目录
* smb:/// - 可用的 windows/samba 网络资源
* x-nautilus-desktop:/// - 桌面项目和图标
* file:/// - 本地文件
* trash:/// - 本地回收站目录
* ftp:// - FTP 文件夹
* ssh:// - SSH 文件夹
* fonts:/// - 字体文件夹,可将字体文件拖到此处以完成安装
* themes:/// - 系统主题文件夹
* 显示隐藏文件: Ctrl+h
* 显示地址栏: Ctrl+l
* 查看已安装字体: 在nautilus的地址栏里输入fonts:///,就可以查看本机所有的fonts[6]
(7)补充部分:
* 查看本地所有的tpc,udp监听端口: netstat -tupln (t=tcp, u=udp, p=program, l=listen, n=numric数字的)
* 通过man搜说相关命令: man -k keyword . eg: man -k user;或者用 apropos
* 统计文件所占用的实际磁盘空间: du (du - estimate file space usage)
* 统计文件中的字符,字节数: wc -c/-l/-w (wc - print the number of newlines, words, and bytes in files)
* 查看文件的内容: od -x/-c/.... (od - dump files in octal and other formats)
我认为od最有用的就是文件的字节流了: od -t x1 filename
查看文件的 Ascii 码形式: od -t c filename (其中统计信息最左边的是: 字节数)
* 查找命令所在文件的位置: which od 输出: /usr/bin/od
查看该文件由哪个包提供: dpkg -S /usr/bin/od 输出: coreutils: /usr/bin/od
再查看coreutils包的全部内容就知道了linux的核心命令: dpkg -L coreutils
然后 info coreutils 哈哈,认真学吧, 满世界都是命令!
* 可以用man 命令产看某个命令的所有section 的解释: man -a tty
然后用q,和next 转换到下一个section的解释
(8)ulimit
ulimit:显示(或设置)用户可以使用的资源的限制(limit),这限制分为软限制(当前限制)和硬限制(上限),其中硬限制是软限制的上限值,应用程序在运行过程中使用的系统资源不超过相应的软限制,任何的超越都导致进程的终止。
ulimited 不限制用户可以使用的资源,但本设置对可打开的最大文件数(max open files)
和可同时运行的最大进程数(max user processes)无效
-a 列出所有当前资源极限
-c 设置core文件的最大值.单位:blocks
-d 设置一个进程的数据段的最大值.单位:kbytes
-f Shell 创建文件的文件大小的最大值,单位:blocks
-h 指定设置某个给定资源的硬极限。如果用户拥有 root 用户权限,可以增大硬极限。任何用户均可减少硬极限
-l 可以锁住的物理内存的最大值
-m 可以使用的常驻内存的最大值,单位:kbytes
-n 每个进程可以同时打开的最大文件数
-p 设置管道的最大值,单位为block,1block=512bytes
-s 指定堆栈的最大值:单位:kbytes
-S 指定为给定的资源设置软极限。软极限可增大到硬极限的值。如果 -H 和 -S 标志均未指定,极限适用于以上二者
-t 指定每个进程所使用的秒数,单位:seconds
-u 可以运行的最大并发进程数
-v Shell可使用的最大的虚拟内存,单位:kbytes
eg: ulimit -c 1000(可以先通过ulimit -c 查看原来的值)
【进程和线程】
-进程(process):是计算机中的程序关于某数据级和上一次的运行活动,是系统进行资源分配和调度的基本单位。
进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。每一个进程都有一个自己的地址空间,即进程空间或(虚空间)。进程空间的大小只与处理机的位数有关,一个 16 位长处理机的进程空间大小为 216 ,而 32 位处理机的进程空间大小为 232 。进程至少有 5 种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终止状态。
-进程通信:单机系统中进程通信有 4 种形式:主从式,会话式,消息或邮箱机制,共享存储区方式。
主从式典型例子:终端控制进程和终端进程。
会话式典型例子:用户进程与磁盘管理进程之间的通信。
-线程(Threads):轻量级进程(Lightweight Process ,LWP),是程序执行流的最小单元(三种状态:就绪、堵塞、运行)。线程,在网络或多用户环境下,一个服务器通常需要接收大量且不确定数量用户的并发请求,为每一个请求都创建一个进程显然是行不通的,——无论是从系统资源开销方面或是响应用户请求的效率方面来看。因此,操作系统中线程的概念便被引进了。线程,是进程的一部分,一个没有线程的进程可以被看作是单线程的。线程有时又被称为轻权进程或轻量级进程,也是 CPU 调度的一个基本单位。
-线程的执行特性
线程只有 3 个基本状态:就绪,执行,阻塞。
线程存在 5 种基本操作来切换线程的状态:派生,阻塞,激活,调度,结束。
『线程和进程的关系』进程是线程的容器。
进程的执行过程是线状的,尽管中间会发生中断或暂停,但该进程所拥有的资源只为该线状执行过程服务。一旦发生进程上下文切换,这些资源都是要被保护起来的。这是进程宏观上的执行过程。而进程又可有单线程进程与多线程进程两种。我们知道,进程有 一个进程控制块PCB ,相关程序段和该程序段对其进行操作的数据结构集 这三部分,单线程进程的执行过程在宏观上是线性的,微观上也只有单一的执行过程;而多线程进程在宏观上的执行过程同样为线性的,但微观上却可以有多个执行操作(线程),如不同代码片段以及相关的数据结构集。线程的改变只代表了 CPU 执行过程的改变,而没有发生进程所拥有的资源变化。除了 CPU 之外,计算机内的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。与进程控制表和 PCB 相似,每个线程也有自己的线程控制表 TCB ,而这个 TCB 中所保存的线程状态信息则要比 PCB 表少得多,这些信息主要是相关指针用堆栈(系统栈和用户栈),寄存器中的状态数据。进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源。线程可以有效地提高系统的执行效率,但并不是在所有计算机系统中都是适用的,如某些很少做进程调度和切换的实时系统。使用线程的好处是有多个任务需要处理机处理时,减少处理机的切换时间;而且,线程的创建和结束所需要的系统开销也比进程的创建和结束要小得多。最适用使用线程的系统是多处理机系统和网络系统或分布式系统。
eg:qq,网页,淘宝等都依赖于网络但优先于其他应用程序,这是被kernel控制的;而人为控制kernel再传给cpu
【语言和输入法设定】
gnome-control-center ##打开设置中心
region & language ##设置系统语言和输入法
keyboards ##设置快捷方式
【bash shell简介】
eg:[kiosk@foundation33 Desktop]$
kiosk###开启shell的用户
@###分隔符
foundation33###主机名短名称,表示shell开启在哪台主机里
Desktop###表示你在系统的什么位置
$###身份提示符中的普通用户,超级用户的提示符为‘#‘
[kiosk@foundation33 Desktop]$ echo $PS1
[\u@\h \W]\$
[kiosk@foundation33 Desktop]$ PS1=‘[\u*\h \W]\$ ‘###修改分隔符
[kiosk*foundation33 Desktop]$ echo $PS1
[\u*\h \W]\$
补充:$PS1在命令列时的提示号,$PS2当命令尚未打完时,Shell要求再输入时的提示号
【bash的快捷键】
Crtl + D(death)###退出当前用户身份
Crtl + C(cancel)###撤销未执行的指令或结束正在运行的进程
Ctrl + L###命令行清屏
Ctrl + a ##光标移到行首
+ e ##光标移到行尾
+ u ##光标所在位置删除到行首
+ k ##光标所在位置删除到行尾
+ r ##调出最近一条含有关键字的命令
+ 左/右 ##光标以单词为距离移动
+ c ##撤销已经输入的命令
+ d ##关闭当前环境
【虚拟控制台】
Ctrl+Alt+F1/F7###返回图形界面,如果没有返回则说明那个控台没有图形
Ctrl+Alt+F2~F6###切换到无图形界面
【gnome中的常规操作】
login for gui/text###图形化界面/无图形界面
Ctrl+Alt+上/下键###切换工作界面
Ctrl+Alt+L###锁屏
shell的打开方式:
(1)右键选择Open in Terminal
(2)Applications-->Favorites/Utilities(实用工具)-->Terminal
(3)设置快捷键:在settings-->Keyboards中添加Custom Shortcut[Name:shell,Command:gnome-terminal] ## 创建terminal命令就是gnome-terminal
【linux的6个启动级别】
poweroff / init 0 / halt / shutdown -h now ##关机
reboot / init 6 / shutdown -r now ##重启
init 0 关机
init 1 单用户 安全模式 当超级用户密码忘记时使用
init 2 无网络多用户模式
init 3 有网络多用户模式,关闭图形界面
init 4 用户自定义
init 5 有网络多用户模式,打开图形界面
init 6 重启
本文出自 “腹有诗书气自华” 博客,请务必保留此出处http://11451283.blog.51cto.com/11441283/1845385
原文地址:http://11451283.blog.51cto.com/11441283/1845385