Linux基础

  • 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等于--allllls -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中保存的是原文件的相关信息。
若要建立软链接,则源文件一定要写绝对路径,否则就不能正确执行。
硬链接与软链接的区别图,bs为硬链接,csb为软链接

三、文件搜索命令

文件搜索命令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
- 最后一次登录时间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值