(转载)linux那点事儿(中)

原文地址:http://www.cnblogs.com/fnng/archive/2012/03/19/2407162.html

本文只是转载供自己学习之用

2012-03-22 13:31 by 虫师, 2343 阅读, 5 评论, 收藏, 编辑

今天是辞职后的第一天,本来想写写工作总结,还有许多东西需要整理和学习。这是我继毕业之后的第二次焦虑和迷茫。希望我能早点找到工作吧!

步入正题,其实,linux要学的东西非常多。不是我分个上、中、下三篇博文就能写完的。不过,既然弄了个“上”出来,题目我就不改了。这篇就定为“中”吧!如果写了“下”,还没写完,也许会弄个“下续” ,“下续二”出来。^_^ :) ,也许,写了这个就没下了,哈哈!毕竟只是博客,又没人约稿,所以,比较随意。评论帮顶应该算我最大的动力吧!

别名的使用                                                                                            

在上一节中,在查看当前目录下的文件时,我说到了一个 ll  命令,看一楼回复中说,他是 ls -l 命令的别名,不是所有的linux都有。

别名嘛,顾名思义,不同的两个名字指的是一个人,不同的两个命令具有相同的作用。

现在,你一定很想知道自己的系统中都有哪些别名。

[[email protected] ~]# alias             查询系统中的别名

alias cp=‘cp -i‘

alias l.=‘ls -d .* --color=tty‘

alias ll=‘ls -l --color=tty‘

alias ls=‘ls --color=tty‘

alias mv=‘mv -i‘

alias rm=‘rm -i‘

alias vi=‘vim‘

alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘

如何定义别名,假如我在dos下用习惯了copy 而不想用cp ,那么就可以为cp 定义一个copy的别名。

[[email protected] ~]# alias copy=cp              将cp命令功能赋于给copy

[[email protected] ~]# alias drm="rm -rf"       将“ rm -rf ” 命令定义一个drm的别名。

[[email protected] ~]# unalias  copy       取消别名

vim/vi编辑器                                                                                     

  这一部分应该属于重点了,关于vi 的东西很多,貌似出过几本专门讲vi的书。有牛人用这个编程序超快。对于我们大多人来说会使用就OK了

vim/vi是一个功能强大的屏幕文本编辑器,是linux、UNIX 上最常用的文本编辑器,他的作用是建立、编辑、显示文本文件。

vim/vi 没有菜单,只有命令。

  

  为了便于操作,我们在copy一个有内容的文件拿来操作。

[[email protected] test]# cp /etc/services   services.test   拷贝/etc/services文件到当前目录下。

  vim是vi 的加强版,当好多用户还是习惯用vi 来编辑文件

[[email protected] test]# vim  services.test   进入文件

 

vi 的三种模式:

三种模式的转换:

  命令模式 下输入 a、i、o进入 插入模式

  插入模式 下按ESC进入  命令模式

  命令模式 下输入 : (冒号)进入 编辑模式

  编辑模式 下指令错误则返回 命令模式

是不是觉得有点儿绕,其实,我们只要记着,vi 进入文件后,按 i 键可以对文件时行编辑了。

编辑完成后,按Esc 键退出编辑模式。退出有三中必须要记。

:q     是退出(文件没发生更改时)

:q!    不保存退出(文件发生改变时)

:wq    保存并退出 vim/vi的具体操作

了解下面的一些命令,有助于我们快速的编辑和使用vi

 

命令模式:

命令模式主要使用方向键移动光标位置进行文字的编辑,下面列出了常用的操作命令及含义

上、下、左、右键盘和 h、j、k、l键分别都是移动光标方面的。

$ ------------移至行尾

0(零)  -----移至行首

H   ----------移至屏幕上端

M   ----------移至屏幕中央

L   ----------移至屏幕下端

gg   ---------到文件第一行

G   ----------到文件末尾

PageDn   ----- 向下移动一页

PageUp  ----- 向上移动一页

d+方向键 -----删除文字

dd  -----删除整行

pp -----整行复制

r  -----修改光标所在的字符

S  -----删除光标所在的列,并进入输入模式

插入模式:

 

可以通过以下命令由“命令模式”进入“插入模式”

a------------在当标后附加文本

A------------在本行行末附加文本

i-------------在光标前插入文本

I-------------在本行开始插入文本

o------------在光标下插入新行

O-----------在光标上插入新行

ESC--------退出“插入模式”

编辑模式:

编辑模式主要进行一些文字编辑辅助功能,比如字串搜索、替代、保存文件等操作。

:q -----结束Vi程序,如果文件有过修改,先保存文件

:q! -----强制退出Vi程序

:wq -----保存修改并退出程序

:set nu -----使文本每一行前出现行号

:set nonu ------取消每一行前的行号

:n ------------到第n行

 

linux引导流程解析                                                                             

    这一部分属于理论知识,感兴趣的和我一起了解一下。

   linux的引导流程,也就是linux的启动过程,启动顺序是是怎样的,linux为我们启动了哪些服务。

系统引导流程:  

  1. BIOS自检
  2. 启动GRUB/LILO
  3. 加载内核
  4. 执行init进程
  5. 通过/etc/inittab文件进行初始化

BIOS自检 

计算机在接通电源之后首先由BIOS进行自检,即进行所谓的POST(Power On SelfTest),然后依据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入“引导块”。 在 PC 中,引导 Linux 是从 BIOS 中的地址 0xFFFF0 处开始的。BIOS 的第一个步骤是加电自检(POST)。POST 的工作是对硬件进行检测。BIOS 的第二个步骤是进行本地设备的枚举和初始化。给定 BIOS 功能的不同用法之后,BIOS 由两部分组成:POST 代码和运行时服务。当 POST 完成之后,它被从内存中清理了出来,但是 BIOS 运行时服务依然保留在内存中,目标操作系统可以使用这些服务。

要引导一个操作系统,BIOS 运行时会按照 CMOS 的设置定义的顺序来搜索处于活动状态并且可以引导的设备。引导设备可以是软盘、CD-ROM、硬盘上的某个分区、网络上的某个设备,甚至是 USB 闪存。通常,Linux 都是从硬盘上引导的,其中主引导记录(MBR)中包含主引导加载程序。MBR 是一个 512 字节大小的扇区,位于磁盘上的第一个扇区中(0 道 0 柱面 1 扇区)。当 MBR 被加载到 RAM 中之后,BIOS 就会将控制权交给 MBR。

提取 MBR 的信息

要查看 MBR 的内容,请使用下面的命令:

# dd if=/dev/hda of=mbr.bin bs=512 count=1 # od -xa mbr.bin

这个 dd 命令需要以 root 用户的身份运行,它从 /dev/hda(第一个 IDE 盘) 上读取前 512 个字节的内容,并将其写入 mbr.bin 文件中。od 命令会以十六进制和 ASCII 码格式打印这个二进制文件的内容。

启动GRUB/LILO

GRUB和LILO都是引导加载程序。最简单地讲,引导加载程序(boot loader) 会引导操作系统。当机器引导它的操作系统时,BIOS 会读取引导介质上最前面的 512 字节(即人们所知的 主引导记录(master boot record,MBR))。在单一的 MBR 中只能存储一个操作系统的引导记录,所以当需要多个操作系统时就会出现问题。所以需要更灵活的引导加载程序。

GRUB 与 LILO 的比较

如本文开始处所述,所有引导加载程序都以类似的方式工作,满足共同的目的。不过,LILO 和 GRUB 之间有很多不同之处:

 * LILO 没有交互式命令界面,而 GRUB 拥有。

 * LILO 不支持网络引导,而 GRUB 支持。

 * LILO 将关于可以引导的操作系统位置的信息物理上存储在 MBR 中。如果修改了 LILO 配置文件,必须将 LILO 第一阶段引导加载程序重写到 MBR。相对于 GRUB,这是一个更为危险的选择,因为错误配置的 MBR 可能会让系统无法引导。使用 GRUB,如果配置文件配置错误,则只是默认转到 GRUB 命令行界面。

   安全提示:

    关于安全性,任何可以接触到引导磁盘/CD 的人,只需要使用没有设置安全性的 grub.conf 或 lilo.conf,就可以绕过本文中提及的所有安全措施。特别是使用 GRUB 时,因为能够引导到单用户模式,所以是一个严重的安全漏洞。解决此问题的一个简单方法是在机器的 BIOS 中禁止通过 CD 和软盘进行引导,并确保为 BIOS 设置了一个口令,使得其他人不能修改这些设置。

加载内核

当内核映像被加载到内存之后,内核阶段就开始了。内核映像并不是一个可执行的内核,而是一个压缩过的内核映像。通常它是一个 zImage(压缩映像,小于 512KB)或一个 bzImage(较大的压缩映像,大于 512KB),它是提前使用 zlib 进行压缩过的。在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压,然后将其放入高端内存中,如果有初始 RAM 磁盘映像,就会将它移动到内存中,并标明以后使用。然后该例程会调用内核,并开始启动内核引导的过程。

GRUB 中的手工引导

在 GRUB 命令行中,我们可以使用 initrd 映像引导一个特定的内核,方法如下:

   [[email protected] hzh]# vi /etc/grub.conf    查看grub.conf的配置文件

grub> kernel /bzImage-2.6.14.2

[Linux-bzImage, setup=0x1400, size=0x29672e]

grub> initrd /initrd-2.6.14.2.img

[Linux-initrd @ 0x5f13000, 0xcc199 bytes]

grub> boot

Uncompressing Linux... Ok, booting the kernel.

如果您不知道要引导的内核的名称,只需使用斜线(/)然后按下 Tab 键即可。GRUB 会显示内核和 initrd 映像列表。

执行init进程

init进程是系统所有进程的起点,内核在完成核内引导以后,即在本线程(进程)空间内加载init程序,它的进程号是1。init进程是所有进程的发起者和控制者。因为在任何基于Unix的系统(比如Linux)中,它都是第一个运行的进程,所以init进程的编号(Process ID,PID)永远是1。如果init出现了问题,系统的其余部分也就随之而垮掉了。

init进程有两个作用。第一个作用是扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了父进程的子进程就都会以init作为它们的父进程。快速执行一下ps -af 命令,可以列出许多父进程ID(Parent Process ID,PPID)为1的进程来。

init的第二个角色是在进入某个特定的运行级别(Runlevel)时运行相应的程序,以此对各种运行级别进行管理。它的这个作用是由/etc/inittab文件定义的。

通过/etc/inittab文件进行初始化

init的工作是根据/etc/inittab来执行相应的脚本进行系统初始化,如设置键盘、字体, 装载模块,设置网络,等等。

对于RedhatLinux来说,执行的顺序为:

/etc/rc.d/rc.sysinit            # 由init执行的第一个脚本 /etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作,包括: 设置初始的$PATH变量。配置网络。为虚拟内存启动交换。设置系统的主机名。检查root文件系统,以进行必要的修复。检查root文件系统的配额。为root文件系统打开用户和组的配额。以读/写的方式重新装载root文件系统。清除被装载的文件系统表/etc/mtab。把root文件系统输入到mtab。使系统为装入模块做准备。查找模块的相关文件。检查文件系统,以进行必要的修复。加载所有其他文件系统。清除几个/etc文件:/etc/mtab、/etc/fastboot和/etc/nologin。删除UUCP的lock文件。删除过时的子系统文件。删除过时的pid文件。设置系统时钟。打开交换。初始化串行端口。装入模块。/etc/rc.d/rcX.d/[KS]

首先终止“K”开头的服务,然后启动“S”开头的服务。

对每一个运行级别来说,在/etc/rc.d子目录中都有一个对应的下级目录。这些运行级别的下级子目录的命名方法是rcX.d,其中的X就是代表运行级别的数字。比如说,运行级别3的全部命令脚本程序都保存在/etc/rc.d/rc3.d子目录中。在各个运行级别的子目录中,都建立有到/etc/rc.d/init.d子目录中命令脚本程序的符号链接,但是,这些符号链接并不使用命令脚本程序在 /etc/rc.d/init.d子目录中原来的名字。如果命令脚本程序是用来启动一个服务的,其符号链接的名字就以字母S打头;如果命令脚本程序是用来关闭一个服务的,其符号链接的名字就以字母K打头。许多情况下,这些命令脚本程序的执行顺序都很重要。如果没有先配置网络接口,就没有办法使用DNS服务解析主机名!为了安排它们的执行顺序,在字母S或者 K的后面紧跟着一个两位数字,数值小的在数值大的前面执行。比如:/etc/rc.d/rc3.d/S50inet就会在 /etc/rc.d/rc3.d/S55named之前执行。存放在/etc/rc.d/init.d子目录中的、被符号链接上的命令脚本程序是真正的实干家,是它们完成了启动或者停止各种服务的操作过程。当 /etc/rc.d/rc运行通过每个特定的运行级别子目录的时候,它会根据数字的顺序依次调用各个命令脚本程序执行。它先运行以字母K打头的命令脚本程序,然后再运行以字母S打头的命令脚本程序。对以字母K打头的命令脚本程序来说,会传递Stop参数;类似地对以字母S打头的命令脚本程序来说,会传递 Start参数。

执行/etc/ec.d/rc.local

Redhat Linux中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中的最后一个,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登录之前执行的命令。在维护Linux系统运转的日子里,肯定会遇到需要系统管理员对开机或者关机命令脚本进行修改的情况。如果所做的修改只在引导开机的时候起作用,并且改动不大的话,可以考虑简单地编辑一下/etc/rc.d/rc.local脚本。这个命令脚本程序是在引导过程的最后一步被执行的。

执行 /bin/login 程式

login 程序会提示使用者需输入账号及密码, 接着编码并确认密码的正确性, 若二者相合, 则为使用者进行初始化环境, 并将控制权交给 shell,即等待用户登录。多次为止Linux启动过程全部结束。

修改本机的软硬件时间                                                                        

关于,修改系统的软硬件时间,对新手来说不是特别重要,软件(指的系统时间)时间很好修改,硬件(指CMOS时间)时间就不知道怎么修改了。不感兴趣的可以无视。

   

[[email protected] hzh]# date           查看本机的软件时钟

[[email protected] hzh]# hwclock       查看本机的硬件时钟

[[email protected] hzh]# hwclock   --help

--set         set the rtc to the time given with --date

--hctosys     set the system time from the hardware clock

--systohc     set the hardware clock to the current system time

  假如有一个时间是错的,我们可以通过上面的命令进行修改。

[[email protected] hzh]# hwclock  --hctosys 设置系统时间与硬件时间对应。

[[email protected] hzh]# hwclock  --systohc  设置硬件时间与系统时间对应。

  假如两个时间都是错误的,我们可以自己设置时间

[[email protected] hzh]# hwclock  --set --data="月/日/年  时:分:秒"

(转载)linux那点事儿(中),布布扣,bubuko.com

时间: 2024-10-20 14:16:38

(转载)linux那点事儿(中)的相关文章

[转载]linux下编译php中configure参数具体含义

编译N次了   原来这么回事 原文地址:linux下编译php中configure参数具体含义作者:捷心特 php编译参数的含义 ./configure –prefix=/usr/local/php                      php 安装目录 –with-apxs2=/usr/local/apache/bin/apxs –with-config-file-path=/usr/local/php/etc      指定php.ini位置 –with-mysql=/usr/local

[转载] linux 程序运行过程中替换文件

今天被朋友问及“Linux下可以替换运行中的程序么?”,以前依稀记得Linux下是可以的(而Windows就不让),于是随口答道“OK”.结果朋友发来一个执行结果:(test正在运行中)# cp test2 test cp: cannot create regular file `test': Text file busy 看起来是程序被占用,无法覆盖.于是自己又再做了几个实验: (1)先rm删除正在运行的test,然后cp test2 test就没有错误了.(2)先mv改名正在运行的test,

(转载)linux那点事儿(上)

原文地址:http://www.cnblogs.com/fnng/archive/2012/03/19/2407162.html 本文只是转载供自己学习之用 本文算是学linux的学习笔记吧!其实linux与window差别还是有挺大的,在学linux时进量清空自己的windows思维,不然容易钻牛角尖.记是学过C之后,去学JAVA,老是用C的思维去看JAVA,所以,就是难入门.因为一个是面向过程的,一个是面向对象的.如果你抛开windows的思想,从零来学linux,其实,它没想象的那么难.每

CentOS6.5菜鸟之旅:纯转载Linux目录结构

来自:http://www.iteye.com/topic/1125162 使用linux也有一年多时间了  最近也是一直在维护网站系统主机  下面是linux目录结构说明 本人使用的是centos系统,很久没有发表博文了 近期会整理自己所用所了解知识点,发表linux相关的文章,记录自己的linux点点滴滴. linux 目录结构 /: 根目录,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置在一个分区中/bin:/usr/bin: 可执

[转载] linux下打开windows txt文件中文乱码问题

原文链接 在linux操作系统下,我们有时打开在windows下的txt文件,发现在windows下能正常显示的txt文件出现了中文乱码. 出现这种情况的原因为两种操作系统的中文压缩方式不同,在windows环境中中文压缩一般为gbk,而在linux环境中为utf8,这就导致了在windows下能正常显示 txt文件在linux环境下打开呈现了乱码状态. 解决方法:在linux用iconv命令,如乱码文件名为shujujiegou.txt,那么在终端输入如下命令: iconv -f gbk -t

国内首发讲解:RIDE 可以在 linux+python3 的环境中运行啦!

[引言] RIDE 是robotframework自动化测试框架的一个编辑工具.之前这个工具,只能在windows系统+python2的环境中运行. 就在2020年1月20日,官方发布了1.7.4.1版本,已经可以在linux+python3的环境中运行了. 关注robotframework的同学,可以看下这篇文章,在国内应该还鲜有人介绍. RIDE1.7.4.1版本,是一个python自动化测试中一个跨越式版本更新. 1 RIDE是什么? RIDE是什么?它是用来干什么的? 对于一些吃瓜群众来

[转载]Linux 线程实现机制分析

本文转自http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/ 支持原创.尊重原创,分享知识! 自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性.效率.本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足,描述了 Linux 社区是如何看待和解决兼容性和效率这两个问题的. 一.基础知识:线程和进程 按照教科书上的定义,进

linux命令---查找文件中的内容

linux命令---查找文件中的内容 [[email protected] ~]$ cat 1.txt |egrep '123456789|second'-------匹配123456789或者second的行 first line:123456789012345678901234567890123456789012345678901234567890 second line:one two three four five six seven eight nine ten [[email pro

【转载】Memcached在.Net中的基本操作

一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有:Perl.PHP.Python.Ruby.C#.C/C++以及Lua等. 那么,我们作为.Net码农,自然是使用C#.既然Memcached客户端有.Net版,那我们就去下载一个来试试. 下载文件:http://pan.baidu.com/s/1w9Q8I memcached clientlib项目