Linux发展
Linux起源:Minix 用于教学系统。
Linux分为内核版本和发行版本。
常用的发行版本有:
非图形界面:RedHat(基础功能免费,其他高级服务要收费), CentOS(免费的,现已被RedHat收购), fedaro(收费的,全功能型的)等。
图形界面:Ubantu, debian, KNOPPIX。
由于图形界面不能保证稳定安全性,因此现在常用的是CentOS。开源软件:
Apache:网站服务的搭建软件(你写了一个网页,如何让用户能够访问到你的网页呢,这就是Apache服务器做的事)。
NGINX:同Apache功能,后起之秀。
MySQL,PHP, Pyhon, MongoDB, samba, Ruby, Sphinx等等。
学习Linux,在使用Linux中遇到的问题要即时记下来并记录解决方案。
Linux与windows的区别:
(1)Linux是区分大小写的(字符界面),windows的dos界面不区分大小写;
(2)在Linux中一切内容皆文件,所有内容以文件形式保存,包括硬件;
(3)Windows中是以扩展名作文件类型区分的。而Linux中没有文件扩展名的概念。Linux中使用文件扩展名主要是为了方便管理员的使用。
(4)Windows下的程序是不能直接在Linux中直接安装和运行的。(可以通过在Linux中安装Windows模拟器来运行)格式化的概念
误解:格式化是清空数据的。
格式化的根本目的:写入文件系统。
格式化(高级格式化)又称逻辑格式化,它是根据用户选定的文件系统(如FAT16、FAT32、NTFS、EXT2、EXT3、EXT4等),在磁盘的特定区域写入特定数据,在分区中划出一片用于存放文件分配表、目录表等用于文件管理的磁盘空间。
FAT16:限制最大只支持2G的文件分区。
FAT32:最大分区大小可达16T,但是限制单个文件最大支持4G的文件分区。
NTFS:windows中最先进的文件系统,支持更大的分区和更大的单个文件。
EXT2、EXT3、EXT4:在linux系统中的文件系统,linux中默认的文件系统为EXT4。
在每个分区中有默认的数据块大小,就是我们存储文件的最小空间,当一个文件的数据块有剩余时,不可以用来储存其他文件。(一般默认4KB数据块,可手动设置为1KB,2KB等)在分区列表中,记录了每个文件的ID(叫做i节点),修改时间,文件权限,文件的保存位置等信息。挂载(类似于windows的盘符)
必须分区:/(根分区)、swap分区(交换分区,又叫虚拟内存,当内存小于等于4G时,设置为2倍内存,当内存大于4G时,设置成和内存一样大。)
推荐分区:/boot(启动分区,要留一定的剩余空间以便操作系统启动,所以最好单独分区出来,并且最好不要随便写数据进去)。
Linux文件权限
-rw-r–r–:共10个字符。
其中第一个字符代表的是文件类型,Linux中共有7种文件类型,为-是代表类型是文件,d代表目录,l 代表软链接文件。其他四种为块设备文件、字符设备文件、套接字文件和管道文件。这四种文件为系统的特殊文件,不需要普通用户操作,因此较少使用。
第2-4个字符:代表所有者的权限;
第5-7个字符:代表所属组的用户的权限;
第8-10个字符:代表其他用户的权限。
u所有者,g所属组,o其他人。
r读, w写, x执行。
新的Linux中为11个字符,-rw-r–r–.,其中 . 代表ACL权限(特殊权限)。
Linux命令详解:
一、命令基本格式
1. 命令提示符
[root@localhost ~]#
root 当前登录用户(Linux当中管理员账号是root,而不是Administrator)
localhost 代表当前计算机的主机名:类似于windows的计算机名,但在局域网内,windows中不能有相同的计算机名,否则不能通信,而Linux没有此限制。
~ 当前所在目录(家目录),对于管理员(超级用户)来说,家目录是/root,对于普通用户而言,家目录是/home/用户名/。
# 超级用户的提示符
$ 普通用户的提示符
2. 命令格式
命令 [选项] [参数]
注意:[]代表可选。个别命令使用不遵循此格式(较少见),当有多个选项时,可以写在一起,简化选项为完整选项,如-a等于--all。
ll:ls -l 命令的别名
查询目录中内容:ls
ls [选项] [文件或目录]
选项:
-a 显示所有文件,包括隐藏文件
-l 显示详细信息
-d 查看目录属性
-h 人性化显示文件大小
-i 显示inode
二、文件处理命令
仅创建空白文件,不编辑:touch 文件名
创建空白文件并编辑内容: vi 文件名
touch 和 vi都是创建空白文件,创建的文件类型没有区别,但具体命令细节还是略有区别,可以参考文档:http://blog.sina.com.cn/s/blog_6d3ed6bb0100mw92.html
创建文件夹: mkdir 文件夹名
1. 目录处理命令和文件处理命令
建立目录:mkdir
mkdir -p [目录名]
-p 递归创建
命令英语愿意:make directories
例如:
mkdir human
mkdir -p human/boys
切换所在目录:cd
cd [目录]
命令英文愿意:change directory
简化操作:
cd ~ 进入当前用户的家目录
cd
cd - 进入上次目录
cd .. 进入上一级目录
cd . 进入当前目录
相对路径:参照当前所在目录,进行查找。
如: [root@localhost ~]#cd ../usr/local/src/
绝对路径:从根目录开始制定,一级一级递归查找。在任何目录下,都能进入指定位置。
如: [root@localhost ~]#cd /etc/
查询所在目录位置:pwd
pwd
命令英文原意:print working directory
删除空目录: rmdir
rmdir [目录名]
命令英文原意:remove empty directories(注意只能删除空目录,若目录下有内容,则无法删除)
删除文件或目录: rm
rm -rf [文件或目录]
可选选项:
-r 删除目录
-f 强制,不提问,对于无图形界面的Linux,使用该选项删了后就是删了,很难找回。
若只加选项-r,则对该目录下的所有文件都会进行提醒是否删除。一般情况下,不管后面是文件还是目录,都加-r选项。
注意:在windows下的Administrator是表面上的管理员,其权限是有极限的,而Linux的管理员权限是没有限制的,因此在执行删除命令时,一定要小心,在某些条件下,数据不可恢复。
复制命令: cp
cp [选项] [源文件或目录] [目标目录]
选项:
-r 复制目录
-p 连带文件属性复制
-d 若源文件是链接文件,则复制链接属性
-a 相当于 -pdr(使目标文件与源文件完全一样,包括时间属性、隐藏属性等。)
注意:若目标目录后面不加文件名,则是原名复制;若加文件名,则是改名复制。新复制的文件时间是执行复制命令的时间,若要复制后时间与原来的文件一模一样,则添加-a即可。
剪切或改名命令: mv
mv [原文件或目录] [目标目录]
注意:mv命令在剪切目录时和剪切文件时一样,不需要加-r。
若原文件和目标文件不在同一个目录下就是剪切,若原文件和目标文件在同一个目录下则是改名。
例:mv anaconda-ks.cfg test //将anaconda-ks.cfg改名为test
常用目录的作用
目录 | 作用 |
---|---|
/ | 根目录 |
/bin | 命令保存目录(普通用户就可以读取的命令) |
/boot | 启动目录,启动相关文件 |
/dev | 设备文件保存目录 |
/etc | 配置文件保存目录 |
/home | 普通用户的家目录 |
/lib | 系统库保存目录 |
/mnt | 系统挂载目录 |
/media | 挂载目录 |
/root | 超级用户的家目录 |
/tmp | 临时目录 |
/sbin | 命令保存目录(超级用户才能使用的目录) |
/proc | 直接写入内存的 |
/sys | |
/usr | 系统软件资源目录 |
/var | 系统相关文档内容 |
注意:根目录下的bin和sbin,usr目录下的bin和sbin这四个目录都是用来保存系统命令的。sbin目录只有超级用户可访问。Linux是严谨的操作系统,因此不要随便在某个目录下存放东西,可以放在家目录root或home,以及tmp目录下随便放内容。
2. 链接命令
链接命令: ln
ln -s [原文件] [目标文件]
命令英文原意:link
功能描述:生成链接文件
选项: -s 创建软链接
硬链接特征:
(1)拥有相同的 i 节点和存储block块,可以看做是同一个文件;
(2)可通过 i 节点识别;
(3)不能跨分区;
(4)不能针对目录使用。
注意:硬链接指的是原文件和目标文件访问搜索的是同一个 i 节点,搜索的数据是同一个block,因此删除任意一个另外一个都能正常使用,修改任意一个另外一个文件也会跟着改变。
软链接特征:
(1)类似于Windows快捷方式;
(2)软链接拥有自己的 i 节点和block块,但是数据块中只保存原文件的文件名和 i 节点号,并没有实际的文件数据;
(3)lrwxrwxrwx l 软链接
软链接文件的权限都为rwxrwxrwx
(4)修改任意文件,另一个都改变;
(5)删除原文件,软链接不能使用。
注意:创建一个软链接时,会创建一个自己的 i 节点和自己block,但是它的block中保存的是原文件的相关信息。
若要建立软链接,则源文件一定要写绝对路径,否则就不能正确执行。
三、文件搜索命令
文件搜索命令locate
locate 文件名
// 在后台数据库中按文件名搜索,搜索速度更快。locate命令搜索的后台数据库路
// 径为(数据库默认为1天一次更新): var/lib/mlocate
更新数据库命令:updatedb
优点:速度快;缺点:只可以按文件名来搜索。
Note: 在centOS中执行locate命令出现 locate : command not found 问题,解决方案见博客:
http://blog.csdn.net/vonzhoufz/article/details/8762865
/etc/updatedb.conf 中会指定不搜索某些目录,因此在默写路径下新增文件后,updatedb仍不能搜索到该文件。(该配置文件的筛选规则同样适用于whereis 和 which命令)
配置文件信息如下:
PRUNE_BIND_MOUTS = "yes"(开启搜索限制)
PRUNEFS = (搜索时,不搜索的文件系统)
PRUNENAMES = (搜索时,不搜索的文件类型)
PRUNEPATHS = (搜索时,不搜索的路径)
命令搜索命令whereis和which
whereis 命令名
# 搜索(系统)命令所在路径及帮助文档所在位置
选项:
-b 只查找可执行文件
-m 只查找帮助文件
which 命令名
# 搜索命令所在路径及命令别名(不是所有命令都有别名)
注意:某些命令是不能通过whereis 和 which命令找到,如Linux Shell的内置命令 cd,它不需要独立的可执行文件。即通过whereis 和which命令能搜索的命令都是外部安装的外来命令,whereis和which搜索命令的路径是由PATH决定的。
PATH环境变量
PATH环境变量:定义系统搜索命令的路径,使用冒号进行分隔。Windows也通过PATH来设置环境变量,若在windows的DOS下执行命令,系统会在PATH中搜索命令的所在位置,若要使用的命令不使用绝对路径就能执行,则必须将命令的路径添加到环境变量中。
[root@localhost ~]# echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/yh/.local/bin:/home/yh/bin
文件搜索命令find
find [搜索范围] [选项] [搜索条件]
# 搜索文件
find / -name install.log
# 避免大范围搜索,会非常耗费系统资源
# find是在系统当中搜索符合条件的文件名(完全匹配)。如果需要模糊匹配,则使用通配符匹配,通配符是完全匹配。
Linux中的通配符(在使用通配符时,需要加""将字符串括起来):
* 匹配任意内容
? 匹配任意一个字符
[] 匹配任意一个中括号内的字符
例如:find /root -name "ab[cd]" :搜索文件名叫abc或abd的文件。
find /root -iname install.log
# 文件名不区分大小写
find /root -user root
# 按照所有者搜索,上面的命令表示在/root目录下搜索所有者是root的文件。
find /root -nouser
# 查找没有所有者的文件,在Linux系统中没有所有者的文件是垃圾文件,应手工清楚。但有两种特殊情况:(1)由Linux内核产生的某些文件(proc、sys下的文件,不要去处理这些文件);(2)外来文件,例如从windows中拷贝到Linux系统的文件,windows忽略所有者的概念。
find /var/log/ -mtime +10
# 查找/var/log/目录下10天前修改的文件
-10 10天内修改文件
10 10天当天修改的文件
+10 10天前修改的文件
atime 表示文件访问时间
ctime 表示改变文件属性的时间
mtime 表示修改文件内容的时间
find . -size 25k
# 表示查找当前目录(.)下文件大小时25KB的文件
-25k 小于25KB的文件
25k 等于25KB的文件
+25k 大于25KB的文件
若要搜索MB单位的文件,则为25M,注意M为大写,k为小写,搜索时必须带单位,若不带单位,则搜索时为数字大小乘以一个扇区的大小(512Bytes)。
find . -inum 262422
# 已知i节点号,在当前目录下查找i节点是262422的文件
find /etc -size +20k -a -size -50k
# 查找/etc目录下,大于20KB并且小于50KB的文件。(多条件查询)
-a and 逻辑与,两个条件都满足
-o or 逻辑或,两个条件满足一个即可
find /etc -size +20k -a -size 50k -exec ls -lh {} \;
# 查找/etc/目录下,大于20KB并且小于50KB的文件,并显示详细信息
# -exec/ -ok 命令 {} \; 对搜索结果执行操作,即-exec前面的命令执行结果交给从-exec后面到{} \;(后面四个字符为使用-exec的标准格式) 之间的命令来操作。
例如: find /root -inum 262421 -exec rm -rf {} \;
# 查找节点号为262421的文化,找到后删除它。
字符串搜索命令grep
grep [选项] 字符串 文件名
# 在文件当中匹配符合条件的字符串
-i 忽略大小写
-v 排除指定字符串
例如:grep "size" anaconda-ks.cfg
# 在anaconda-ks.cfg文件中搜索包含关键字size的行。
find命令与grep命令的区别:
find命令:在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配。
grep命令:在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式是包含匹配。
通用规则: 搜索文件的文件名时使用通配符,搜索文件中的数据时使用正则表达式。
四、帮助命令
帮助命令man
man 命令
# 获取指定命令的帮助
在manuals里面,可以像使用vim编辑器一样,使用“/字符串”进行字符串搜索,按n表示跳转到下一个符合条件的字符串,shift+n表示跳转到上一个符合条件的字符串。
man -f 命令 相当于 whatis 命令
# 查看命令拥有哪个级别的帮助
man 级别 命令
# 查看某个特定级别的命令,如: man 4 null
man -k 命令 相当于 apropos 命令
# 查看和命令相关的所有帮助,如:apropos passwd
man的级别
级别 | 类型 |
---|---|
1 | 查看命令的帮助 |
2 | 查看可被内核调用的函数的帮助 |
3 | 查看函数和函数库的帮助 |
4 | 查看特殊文件的帮助(主要是/dev目录下的文件) |
5 | 查看配置文件的帮助 |
6 | 查看游戏的帮助 |
7 | 查看其它杂项的帮助 |
8 | 查看系统管理员可用命令的帮助 |
9 | 查看和内核相关文件的帮助 |
man 命令打开帮助文档后,在左上角括号里有级别信息。
其他帮助命令
选项帮助
命令 --help
# 获取命令选项的帮助
例如: ls --help
shell内部命令帮助
help shell内部命令
# 获取shell内部命令的帮助
例如:
whereis cd
# 确定是否是shell内部命令,只要whereis找不到执行文件就是内部命令,否则就不是。
help cd
# 获取内部命令帮助
详细命令帮助info
info 命令
进入详细的命令说明文档后按:
回车: 进入子帮助页面(带有*号标记)
u: 进入上层页面
n: 进入下一个帮助小节
p: 进入上一个帮助小节
q: 退出
五、压缩与解压缩命令
Linux中常用的压缩格式:.zip .gz .bz2 .tar.gz .tar.bz2(这两个最常用)。
.zip格式压缩
zip 压缩文件名 源文件
# 压缩文件
zip -r 压缩文件名 源目录
# 压缩目录
unzip 压缩文件
# 解压缩.zip文件
注意:压缩文件名不一定需要写压缩扩展名,但是为了便于识别,最好是写上对应的压缩格式扩展名。windows和linux中的.zip格式是通用的。windows中的.rar文件是不能在linux中解压缩的。
.gz格式压缩
gzip 源文件
# 压缩为.gz格式的压缩文件,源文件会消失
gzip -c 源文件 > 压缩文件
# 压缩为.gz格式,源文件保留
gzip -r 目录
# 压缩目录下所有的子文件,但是不能压缩目录
gzip -d 压缩文件
# 解压缩文件
gunzip 压缩文件
# 解压缩文件
.bz2格式压缩
bzip2 源文件
# 压缩为.bz2格式,不保留源文件
bzip2 -k 源文件
# 压缩之后保留源文件
bzip2 -d 压缩文件
# 解压缩,-k保留压缩文件
bunzip2 压缩文件
# 解压缩,-k保留压缩文件
注意:bzip2命令不能压缩目录。
打包命令tar
tar -cvf 打包文件名 源文件
选项: -c: 打包 -v: 显示过程 -f: 指定打包后的文件名
tar -xvf 打包文件名
选项: -x: 解打包
注意:先使用tar命令将文件进行打包,然后再使用gzip或bzip2命令进行压缩。这样解决了gzip和bzip2不能直接压缩目录的问题。
.tar.gz压缩格式
其实.tar.gz格式是先打包为.tar格式,再压缩为.gz格式。
tar -zcvf 压缩包名.tar.gz 源文件
选项: -z: 压缩为.tar.gz格式
需要压缩多个文件时,多个源文件以空格分隔。
tar -zxcf 压缩包名.tar.gz
选项: -x: 解压缩.tar.gz格式
tar -zxcf 压缩包名.tar.gz -C 解压缩位置
# 将压缩包解压到指定的解压缩位置
.tar.bz2压缩格式
tar -jcvf 压缩报名.tar.bz2 源文件
选项: -j: 压缩为.tar.bz2格式
tar -jxcf 压缩包名.tar.bz2
选项: -x: 解压缩为.tar.bz2格式
六、关机和重启命令
1. shutdown命令
shutdown [选项] 时间
选项:
-c: 取消前一个关机命令
-h: 关机
-r: 重启
shutdown -r now
注意:在服务器上做关机重启操作时一定要格外小心,先关闭服务器上的服务,再进行关机重启操作。(服务器一直高速运转,因此不当的关机重启会造成硬盘损坏,数据库丢失,系统崩溃等等)。使用shutdown命令即可,不要使用其他命令。(其他命令不安全)
2. 其他关机命令
halt
poweroff
init 0
3. 其他重启命令
reboot (reboot命令相对安全,可以使用,但init 6命令不安全,不要使用。了解有这些命令即可。)
init 6
4. 系统运行级别
0 关机(不能设为系统默认级别)
1 单用户
2 不完全多用户,不含NFS服务
3 完全多用户
4 未分配
5 图形界面
6 重启(不能设为系统默认级别)
init 运行级别: 进入到对应的运行级别。
如init 5 进入图形界面,前提是系统安装了图形界面。
runlevel: 查询系统运行级别(N表示null)
N 3表示从null进入3级别
cat /etc/inittab: 修改系统默认运行级别
id:3:initdefault:
cat命令
cat主要有三大功能:
1.一次显示整个文件。$ cat filename
2.从键盘创建一个文件。$ cat > filename
只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件: $cat file1 file2 > file
参数:
-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting
例:
把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
cat -n textfile1 > textfile2
把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。
cat -b textfile1 textfile2 >> textfile3
把test.txt文件扔进垃圾箱,赋空值test.txt
cat /dev/null > /etc/test.txt
参考链接:https://www.cnblogs.com/perfy/archive/2012/07/23/2605550.html
5.退出登录命令(在windows中叫注销)
logout:管理服务器时每次管理完应该养成退出登录的习惯。
Linux默认同时能远程登录256个用户,最大可达20000个。
七、其他常用命令
1. 挂载命令
(1)查询与自动挂载
[root@localhost ~]# mount
# 查询系统中已经挂载的设备
[root@localhost ~]# mount -a
# 依据配置文件/etc/fstab的内容,自动挂载
2. 挂载命令格式
[root@localhost ~]# mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点
选项:
-t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3、ext4、iso9660等文件系统;
-o 特殊选项:可以指定挂载的额外选项。
例如:
[root@localhost ~]# mount -o remount,noexec /home
# 重新挂载/home分区,并使用noexec权限
Linux中写脚本:
vi hello.sh
#!/bin/bash //该句必不可少
echo "hello world!"
3. 挂载光盘
注意,首先得先添加光盘,双击虚拟机上的光盘图标,硬件->CD/DVD->右方选择ISO映像文件,即光盘文件,设备状态将“已连接”勾选上,确定。然后再执行下面的命令操作:
[root@localhost home]# mkdir /mnt/cdrom/
# 建立挂载点(任何空目录都可作为盘符)
# media、mnt、misc三个目录都是空目录,是系统预留作为挂载点的。
[root@localhost home]# mount [-t iso9660] /dev/sr0 /mnt/cdrom/
# 将光盘的设备文件名/dev/sr0(系统设置的)挂载到盘符/mnt/cdrom/上
# 方括号内的内容可省略,为默认情况
4. 卸载命令(类似于windows弹出盘符)
[root@localhost ~]# umount 设备文件名或挂载点
[root@localhost ~]# umount /mnt/cdrom/
# 任选其一,不能执行两次,出现设备正忙的警告:因为正在光盘的路径里,需先退出光盘路径。
注意:卸载命令是必须执行的,不能省略。
5. 挂载U盘
[root@localhost ~]# fdisk -l
# 查看U盘设备文件名
[root@localhost ~]# mount -t vfat /dev/sdb1 /mnt/usb/
# 注意:Linux默认是不支持NTFS文件系统的,可以安装ntfs-3g,但安装后NTFS也只能是只读的。
# vfat: 指定U盘的文件系统是fat32
其他:用户登录查看
1. 查看登录用户信息
w [用户名]
命令输出:
USER:登录的用户名
TTY:登录终端;
FROM:从哪个IP地址登录;
LOGIN@:登录时间;
IDLE:用户闲置时间;
JCPU:指的是和该终端连接的所有进程占用的时间。这个时间里并不包括过去的后台
作业时间,但却包括当前正在运行的后台作业所占用的时间;
PCPU:是指当前进程所占用的时间;
WHAT:当前正在运行的命令
who [用户名]
命令输出:
- 用户名
- 登录终端
- 登录时间(登录来源IP地址)
2. 查询当前登录和过去登录的用户信息
last
# last命令默认是读取/var/log/wtmp文件数据(这是个二进制文件,防止人为修改)
命令输出:
- 用户名
- 登录终端
- 登录IP
- 登录时间
- 推出时间(在线时间)
3. 查看所有用户的最后一次登录时间
lastlog
# lastlog命令默认是读取/var/log/lastlog文件内容
命令输出:
- 用户名
- 登录终端
- 登录IP
- 最后一次登录时间