在这个互联网极度发达的世纪,服务器得到了非常广泛的应用,再加上B/S架构的发展,所以鄙人对Linux的运维产生了浓厚的兴趣,于是便开始步上了这条Linux的学习之路。
我所有写的博文都是为了记录自己所学的,所感兴趣的知识,类似日记的形式吧,都说好记性不如烂笔头,从记录自己的学习之路中我也能感受到许多不一样的乐趣。
废话不多说,众所周知的linux是一个开源的、免费的、多用于服务器的性价比非常高的操作系统。
linux下有非常多的自由软件,linux十分稳定、安全并且性能卓越,其硬件支持十分广泛,具有优秀的开发环境和开发工具,最主要的是具有强大的网络支持功能,可以说整个internet都运行在linux之上。
centos和redhat、ubuntu都是linux的发行版本,但是redhat是付费的,centos和ubuntu是免费的,其中centos是社区操作系统,继承了redhat的大部分功能但不包含封闭源代码软件,而ubuntu则是出售服务,安装免费并且具有庞大的社区量,用户可以方便的从社区获得帮助。
我在学习的时候用的是redhat 6.3的系统。
让我们从最基本的地方开始了解linux吧~
linux的操作基本都是在字符界面下做的,这个黑色的字符界面叫Shell,命令解释器。shell 是一种具备特殊功能的程序,它是介于使用者和 kernel间的一个接口, 一个供命令得以执行的平台,shell 自身就是一个解释型的程序设计语言。
shell 如何解析一个完整的命令行?
命令行的处理过程如下:
1. 历史命令替换
2. 命令行拆分为 token(单词)(以空格或 tab 隔开, 即以空白隔开)
3. 历史更新
4. 处理引用
5. 定义别名替换和函数
6. 建立重定向、后台、管道
7. 变量替换($USER、$NUM 等)
8. 命令替换(echo "abc `date` def")
9. 文件名替换(*.conf -> a.conf b.conf)
10. 程序执行(内部命令、外部命令(二进制程序)、shell 脚本程序等)
最初的Shell介绍就先到这里把~详细的Shell编程我会记录到另一篇文章中。
我们有了操作的环境了,那我们该干些什么呢?
首先来看一些基本的系统命令吧:
cd 目录 (进入目录)
这里要提的一点是,linux的文件系统是一个树型结构,所有的文件、目录都是从/(根)开始的。用tree命令可以清晰的看到目录树的结构。
ls 目录 (查看目录中的内容)
mkdir 目录(创建文件夹)
touch 文件(创建空文件)
rm -rf 文件或目录 (删除文件或目录)
千万别rm -rf /
警告:不要删除根目录,因为所有的目录都在根目录下
cp 源 目的 (拷贝文件或目录)
uname -r (查看内核版本)什么叫内核版本呢?假设每个不同的linux系统都是用的同一个人编写的Linux内核,就相当于系统的心脏,就先这么了解吧,之后再细说linux的内核编译。
ln -s 源 目标 (创建一个符号链接,相当于快捷方式)
df -Th (查看系统正在使用的文件系统)
这里就顺便说一下文件系统,例如:
/dev/sda2 设备文件
/dev 专门用来存放设备文件的目录 (存放磁盘的设备文件、光驱、鼠标、键盘等)
sda2
sd代表的是磁盘的接口类型:usb接口、scsi、sata
a代表第一块磁盘
2代表的是磁盘里的分区编号
free -m (查看内存的使用情况)
du -sh 文件或文件夹 (查看大小)
mv 1、移动文件或者目录 2、重命名
linux里的超级管理员是root
windows的超级管理员是administrator
我们的服务器的网络配置是怎么样的呢?
用ifconfig命令可以清晰的看到系统的网络配置
具体的命令怎么用我在博客里不会记录了,想要知道命令如何使用最常用的方法就是man和help了,实在看不懂的话就baidu和google吧~
hostname 是查看主机名
pwd 查看当前所在的路径
alias 查看别名,在系统默认就定义了很多别名了,比如说ll这个命令就是ls -l的别名
alias c=clear 定义c是clear
unalias c 取消别名
对了,在linux中tab键的用途是非常强大的,它可以进行命令补齐,但命令必须是在PATH中存在的
whereis cp 查看这个命令在哪
which cp 查看cp这个命令存在linux系统里的路径
cat 查看文件里的内容
tac 从最后一行倒着显示文件的全部内容
history 查看历史命令
head 和tail 用来查看开头几行和末尾几行
tail -f /var/log/secure 动态监控文件/var/log/secure末尾的变化,只要已有变化,马上在屏幕上输出
find /boot -type d 在/boot目录下查找文件类型是目录的
find /boot -name grub.conf -exec ls -l {} \;
-exec 将前面满足条件的文件找出来后,执行后面的命令
ls -l 是后面需要执行的命令
{} 代表前面满足条件查找出来的结果
\; 结束标志
find是比较重要的一个命令,这里稍微细说一下,直接来几个例子吧:
1。查找出名字为dmesg的文件,然后将此文件复制到/tmp目录下
find / -name dmesg -exec cp {} /tmp -rf \;
2。查找出大小大于1000M 或者名字为redhat
find / -size +1000M -o -name redhat
3。查找出/boot目录下非目录类型的文件同时大小大于1M
find /boot ! -type d -a -size +1M
find /boot -size +2000k -o -name vmlinuz-2.6.18-194.el5 -o -type f
-o 是逻辑或 满足一个即可
-a 是逻辑与 多个条件同时满足
-not 逻辑非 !
找出系统中名为passwd的文件,并且把找出的文件打包起来
find / -name passwd|xargs -exec tar -cvf /test.tar.gz
xargs 把文件变为参数
echo $PATH PATH环境变量,作用是shell程序查找命令的时候到PATH变量包含的路径去查找,如果命令不在包含的路径内则提示,就找不到命令
echo 是打印命令
就先介绍上面这些常用的命令,接下来让我们来尽情的玩转linux吧~
压缩和打包的几种方法:
zip、gzip(只能将一个文件压缩)、bzip、tar
最常用的是tar命令,这是一个强大的打包压缩命令,常用tar命令来进行系统的备份。
这里详细介绍一下tar命令:
tar 命令
用途:制作归档文件,释放归档文件
格式:tar [选项]...归档文件名 源文件名或目录
tar [选项]...归档文件名 [-C 目标目录]
常用命令选项
-c:创建.tar格式的包文件
-x:解开.tar格式的包文件
-v:输出详细信息
-f :表示使用归档文件
-t:列表查看报内的文件
-p:保持原文件的原来属性
-P:保存原文件的绝对路径
tar 可以将多个文件打包压缩成一个文件,经常用来备份
tar czvf back_2012-7-10.tar.gz hosts passwd 将2个文件打包成back_2012-7-10.tar.gz
czvf .tar.gz
cjvf .tar.bz2
tar --exclude file -czvf back.tar.gz /back/* 将/back目录下除file文件以外的所有文件和目录打包压缩 成back.tar.gz文件
linux的文件编辑器:
本人最常用的编辑器是vim编辑器,这是一个强大的编辑器。
1。vim abc 编辑abc文件,如果abc存在就是打开原来的文件,如果不存在就是新建一个abc文件
2。按字母a(append)或者i(insert )进入输入模式(插入模式)
3。开始输入文字
4。按ESC键进入命令模式
5。按shift+;进入末行模式,然后输入wq (退出保存) write quit
命令模式---输入模式
末行模式
vim 文件名 ->命令模式
命令模式 R->替换模式
:->末行模式
a,i,o->输入模式
v->可视模式
可视模式
命令模式按v或者V
按ctrl+v进入可视块模式
i 光标在当前位置进入插入模式
I 光标跳到行首并进入插入模式
a 光标后退一格并进入插入模式
A 光标退到行尾并进入插入模式
o 在光标所在行下新起一行并进入插入模式
O 在光标所在行上新起一行并进入插入模式
s 删除光标所在字符并进入插入模式
S 删除光标所在行并进入插入模式
:x 等于:wq 末行模式下使用
:x!等于:wq!
ZZ是在命令模式下使用
^ 跳转到行首
$ 跳转到行尾
gg 或 1G 跳转到文件的首行
G 跳转到文件的末尾行
#G 跳转到文件中的第#行
末行模式
:set number 显示行号
10G 跳到第10行
1G 跳到第1行
G 跳到末尾
dd 是删除光标所在行
#dd 从光标所在行,往下删除#行
x或Del 删除单个字符
d^ 删除当前光标之前到行首的所有字符
d$ 删除当前光标处到行尾的所有字符
u 是撤销
U 用于取消对当前行所做的所有编辑
ctrl+r 是恢复
yy 是复制光标所在行
#yy 是复制光标所在行往下#行
p 是粘贴 在光标所在行之后
P 粘贴到光标位置处之前
/word 从上而下在文件中查找字符串“word”
?word从上而下在文件中查找字符串“word”
/mingyue 查找mingyue字符串 从第1行到最后一行
n (next) 下一个
N 上一个
?file 查找file字符串 从最后行到第一行
n (next) 上一个
N 下一个
:set nonu 取消显示行号
:set nu 显示行号
:s/old/new 将当前行中查找到的第一个字符“old”串替换为“new”
:6,8s/199/188/g 将第6行到第8行内所有的199替换为188
:%s/188/200/g 将整篇文章里的188替换为200
:%s/200/222/gc 将整篇文章里的200替换为222,但是要求给予确认
y 是替换 n是不替换 a 是全部替换
:w /boot/haoming.txt 另存为
:r /etc/hosts 将/etc/hosts文件导入到当前文件里,(读入)
:e /etc/hosts 打开一个新文件,在vim编辑器里,不退出的情况下
:e! 撤消对文件的所有操作,重新开始
vim 编辑器的介绍就到这里吧~
输入输出重定向:
1> 输出重定向,会覆盖原来文件里的内容
cat c.txt >d.txt
>> 追加,不会覆盖原来的内容,只是在末尾追加
cat c.txt >>d.txt
标准输入 :键盘、文件 0
标准输出 :屏幕、终端 1
错误输出 :屏幕、终端 2
/proc/self/fd 标准输入输出文件夹
2> 错误输出,只有在有错误的时候才会输出重定向到某个文件,会覆盖原来文件里的内容
2>> 错误输出,追加,只有在有错误的时候才会输出重定向到某个文件,不会覆盖原来文件里的内容
fjkdjfkdfjkdfjkfjkjfkjk 2>>de.txt
&> 不管是正确的输出还是错误的输出都重定向到一个文件里,但是会覆盖原来的内容
cat /etc/hostsfdfdfdf 1>yy.txt 2>&1
1>yy.txt 2>&1 等同于 &>yy.txt
< 导入
wc <iso.txt wc是一个统计命令,可以统计文件里有多少行,多少单词,多少字节
gunzip <passwd.gz >passwd
find .|cpio -co >/tmp/vim2/vim2.cpio cpio是一个备份的命令 ,将当前目录下的文件找出来,然后送给cpio这个命令进行备份,备份到 /tmp/vim2/vim2.cpio这个文件
cpio -t <vim2.cpio 查看备份文件里的内容
/dev/null 黑洞
useradd feng &>/dev/null 不在屏幕上有任何信息输出。
/dev/zero
dd if=/dev/zero of=linux.out bs=1M count=200 生成一个200M的大文件
dd 是一个命令,可以用来备份
if inputfile 输入文件
of outputfile 输出文件
bs 块的大小,块是格式化的时候,磁盘最小物理存储单元
count 块的数量
| 管道符号 作用:将前面一个命令的输出作为后面一个命令的输入
cat passwd|wc -l 统计有多少行 -w 单词个数 -c 字节数
下面又是一个重要的命令:grep命令
grep在一个文件里搜索字符串,搜索到匹配的字符串后,会将整行内容显示到屏幕
cat /etc/passwd|grep root 在/etc/passwd文件里查找出包含root的行
cat /etc/passwd|grep bash|wc -l 统计出有多少个用户是使用bash的
在/etc/passwd文件中过滤出用户root和用户ftp的信息
cat passwd | grep -E "root|ftp" -E 让grep支持扩展的正则表达式 |表示或的意思
更多的grep我会在shell的文章中详细介绍
使用tr命令把/etc/passwd中的root改为ROOT重定向到当前目录下为passwd_tr.txt
tr "root" "ROOT"<passwd>passwd_tr.txt
利用seq输出10到150的值,再结合其它命令计算10到150的和
seq 10 150 | xargs | tr " " "+" | bc
给文件或文件夹打补丁:
diff qq.txt qq_v2.txt 对比两个文件的差异
diff -urN qqv1 qqv2>qqv1-to-qqv2.patch 生成补丁
给文件打补丁
patch hosts < hosts-to-hosts_v2.patch 打补丁
patching file hosts
patch -R hosts<hosts-to-hosts_v2.patch 恢复打补丁之前的文件
给目录打补丁
cp qqv1-to-qqv2.patch qqv1
cd qqv1
patch -p1<qqv1-to-qqv2.patch -p1 忽略第一层目录
patching file nongda/619/suzhangmen
patching file qq.txt
patch -p0<qqv1-to-qqv2.patch -p0 不忽略第一层目录
patch -Rp1<qqv1-to-qqv2.patch 恢复打补丁之前的文件夹
-p1和-p0的差别
-p1是将补丁文件拷贝到要升级的目录里,进行打补丁,也可以直接给出补丁路径,例如:patch -p1<../1-to-2.patch
-p0是不需要将补丁文件拷贝到目录下,直接在目录外进行,但是注意,先将原来的新版本的目录改名或者移动到别的地方。
常用-p1
给目录打补丁的关键点
1.生成目录补丁
2.复制目录补丁到需要打补丁的目录里
3.进入需要打补丁的目录
4.使用patch -p1<补丁文件,开始打补丁