Linux原理和使用


Linux哲学思想

Linux是怎样诞生的?

Linux(收听i英语发音:/ˈlɪnəks/ LIN-əks)是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布。[5][6],在加上用户空间的应用程序之后,成为Linux操作系统。

术语Linux只表示操作系统内核本身,但通常采用Linux内核来表达该意思。Linux则常用来指基于Linux内核的完整操作系统,包括GUI组件和许多其他实用工具。由于这些支持用户空间的系统工具和库主要由理查德·斯托曼于1983年发起的GNU计划提供,自由软件基金会提议将该组合系统命名为GNU/Linux[7][8],但Linux不属于GNU计划。

Linux中的软件在开发时通常遵循着哪些原则?

  1. 一切皆文件
  2. 由众多目的单一的应用程序组成,一个程序只做一件事
  3. 组合目的单一的小程序完成复杂任务
  4. 尽量避免捕捉用户接口
  5. 提供机制而非策略

Linux中的软件有什么共同特征?

自由,免费,开源

怎样学习Linux?

Linux From Scratch (LFS) 从头来


Linux基础知识

Linux中的文件是怎么样组织存放的?

Linux系统将它的重要文件按照一个标准的分布进行存储,这种摆放系统文件的方法叫做文件系统的层次标准,即 Filesystem Hierarchy Standard (FHS)。
Linux用符号 ‘/’ 来表示路径间的分隔符(不像Windows,用 ‘' 符号)

Linux系统的启动流程是怎么样的?

  1. 命令行登录:init进程调用getty程序(意为get teletype),让用户输入用户名和密码。输入完成后,再调用login程序,核对密码(Debian还会再多运行一个身份核对程序/etc/pam.d/login)。如果密码正确,就从文件 /etc/passwd 读取该用户指定的shell,然后启动这个shell。
  2. ssh登录:这时系统调用sshd程序(Debian还会再运行/etc/pam.d/ssh ),取代getty和login,然后启动shell。
  3. 图形界面登录:init进程调用显示管理器,Gnome图形界面对应的显示管理器为gdm(GNOME Display Manager),然后用户输入用户名和密码。如果密码正确,就读取/etc/gdm3/Xsession,启动用户的会话。
  1. 命令行登录:首先读入 /etc/profile,这是对所有用户都有效的配置;然后依次寻找下面三个文件,这是针对当前用户的配置。 ~/.bash_profile ~/.bash_login ~/.profile 需要注意的是,这三个文件只要有一个存在,就不再读入后面的文件了。比如,要是 ~/.bash_profile 存在,就不会再读入后面两个文件了。
  2. ssh登录:与第一种情况完全相同。
  3. 图形界面登录:只加载 /etc/profile 和 ~/.profile。也就是说,~/.bash_profile 不管有没有,都不会运行。

Linux中的运行级别是怎么回事?怎样切换运行级别?

运行级别 定义了在 Linux 系统的目前状态(或运行级别)下能够完成哪些任务。每个 Linux 系统支持三种基本的运行级别,以及完成正常操作所需的一个或多个运行级别。

Linux 的基本运行级别

级别 目的
0 关闭(或停止)系统
1 单用户模式;通常别称为 s 或 S
6 重启系统

其他常见的 Linux 运行级别

级别 目的
2 没有联网的多用户模式
3 联网的多用户模式
5 联网并且使用 X Window 系统的多用户模式

在启动 Linux 系统时,默认的运行级别是由 /etc/inittab 中的 id: 条目确定的。
无需重启系统,可以使用 telinit 命令转到另一个运行级别,使用 runlevel 命令来显示之前的运行级别和现在的运行级别。如果第一个输出参数是 ‘N’,那么在启动系统之后,运行级别就不会发生改变。 telinit 实际上是 init 的一个符号链接 ls -l $(which telinit)

超级管理员的密码忘记了怎么办?

从GRUB界面在引导装载程序进入单用户模式,修改root密码

怎样让一个命令在Linux启动时自动执行?

  1. ln -s 建立启动软连接 /etc/rc.d/rc[0~6].d 每个目录分别存放着对应运行级别加载时需要关闭或启动的服务,K开头的脚本文件代表运行级别加载时需要关闭的,S开头的代表需要执行,将可执行脚本丢在/etc/init.d目录下,然后在/etc/rc.d/rc*.d中建立软链接即可
  2. chkconfig
  3. ntsysv

Linux中的文件权限是怎样设定的?文件和目录各有哪些可设置的权限?

用户和组

文件所有权和权限

什么是软链接?什么是硬链接?他们有什么作用?

硬链接与软链接是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux 虚拟文件系统 (VFS) 的四个基本概念之一。

为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名(见 图 2.hard link 就是 file 的一个别名,他们有共同的 inode)。

  1. 文件有相同的 inode 及 data block;
  2. 只能对已存在的文件进行创建;
  3. 不能交叉文件系统进行硬链接的创建;
  4. 不能对目录进行创建,只可对文件创建;
  5. 删除一个硬链接文件并不影响其他有相同 inode 号的文件。

软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块(见 图 2.)。因此软链接的创建与使用没有类似硬链接的诸多限制:

  1. 软链接有自己的文件属性及权限等;
  2. 可对不存在的文件或目录创建软链接;
  3. 软链接可交叉文件系统;
  4. 软链接可对文件或目录创建;
  5. 创建软链接时,链接计数 i_nlink 不会增加;
  6. 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

Linux日常使用

Linux中的小工具忘记了参数怎么办?怎么样获取帮助?

Linux中怎样查找文件?怎么在文件中查找特定的内容?

Find

基本格式

find [-H] [-L] [-P] [path...] [expression]\

按类型查找

find /usr -type l 查找某一类型的文件

按时间查找

这些时间选项都需要与一个值 n 结合使用,指定为 -n、n 或 +n。

还可以使用 -newer、-anewer 和 –cnewer 选项查找已修改或访问过的文件与特定的文件比较。

按大小查找 [cwbkMG]

-size n
-size +n
-size -n

find / -size +5000000c 2> /dev/null\

按权限查找

find /sbin /usr/sbin -executable \! -readable -print find . -perm 664

控制find

find -maxdepth 2 -name passwd

Linux中有哪些用于处理文本的小工具?怎样通过管道组合起来使用?

find 文件查找 grep 文本搜索 xargs 命令行参数转换 sort 排序 uniq 消除重复行 用tr进行转换 cut 按列切分文本 paste 按列拼接文本 wc 统计行和字符的工具 sed 文本替换利器 awk 数据流处理工具

怎么样使用文本工具对日志进行统计分析

awk '{a[$1]+=1;}END{for(i in a){print a[i]" " i;}}' averainy.info.log

211.154.151.111 - - [03/May/2012:05:02:01 +0800] GET /feed HTTP/1.1 200 73777 - Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2;) -

输入,输出重定向是怎么回事?

所谓I/O重定向简单来说就是一个过程,这个过程捕捉一个文件,或者命令,程序,脚本,甚至脚本中的代码块(code block)的输出,然后把捕捉到的输出,作为输入发送给另外一个文件,命令,程序,或者脚本。

如果谈到I/O重定向,就涉及到文件标识符(File Descriptor)的概念, 在Linux系统中,系统为每一个打开的文件指定一个文件标识符以便系统对文件进行跟踪,这里有些和C语言编程里的文件句柄相似,文件标识符是一个数字,不同数字代表不同的含义,默认情况下,系统占用了3个,分别是0标准输入(stdin),1标准输出(stdout), 2标准错误(stderr), 另外3-9是保留的标识符,可以把这些标识符指定成标准输入,输出或者错误作为临时连接。通常这样可以解决很多复杂的重定向请求。

VIm编辑器怎样使用?


Linux系统管理

Linux中有哪些安装软件的方式?怎样实现编译安装?

deb是Debian软件包格式,文件扩展名为.deb,跟Debian的命名一样,deb也是因Debra Murdock(Debian创始人Ian Murdock的前妻)而得名。 Debian包是Unixar的标准归档,将包文件信息以及包内容,经过gzip和tar打包而成。 处理这些包的经典程序是dpkg,经常是通过apt来运作。 通过Alien工具,可以将deb包转换成其他形式的软件包。

RPM包管理员(简称RPM,全称为The RPM Package Manager)是在Linux下广泛使用的软件包管理器。RPM此名词可能是指.rpm的文件格式的软件包,也可能是指其本身的软件包管理器(RPM Package Manager)。 RPM软件包分为二进制包(Binary)、源代码包(Source)和Delta包三种。二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。

管理deb软件包的dpkg以及它的前端apt(使用于Debian、Ubuntu)。 rpm以及它的前端yum(使用于Fedora)、前端ZYpp(使用于openSUSE)、 前端urpmi(使用于Mandriva Linux、Mageia)等

怎样启动,停止,重启一个系统服务?

sudo service mysql restart

怎样查看当前系统中登录了哪些用户?

w who last

怎样查看当前系统的负载情况?怎样确定系统是否已经满负荷?

top

怎样使一个命令在每周一三五早8点-10点每隔五分钟执行一次?

crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的crontab文件,该文件通常存放于/etc或者/etc之下的子目录中,而这个文件只能由系统管理员来修改。

crontab文件的每一行均遵守特定的格式,由空格或tab分隔为数个领域,每个领域可以放置单一或多个数值。

操作符号

时间设置

# 文件格式说明
#  ——分钟 (0 - 59)
# |  ——小时 (0 - 23)
# | |  ——日   (1 - 31)
# | | |  ——月   (1 - 12)
# | | | |  ——星期 (0 - 7)(星期日=0或7)
# | | | | |
# * * * * * 被执行的命令

常见错误

  1. 命令行双引号中使用%时,未加反斜线\
  2. 与其他域不同,第三和第五个域之间执行的是“或”操作。

crontab -e */5 8-10 * * 1,3,5 command


Shell编程

什么是Shell?

壳层在计算机科学中,是指“提供用户使用界面”的软件,通常指的是命令行界面的解析器。

shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Shell is a user program or it’s environment provided for user interaction. Shell is an command language interpreter that executes commands read from the standard input device (keyboard) or from a file.

什么是Shell脚本?怎样让一个脚本文件变成一个可以直接执行的软件?

“Shell Script is series of command written in plain text file. Shell script is just like batch file is MS-DOS but have more power than the MS-DOS batch file.”

在第一行指定脚本解释器,如:#!/bin/sh

怎样定义Shell变量?

shell变量是一种很“弱”的变量,默认情况下,一个变量保存一个串,shell不关心这个串是什么含义。所以若要进行数学运算,必须使用一些命令例如let、declare、expr、双括号等。shell变量可分为两类:局部变量和环境变量。

var=value
export var

怎样给一个Shell脚本传递命令参数?怎样接受,解析这些参数?

Shell中怎样捕获一个命令的输出结果?

var=`ps -ef | grep oracle`
var=$(ps -ef | grep oracle)

命令的返回码是什么东西?有什么用?怎样查看?

echo $?

怎样定义Shell函数?函数怎样传递参数?怎样返回数值?

[ function ] funname [()]
{
  action;
  [return int;]
}

Shell中怎样进行数学计算?

var=1\

Shell中怎样处理字符串?

表达式 含义
${#string} $string的长度
${string:position} 在$string中, 从位置$position开始提取子串
${str ing:position:length} 在$string中, 从位置$position开始提取长å¦为$length的子串
${string#substring} 从变量$string的开头, 删 除最短匹配$substring的子串
${string##substring} 从变量$strin g的开头, 删除最长匹配$substring的子串
${string%substring} 从变量$string的结尾, 删除最短匹配$substring的子串
${string%%substring} 从变量$string的结尾, 删除最长匹配$substringç„子串
${string/substring/replacement} 使用$replacement, 来代替ç¬一个匹配的$substring
${string//substring/replacement} 使用$rep lacement, 代替所有匹配的$substring
${string/#substring/replacement} 如果$string的前缀匹配$substring, 那么就用$replacement来ä£替匹配到的$substring
${string/%substring/replacement} 如果$stri ng的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring

一个Shell脚本中怎样包含其他脚本?


AWK & SED

AWK是什么?

Awk是一种便于使用且表达能力强的程序设计语言,可应用于各种计算和数据处理任务。

AWK是贝尔实验室1977年搞出来的文本出现神器

之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字符。

AWK中有那些特殊变量?各有什么含义?

怎样通过AWK对一个文本文件按列拆分?

怎样通过AWK统计一个WEB访问日志中发起POST提交最多的IP地址和提交次数?

怎样通过SED实现文本的查找,替换?


参考

Linux
Unix 40年:Unix年鉴
一些软件设计的原则
趣图图解SOLID软件开发原则
Linux 文件系统剖析
Filesystem Hierarchy Standard
Filesystem Hierarchy Standard
Linux文件层次标准
Linux 的启动流程
学习 Linux, 101: 运行级别、关机和重启
Linux 的文件权限与目录配置
理解 Linux 的硬链接与软链接
Linux的五个查找命令
A Unix/Linux “find” Command Tutorial
Linux Shell 文本处理工具集锦
理解Linux系统负荷
Understanding Linux CPU Load
shell变量详解
AWK程序设计语言
AWK 简明教程
The GNU Awk User’s Guide
技巧:Linux I/O重定向的一些小技巧
Linux Find 命令精通指南
爹地,我找到了!, 15个极好的Linux find命令示例
妈咪,我找到了! – 15个实用的Linux find命令示例
用户命令 find
Man手册中心
find 命令\

Yan Peipan 26 December 2014