linux入门
安装CentOS
安装虚拟机
创建虚拟机
创建虚拟机时,选择稍后安装操作系统
创建完成后,可以设置虚拟机的内存、处理器等。
-
处理器设置页面
【虚拟化Intel Vt-x/EPT或AMD-V/RVI(V)】的作用是在虚拟机需要处理大数据量时,勾选之个选择后,能够处理得更加快速,但会占用系统资源 -
CD/DVD(IDE)
默认【启动时连接】即可
初始安装系统,勾选【使用ISO映像文件(M)】,并选择ISO映像文件 -
网络适配器
默认【启动时连接】即可。选择桥接模式。
在VM虚拟机这个软件安装完后,在电脑的【控制面板】的【网络连接】中会出现两个网卡
【VMware Virtual Ethernet Adapter for VMnet1】与【VMware Virtual Ethernet Adapter for VMnet8】
桥接模式:这个模式是直接使用真实的物理网卡,会独立占用IP
NAT模式:可以上网,使用【VMware Virtual Ethernet Adapter for VMnet8】这个虚拟网卡与真实机进行通信
仅主机模式:不可以上网,使用【VMware Virtual Ethernet Adapter for VMnet1】这个虚拟网卡与真实机进行通信
如果选择了【NAT模式】或【仅主机模式】,则虚拟机只能与本机通信,而不能直接与局域网内的其它机器通信 -
拍摄快照
点击VM虚拟机工具栏中的【拍摄此虚拟机的快照】
快照这个功能,对学习很方便
系统分区
- 系统分区
主分区:最多只能有4个。硬盘结构决定,每个扇区512B,其中64B是记录分区(16B记录一个分区)
扩展分区:最多只能有1个;主分区加扩展分区最多有4个;不能写入数据,只能包含逻辑分区。
逻辑分区
- 格式化
格式化不是为了清空数据,而是为了写入文件系统(如FAT16、FAT32、NTFS、EXT2、EXT3、EXT4等)。
把分区划分成相等大小的数据块(block),方便存储文件
在分区列表里,建立表格,记录每个文件的节点、修改时间、权限、文件保存位置等
- 分区文件名及挂载
分区 ---> 格式化 ---> 给每一个分区起一个设备文件名 ---> 起一个盘符
在linux中每一个硬件,都是文件
-
设备文件名
/dev/hda1
(IDE硬盘接口,古老的,速度比较慢)
/dev/sda1
(SCSI硬盘接口(比较老,速度没SATA快)、SATA硬盘接口) -
挂载
必须分区:
/
根分区
swap
分区(交换分区,内存2倍,不超过2GB)
推荐分区:
/boot
启动分区,200MB
下载CentOS
安装CentOS
-
为虚拟机设置CentOS的ISO映像文件
【CD/DVD】 选择 使用ISO映像文件 , 并选择相应的CentOS映像文件 -
开启虚拟机
不要安装图形界面 -
设置root密码为root
以后测试开发用的都设置为用户名与密码相同
连接软件
- SecureCRT
- WinSCP
- XShell
常用目录及作用
/
根目录/bin
命令保存目录(普通用户就可以读取的命令)/boot
启动目录,启动相关文件/dev
设备文件保存目录/etc
配置文件保存目录/home
普通用户的家目录/lib
系统库保存目录/mnt
系统挂载目录/media
挂载目录
/root
超级用户的家目录/tmp
临时目录/sbin
命令保存目录(超级用户才能使用的目录)/proc
直接写入内在的,不能直接操作/sys
直接写入内在的,不能直接操作/usr
系统软件资源目录
/usr/bin
系统命令(普通用户)
/usr/sbin
系统命令(超级用户)
/var
系统相关文档命令
在家目录/home
或/tmp
目录操作,其它的一般不要操作
linux常用命令
命令提示符(由echo $PS1
定义):
[root@centos7 ~]#
root: 用户名
centos7: 主机名
~
: 家目录
#
超级用户提示符,普通用户提示符为$
命令基本格式
命令 [选项] [参数]
注意:个别命令使用不遵循此格式
当有多个选项时,可以写在一起
简化选项与完整选项 -a表示--all
使用命令ls -lh
-rw-r--r--
(r读w写x执行)
第1个字符表示文件类型(-
文件 d
目录 l
软链接文件)
第2到第4个表示所有者权限 rw-
第5到第7个表示所属组权限 r--
第8到第10个表示其他人权限 r--
文件处理命令
-
建立目录:
mkdir
(make directories)
mkdir -p [目录名]
-p 递归创建,即,如果父目录不存在,则创建之 -
切换所在目录:
cd
(change directory)
简化操作
cd ~
进入当前用户的家目录
cd
cd -
进入上次目录
cd ..
进入上一级目录
cd .
进入当前目录 -
pwd
(print working directory) -
删除空目录:
rmdir
(remove empty directory) -
删除文件或目录:
rm
rm -rf [文件或目录]
直接删除,使用时需要注意
-r
删除目录
-f
强制 -
复制命令:
cp
(copy)
-r
复制目录
-p
连带文件属性复制
-d
若源文件是链接文件,则复制链接属性
-a
相当于-pdr
-
剪切或改名命令:
mv
(move)
mv [原文件或目录] [目标目录]
-
链接命令:
ln
(link)
ln -s [原文件] [目标文件]
生成链接文件
-s
创建软链接
硬链接特征:
- 拥有相同的i节点和存储block块,可以看做是同一个文件
- 可通过i节点识别
- 不能跨分区
- 不能针对目录使用
软链接特征:
- 类似windows快捷方式
- 软链接拥有自己的I节点和Block块,但数据块中只保存原文件的文件名和I节点号,并没有实际的文件数据
lrwxrwxrwx
l
表示软链接 软链接文件权限都为rwxrwxrwx
- 修改任意文件,另一个都改变
- 删除原文件,软链接不能使用
文件搜索命令
locate
centos7最小安装时,没有locate命令
locate 文件名
只能搜索文件名
在后台数据库中按文件名搜索,搜索速度比较快
/var/lib/mlocate
locate
命令所搜索的后台数据库
数据库不是实时更新的,应该是每天自动更新一次
所以使用locate
命令时,有可能搜索不出来
updatedb
更新数据库
/etc/updatedb.conf
配置文件
PRUNE_BIND_MOUNTS = "yes"
开启搜索限制PRUNEFS =
搜索时,不搜索的文件系统PRUNENAMES =
搜索时,不搜索的文件类型PRUNEPATHS =
搜索时,不搜索的路径
whereis与which
PATH环境变量: 定义的是系统搜索命令的路径 也是查找命令位置的路径
[root@centos7 etc]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
whereis 命令名
只能搜索系统的命令,不能搜索自定义的命令
搜索命令所在路径及帮助文档所在位置
-b
: 只查找可执行文件
-m
: 只查找帮助文件
whereis
可以看到命令所在位置,还可以看到命令的帮助文档
which
只能看命令的位置,可以看到命令的别名
find
文件搜索的最强大功能find
搜索文件: find [搜索范围] [搜索条件]
示例: find / -name install.log
避免大范围搜索,会非常耗费系统资源
find
是在系统当中搜索符合条件的文件名。如果需要匹配,使用通配符匹配,通配符是完全匹配
find /root -iname install.log
不区分大小写find /root -user root
按照所有搜索find /root -nouser
查找没有所有者的文件find /var/log/ -mtime +10
(modify)查找10天前修改的文件(-10表示10天内,10表示10天当天,+10表示10天以前)find /var/log/ -atime +10
(access)文件访问时间find /var/log/ -ctime +10
(change)改变文件属性find . -size 25k
查找文件大小是25KB的文件(k为小写的k,M为大写的。-25k表示小于25KB的文件,25k表示等于25K,+25k表示大于25K)find . inum 262422
查找i节点是262422的文件
linux中的通配符
*
匹配任意内容?
匹配任意一个字符[]
匹配任意一个中括号内的字符
grep
搜索字符串命令: grep [选项] 字符串 文件名
在文件中匹配符合条件的字符串
选项:
-i
: 忽略大小写
-v
: 排除指定字符串
-a
: 将二进制文件当成文本文件进行读取(文件内容中出现乱码的情况)
-n
: 同时输出行号
--colour
: 高亮匹配的文本
-B 10
: 输出前面10行
-A 10
: 输出后面10行
-C 10
: 输出前后10行,相于-B 10 -A 10
find vs grep
find命令:在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配。
grep命令: 在文件当中搜索符合文件中的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式时包含匹配
帮助命令
man 命令
如: man ls
help shell内部命令
获取shell内部命令的帮助
例如:
whereis cd
确定是否为shell内部命令(没有可执行文件)
help cd
获取shell内部命令的帮助
info 命令
详细命令帮助info
回车
进入子帮助页面(带有*号标记)
u
进入上层页面
n
进入下一个帮助小节
p
进入上一个帮助小节
q
退出
压缩与解压命令
常用压缩格式: .zip
.gz
.bz2
.tar.gz
.tar.bz2
zip
最小安装没有zip命令
zip 压缩文件名 源文件
# 压缩文件
zip -r 压缩文件名 源目录
# 压缩目录
unzip 压缩文件名
# 解压文件
gz只能压缩文件
gzip 源文件
# 压缩为.gz格式的压缩文件,源文件会消失
gzip -c 源文件 > 压缩文件
# 压缩为.gz格式,源文件保留 (-c
为输出到屏,>
为重定向输出)
gzip -r 目录
# 压缩目录下所有的子文件,但是不能压缩目录
gzip -d 压缩文件
# 解压文件
gunzip 压缩文件
# 解压文件
gunzip -r 目录
# 解压目录下所有压缩文件
.tar.gz与.tar.bz2
tar -cvf 打包文件名 源文件
-c
:打包-v
:显示过程-f
:指定打包的文件名-t
:列出归档内容tar -tvf 打包文件名
-x
:从归档中解出文件tar -xvf 打包文件名
-z
:通过 gzip 过滤归档tar -zcvf 压缩包名.tar.gz 源文件
tar -zxvf 压缩包名.tar.gz
-j
:过 bzip2 过滤归档tar -jcvf 压缩包名.tar.bz2 源文件
tar -jxvf 压缩包名.tar.bz2
关机和重启命令
shutdown [选项] 时间
使用这个命令比较安全
-c
:取消前一个关机命令-h
:关机-r
:重启
其他关机命令
halt
poweroff
init 0
其他重启命令
reboot
init 6
系统运行级别
runlevel
查看系统运行级别
cat /etc/inittab
修改默认运行级别 id:3:initdefault:
- 0 关机
- 1 单用户
- 2 不完全多用户,不含NFS服务
- 3 完全多用
- 4 未分配
- 5 图形界面
- 6 重启
退出登录命令
logout
其他常用命令
linux 挂载命令
mount # 查询系统中已挂载的设备
mount -a # 依据配置文件/etc/fstab的内容,自动挂载
mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点
mkdir /mnt/cdrom/ # 建立挂载点
mount -t iso9660 /dev/sr0 /mnt/cdrom/ # 挂载光盘
umount /mnt/cdrom/ # 卸载挂载点
挂载U盘(linux默认不支持NTFS文件系统的)
fdisk -l # 查看U盘设备文件名
mount -t vfat /dev/sdb1 /mnt/usb/
linux用户登录查看命令
w 用户名
- USER: 登录用户名
- TTY: 登录终端
- FROM: 从哪个IP地址登录
- LOGIN@: 时间
- IDLE: 用户闲置时间
- JCPU: 指的是和该终端连接的所有进程占用的时间
- PCPU: 是指当前进程所占用的时间
- WHAT: 当前正在运行的命令
who 用户名
- 用户名
- 登录终端
- 登录时间(登录来源IP)
last # 所有用户的登录信息(包括系统启动时间)
last命令默认是读取/var/log/wtmp文件数据
- 用户名
- 登录终端
- 登录IP
- 登录时间
- 退出时间 (在线时间)
lastlog # 查看所有用户的最后一次登录信息
lastlog命令默认是读取/var/log/lastlog文件数据
shell 基础
查看当前使用的shell:echo $SHELL
查看支持的shell: cat /etc/shells
进入子shell后,使用命令exit
即可退出
查看父子shell:
echo输出命令
echo [选项] [输出内容]
-e
:支持反斜线控制的字符转换
控制字符 | 作用 |
---|---|
\a |
输出警告音 |
\b |
退格键 |
\n |
换行符 |
\r |
回车键 |
\t |
制表符 |
\v |
垂直制表符 |
\0nnn |
按照八进制ASCII码表输出字符 |
\xhh |
按照十六进制ASCII码表输出字符 |
脚本编写
以#!/bin/bash
声明使用bash开头,若当前使用其它shell时,执行这个脚本时,也会自动使用bash
赋予执行权限 chmod +x hello.sh
或chmod 755 hello.sh
执行: ./hello.sh
或调用bash来执行 bash hello.sh
命令别名与快捷键
alias # 查看系统中所有的命令别名
alias 别名='原命令' # 设定命令别名
unalias 别名 # 删除别名
# 别名永久生效与删除别名
vi ~/.bashrc # 写入环境变量配置文件
source ~/.bashrc # 写环境变量马上生效,不需要重新登录
命令生效顺序
- 第一顺序执行用绝对路径或相对路径执行的命令
- 第二顺序执行别名
- 第三顺序执行Bash的内部命令
- 第四顺序执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
常用快捷键
CTRL + C
强制终止当前命令CTRL + L
清障CTRL + A
光标移动到命令行首CTRL + E
光标移动到命令行尾CTRL + U
从光标所在位置删除到行首CTRL + Z
把命令放入后台CTRL + R
在历史命令中搜索
历史命令
history # 列出历史命令
history -c # 清空历史命令
history -w # 把缓存中的历史命令写入历史命令保存文件~/.bash_history
~/.bash_history
这个文件保存的上次登录正常退出后保存的命令
历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile
中进行修改
HISTSIZE=1000
历史命令的调用
- 使用上、下箭头调用以前的历史命令
- 使用"!n"重复执行第n条历史命令
- 使用"!!"重复执行上一条命令
- 使用"!字串"重复执行最后一条以字串开头的命令
输出重定向
标准输入输出
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin |
0 | 标准输入 |
显示器 | /dev/sdtout |
1 | 标准输出 |
显示 | /dev/sdterr |
2 | 标准错误输出 |
输出重定向
类型 | 符号 | 作用 |
---|---|---|
标准输出重定向 | 命令 > 文件 |
以覆盖的方式,把命令的正确输出,输出到指定的文件或设备当中。 |
标准输出重定向 | 命令 >> 文件 |
以追加的方式,把命令的正确输出,输出到指定的文件或设备当中。 |
标准错误输出重定向 | 命令 2> 文件 |
以覆盖的方式,把命令的正确输出,输出到指定的文件或设备当中。 |
标准错误输出重定向 | 命令 2>> 文件 |
以覆盖的方式,把命令的正确输出,输出到指定的文件或设备当中。 |
正确输出和错误输出同时保存
符号 | 作用 |
---|---|
命令 > 文件 2>&1 |
以覆盖方式,把正确输出和错误输出保存到同一个文件当中。 |
命令 >> 文件 2>&1 |
以追加方式,把正确输出和错误输出保存到同一个文件当中。 |
命令 &> 文件 |
以覆盖方式,把正确输出和错误输出保存到同一个文件当中。 |
命令 &>> 文件 |
以追加方式,把正确输出和错误输出保存到同一个文件当中。 |
命令 >> 文件1 2>>文件2 |
把正确的输出追加到文件1中,把错误的输出追加到文件2中。 |
输入重定向
wc -c # 统计字节数
wc -w # 统计单词数
wc -l # 统计行数
输入重定向,一般很少使用,在软件安装打补丁时,可能会用到
wc -l < hello.sh # 统计hello.sh
多命令执行顺序
多命令执行符 | 格式 | 作用 |
---|---|---|
; |
命令1;命令2 | 多个命令顺序执行,命令之间没有任何逻辑关系。不管前面命令对错,都会执行 |
&& |
命令1&&命令2 | 逻辑与。当命令1正确执行,则命令2才会执行;当命令1执行不正确,则命令2不执行 |
` | ` |
管道符
# 格式:命令1的正确输出作用命令2的操作对象
命令1 | 命令2
# 当文件过多时,分屏查看文件列表
ls -lh | more
# 查看8080端口当前并发连接数据(ESTABLISHED表示有人正在连接当前端口,LISTEN表示当前端口被监听等待有人访问)
netstat -an | grep ESTABLISHED | grep '8080'
netstat -an | grep ESTABLISHED | grep '8080' | wc -l # 统计当前8080端口并发数量
通配符
通配符 | 作用 |
---|---|
? |
匹配一个任意字符 |
* |
匹配0个或任意多个任意字符,也就是可以匹配任何内容 |
[] |
匹配中括号中任意一个字符。 |
[-] |
匹配中括号中任意一个字符,-表示珍上范围 |
[^] |
逻辑非,表示匹配不是中括号内的一个字符 |
ls -lh test*.txt
bash中其他特殊符号
符号 | 作用 |
---|---|
'' |
单引号。在单引号中所有的特殊符号,如$ 和 `(反引号),都没有特殊意义 |
"" |
双引号。在双引号中特殊符号都没有特殊意义,但是$ (调用变量值)、 (引用命令)和 \ `(转义符)是例外 |
` |
反引号。反引号括志来的内容是系统命令,在Bash中会先执行它。和$() 使用一样,不过推荐使用$() ,因为反引号非常容易看错 |
$() |
和反引号使用一样,用来引用系统命令。 |
# |
在Shell脚本中,# 开头的行代表注释 |
$ |
用于调用变量的值,如需要调用变量name 的值时,使用$name |
\ |
转义符,跟在\ 之后的特殊符号将失去特殊含义,变为普通字符 |
`
磁盘管理
磁盘管理基本命令
df -h # 以人性化的格式显示磁盘分区使用情况
du -h # 以人性化的单位统计当前路径的文件大小,-s指定统计目录
du -sh # 以人性化的单位统计当前目录大小
使用fdisk进行分区
linux系统中硬件设备都是以文件的形式存在于根目录下的dev目录下
硬件设备都是由linux系统自动识别的
必须对硬盘进行分区、格式化、挂载后才能使用
fdisk -l # 查看磁盘列表
fdisk /dev/sdb # 进入命令模式
执行fdisk /dev/sdb
进入命令模式后,输入m可以查看到帮助
n 新建分区(有默认使用默认值即可,只能有一个扩展分区,可以有多个逻辑分区)
p 查看分区情况
d 删除分区。如果分配有误,需要将扩展分区删除,再重新分配剩余的磁盘空间
w 写入并退出
硬盘分区模式
MBR分区:主分区不超过4个,单个分区容量最大2TB,比较过时,前面的分区方式就是MBR分区
GPT分区:主分区最多可以支持128个分区,单个分区容量几乎没有限制(18EB),分区就是分区,不需要区分主分区或逻辑分区
GPT分区不适合安装x86架构的系统,即32位系统
fdisk
只能进行MBR分区
parted
命令,可以进行MBR分区,也可以进行GPT分区
使用parted进行分区
没有主分区、扩展分区、逻辑分区,的区分
直接输入parted
命令,即可进入parted分区工具
help
帮助信息
select /dev/sdc
选择/dev/sdc
这个磁盘进行分区
mklabel gpt
创建label,如果需要进行MBR分区,则为msdoc
,如果为GPT分区,则为gpt
print
显示当前磁盘分区情况
print all
显示所有磁盘分区情况
parted有两种分区模式 交互模式(与fdisk类似,一步步提示)与命令模式(设置参数,一步到位)
只输入mkpart
,则以交互模式一步步创建分区,起始点与结束点的单位是M
mkpart test 2000 3000
一步到位的命令模式,格式是mkpart 分区名称 起始点 结束点(不包含)
rm 3
删除分区,数字3为print
显示的对应分区号
unit GB
设置使用的单位,包括创建分区时的单位与使用print
显示出来单位
quit
退出parted分区工具
分区格式化
parted工具也可以进行格式化,但其支持的格式比较少
一般使用mkfs进行格式化
mkfs.ext3 /dev/sdb1
将/dev/sdb1
分区格式化为ext3格式
mkfs -t ext3 /dev/sdb1
挂载分区
挂载默认位置/mnt
需要挂载在一个已经存在的位置
mkdir -p /mnt/test # 创建挂载点
mount /dev/sdb1 /mnt/test # 挂载
umount /mnt/test # 解除挂载
vim + /etc/fstab # 配置自动挂载
vim + /etc/fstab
配置自动挂载
格式: 设备名称 挂载点 文件类型 defaults 0 0
示例: /dev/sdb1 /mnt/test ext3 dfaults 0 0
swap分区
-
建立一个普通的linux分区
-
修改分区类型的16进制编码
fdisk /dev/sdb
查看分区,选择一个分区设置为swap分区
t
修改系统编码
l
列出所有编码
输入82
w
保存退出 -
格式化交换分区
mkswap /dev/sdb6
-
启用分区
swapon /dev/sdb6
-
停止swap分区
swapoff /dev/sdb6
用户管理
/etc/group
存储当前系统中所有用户信息
Group : x : 123 : user1,user2,user3
组名称 : 组密码占位符 : 组编号 : 组中用户列表
手动创建的用户组从500开始
/etc/gshadow
存储当前系统中用户组的密码信息,每行与/etc/group
中的一行行对应
Group : * : : user1,user2,user3
组名称 : 组密码 : 组管理者 : 组中用户列表
组密码为*或为空白时,都认为这个组没有设置密码
/etc/passwd
存储当前系统中所有用户的信息
user : x : 123 : 456 : xxxx : /home/user
: /bin/bash
用户名 : 密码占位符 : 用户编号 : 用户组编号 : 用户注释信息 : 用户主目录 : shell类型
/etc/shadow
存储当前系统中所有用户的密码信息,每行与/etc/passwd
中的一行行对应
user : 单向加密 :::::
用户名 : 密码 :::::
基本命令
# 新建组
groupadd 组名
groupadd -g 组ID 组名
# 修改组名
groupmod -n 新组名 原组名
# 修改组ID
groupmod -g 组ID 组名
# 删除组
groupdel 组名
# 新建用户(指定组名)
useradd -g 组名 用户名
# 新建用户(指定个人文件夹)
useradd -d /home/xxx 用户名
# 为用户添加注释
usermod -c 注释信息 用户名
# 修改用户名
usermod -l 新用户名 原用户名
# 为用户名指定个人文件夹
usermod -d /home/xxx 用户名
# 修改用户所属用户组
usermod -g 组名 用户名
# 删除用户(不会删除个人文件夹)
userdel 用户名
# 删除用户,同时删除个人文件夹
userdel -r 用户名
# 禁止除root用户外的其他用户登录,文件内容无关紧要
touch /etc/nologin
进阶命令
# 锁定用户,不让其登录
passwd -l 用户名
# 解锁用户
passwd -u 用户名
# 清除用户密码
passwd -d 用户名
# 添加附属组(同时属于多个组,一个主要组,其他附属组)
gpasswd -a 用户名 附属组名
# 切换到附属组
newgrp 组名
# 删除附属组
gpasswd -d 用户名 附属组名
# 新创建用户时,同时指定主要组及附属组
useradd -g 主要组名 -G 附属组名1,附属组名2...
# 修改或添加组密码,会提示输入组密码
gpasswd 组名
# 显示用户所在的所有组
groups 用户名