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 From Scratch (LFS) 从头来
Linux系统将它的重要文件按照一个标准的分布进行存储,这种摆放系统文件的方法叫做文件系统的层次标准,即 Filesystem Hierarchy Standard (FHS)。
Linux用符号 ‘/’ 来表示路径间的分隔符(不像Windows,用 ‘' 符号)
- 命令行登录:init进程调用getty程序(意为get teletype),让用户输入用户名和密码。输入完成后,再调用login程序,核对密码(Debian还会再多运行一个身份核对程序/etc/pam.d/login)。如果密码正确,就从文件 /etc/passwd 读取该用户指定的shell,然后启动这个shell。
- ssh登录:这时系统调用sshd程序(Debian还会再运行/etc/pam.d/ssh ),取代getty和login,然后启动shell。
- 图形界面登录:init进程调用显示管理器,Gnome图形界面对应的显示管理器为gdm(GNOME Display Manager),然后用户输入用户名和密码。如果密码正确,就读取/etc/gdm3/Xsession,启动用户的会话。
- 命令行登录:首先读入 /etc/profile,这是对所有用户都有效的配置;然后依次寻找下面三个文件,这是针对当前用户的配置。
~/.bash_profile
~/.bash_login
~/.profile
需要注意的是,这三个文件只要有一个存在,就不再读入后面的文件了。比如,要是 ~/.bash_profile 存在,就不会再读入后面两个文件了。- ssh登录:与第一种情况完全相同。
- 图形界面登录:只加载 /etc/profile 和 ~/.profile。也就是说,~/.bash_profile 不管有没有,都不会运行。
运行级别 定义了在 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密码
ln -s
建立启动软连接 /etc/rc.d/rc[0~6].d 每个目录分别存放着对应运行级别加载时需要关闭或启动的服务,K开头的脚本文件代表运行级别加载时需要关闭的,S开头的代表需要执行,将可执行脚本丢在/etc/init.d目录下,然后在/etc/rc.d/rc*.d中建立软链接即可chkconfig
ntsysv
用户和组
whoami
检查您当前有效的 用户idgroups
命令找出在什么组中:groups
groups root
id
找出用户和组信息 id
id root
文件所有权和权限
硬链接与软链接是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux 虚拟文件系统 (VFS) 的四个基本概念之一。
为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名(见 图 2.hard link 就是 file 的一个别名,他们有共同的 inode)。
软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块(见 图 2.)。因此软链接的创建与使用没有类似硬链接的诸多限制:
man
--help
-h
$ find <指定目录> <指定条件> <指定动作>
locate
命令其实是find -name
的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。whereis
命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。which
命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。type
命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。Find
基本格式
find [-H] [-L] [-P] [path...] [expression]
\
find
will display the pathnames of all files in the current directory and all subdirectories.find / -name foo 2>/dev/null
find command using a search criterion and the default actionfind /tmp /var/tmp . $HOME -name foo
You can specify as many places to search as you wishfind downloads -iname "*.gif"
不区分大小写按类型查找
find /usr -type l
查找某一类型的文件
按时间查找
这些时间选项都需要与一个值 n 结合使用,指定为 -n、n 或 +n。
还可以使用 -newer、-anewer 和 –cnewer 选项查找已修改或访问过的文件与特定的文件比较。
按大小查找 [cwbkMG]
-size n
-size +n
-size -n
find / -size +5000000c 2> /dev/null
\
按权限查找
-perm model
File’s permission bits are exactly mode.-perm -mode
All of the permission bits mode are set for the file.-perm /mode
Any of the permission bits mode are set for the file.-perm +mode
Deprecated
-executable
Matches files which are executable and directories which are searchable (in a file name resolution sense).find /sbin /usr/sbin -executable \! -readable -print
find . -perm 664
控制find
find -maxdepth 2 -name passwd
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是保留的标识符,可以把这些标识符指定成标准输入,输出或者错误作为临时连接。通常这样可以解决很多复杂的重定向请求。
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
crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的crontab文件,该文件通常存放于/etc或者/etc之下的子目录中,而这个文件只能由系统管理员来修改。
crontab文件的每一行均遵守特定的格式,由空格或tab分隔为数个领域,每个领域可以放置单一或多个数值。
操作符号
时间设置
# 文件格式说明 # ——分钟 (0 - 59) # | ——小时 (0 - 23) # | | ——日 (1 - 31) # | | | ——月 (1 - 12) # | | | | ——星期 (0 - 7)(星期日=0或7) # | | | | | # * * * * * 被执行的命令
常见错误
%
时,未加反斜线\
crontab -e
*/5 8-10 * * 1,3,5 command
壳层在计算机科学中,是指“提供用户使用界面”的软件,通常指的是命令行界面的解析器。
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 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不关心这个串是什么含义。所以若要进行数学运算,必须使用一些命令例如let、declare、expr、双括号等。shell变量可分为两类:局部变量和环境变量。
var=value
export var
var=`ps -ef | grep oracle` var=$(ps -ef | grep oracle)
echo $?
[ function ] funname [()] { action; [return int;] }
var=1
\
let "var+=1"
expr $var+1
echo "$var+1"|bc
表达式 | 含义 |
---|---|
${#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 |
source first
. first
sh first
Awk是一种便于使用且表达能力强的程序设计语言,可应用于各种计算和数据处理任务。
AWK是贝尔实验室1977年搞出来的文本出现神器
之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字符。
$0
当前记录(这个变量中存放着整个行的内容)$1~$n
当前记录的第n个字段,字段间由FS分隔FS
输入字 段分隔符 默认是空格或TabNF
当前记录中的字段个数, 就是有多少列NR
已经读出的记录数,就是行号,从1开 始,如果有多个文件话,这个值也是不断累加中。FNR
当前记录数,与NR不同的是,这个值会是各个文件自己的行号RS
输入的记录分隔符, 默认为换行符OFS
输出字段分隔符 默认也是空格ORS
输出的记录分隔符,默认为换行符FILENAME
当前输入文件的名字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 命令\