linux入门

安装CentOS

安装虚拟机

http://www.vmware.com

创建虚拟机

创建虚拟机时,选择稍后安装操作系统

创建完成后,可以设置虚拟机的内存、处理器等。

  • 处理器设置页面
    【虚拟化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

http://www.centos.org

安装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 创建软链接

硬链接特征:

  1. 拥有相同的i节点和存储block块,可以看做是同一个文件
  2. 可通过i节点识别
  3. 不能跨分区
  4. 不能针对目录使用

软链接特征:

  1. 类似windows快捷方式
  2. 软链接拥有自己的I节点和Block块,但数据块中只保存原文件的文件名和I节点号,并没有实际的文件数据
  3. lrwxrwxrwx l表示软链接 软链接文件权限都为rwxrwxrwx
  4. 修改任意文件,另一个都改变
  5. 删除原文件,软链接不能使用

文件搜索命令

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 输出警告音
 退格键
换行符
回车键
制表符
v 垂直制表符
nnn 按照八进制ASCII码表输出字符
xhh 按照十六进制ASCII码表输出字符

脚本编写

#!/bin/bash声明使用bash开头,若当前使用其它shell时,执行这个脚本时,也会自动使用bash

赋予执行权限 chmod +x hello.shchmod 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

管道符

# 格式:命令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 用户名

原文地址:https://www.cnblogs.com/chencye/p/5975410.html