1. Linux下的shell
现在的Linux发行版都以bash作为默认的shell。shell是一个以C语言编写的程序,是用户和操作系统内核之间的通信桥梁。为了加快命令的运行,shell中定义了一些内置命令。cd、pwd、exit、echo等都是属于bash内置命令。当用户登录后,shell以及内置命令就被装载到内存。除内置命令外,Linux系统上还有很多可执行文件。放在/bin/ls中。这些命令只有被调用时,才由系统装入内存执行。
shell执行命令解释的具体过程为:用户输入命令提交后,shell程序首先检测它是否为内置命令,如果是,就通过shell内部的解释器将命令解释为系统调用,然后提交给内核执行;如果不是,shell会按照用户给出的路径或者根据系统环境变量的配置信息在硬盘寻找对应的命令,然后将其调入内存,最后再将其解释为系统调用,提交给内核执行。
- shell通配符
1). *:匹配任意一个或多个字符
2). ?:匹配任意一个字符
3). []:匹配任何包括在方括号内的单字符 - shell重定向
Linux系统打开3个文件,即标准输入(键盘)、标准输出和标准错误输出(屏幕)。重定向就是不使用系统默认的标准输入/输出。
1). 输入重定向 <与<<
# 用wc命令统计输入给它的文件的行数、单词数和字符数
wc < /etc/shadow
2). 输出重定向 >与>>
# 将ps -ef输出的进程信息全部输入到ps.txt文件而不是屏幕
ps -ef > ps.txt
# 用more命令查看ps.txt文件(不想覆盖文件,可以使用\>\>)
more file1 file2 file3 > file
3). 错误重定向---2>
# 解压过程出错输出错误消息到error.txt文件
tar zxvf text.tar.gz 2> error.txt
- shell管道---将前一个命令的输出作为后一个命令的输入
# 将/etc目录及子目录下的所有文件分屏显示
ls -al /etc/* |more
2. 系统管理与维护
- ls命令---列出文件及目录
# 来处当前目录下的所有文件及目录(包括隐藏文件)
ls -a
# 除文件名外,列出权限、使用者和大小等详细信息
ls -l
# 列出home目录下的文件及目录
ls -l /home
# 列出所有文件及其详细信息
ls -al
- pwd---获取当前工作目录的绝对路径
- cd---改变当前工作目录
- passwd---修改密码
- su---改变用户身份
#普通用户成为超级用户
$su -
- clear---清除屏幕信息
- man---显示指定帮助信息
- who---显示当前登录到系统的用户
- w---显示登录到系统的用户信息
- uname---显示操作系统相关信息
选项 | 说明 |
---|---|
-a | 显示操作系统全部信息 |
-m | 显示CPU类型是32位还是64位 |
-n | 显示操作系统主机名 |
-s | 显示操作系统类型 |
-r | 显示操作系统内核版本 |
- uptime---输出系统任务队列信息
# 输出当前系统时间、开机到现在运行时间、目前有多少用户在线和系统平均负载等
uptime
16:03:08 up 4days, 1:49, 2 users, load average: 0.12, 0.20, 0.17
系统时间是16:03:08,运行已经4天1小时49分,有2个用户在线,1分钟、5分钟、15分钟前到现在的平均负载为0.12、0.20、0.17
- free---显示内存状态
- ps---显示进程动态
常用选项组合ps -ef、ps aux - top---包括了uptime命令的信息、进程和CPU状态统计,以及进程详情
3. 文件管理与编辑
- mkdir---创建目录
# 递归创建目录
mkdir -p /home/user1/user2
- more---文件内容分屏显示
# 分屏显示Makefile
more Makefile
# 分屏显示Makefile,每屏10行,清除前一屏信息
more Makefile -c -10 Makefile
Enter键:逐行追加到屏幕,空格键:显示下一屏
- cat---输出文件内容
- grep---文本过滤
grep根据指定的字符串,对文件的每一行进行搜索,如果找到了这个字符串,就输出该行的内容。
格式:grep [选项] 字符串 文件名
选项 | 说明 |
---|---|
-A NUM | 除了列出符合条件的行外,同时列出行后NUM行 |
-c | 只显示符合条件的行数 |
-f file | 事先将要搜索的样式写入文件,每行一个样式,然后以这个文件作为条件进行搜索 |
-i | 搜索时忽略大小写 |
-n | 在搜索结果中显示行号 |
-B NUM | 与选项-A相反,除列出符合条件的行外,同时列出前NUM行 |
# 列出install.log文件中含有RPM字符串的行
grep RPM install.log
# 列出install.log文件中含有rpm字符串的行,忽略大小写,并标识出每行的具体行号
grep -ni rpm install.log
- rm---删除文件或目录
选项 | 说明 |
---|---|
-r | 递归删除,不指定,rm将无法删除目录 |
-f | 不用给出提示 |
-i | 删除前进行确认 |
rm -rf的使用要慎重,一旦被删就不能恢复。必要时使用rm -ri来逐个确认要删除的文件。
- touch---创建文件,或改变文件的访问和修改时间
- ln---创建链接
Linux下有硬链接和软链接两种,硬链接如同对源文件的多个物理备份,只有所有硬链接文件被删除后,源文件才被删除。软链接如同Windows中的快捷方式。
格式:ln [选项] 源文件 目标目录
# 将/etc/inittab文件硬链接到/opt/backup目录下
ln /etc/inittab /opt/backup
ll /opt/backup/inittab
total 8
-rw-r--r-- 2 root root 1666 Jul 19 11:17 /opt/backup/iniitab # 完全感知不到源文件的存在
ll /etc/inittab
-rw-r--r-- 2 root root 1666 Jul 19 11:17 /etc/inittab
# 将/etc/inittab文件软链接到/opt下
ln -s /etc/inittab /opt
ll /opt/inittab
total 4
lrwxrwxrwx 1 root root 12 Jul 20 17:57 /opt/inittab -> /etc/inittab
- file---显示文件类型
- cp--文件目录拷贝
# 将当前目录下的所有文件复制到/tmp目录下
cp -r ./* /tmp
# 将/home/oracle目录及其子目录下的全部文件复制到/home/ixdba下
cp -r /home/oracle /home/ixdba
- find---在指定路径下查找指定文件
需要多加练习 - split---分割文件为多个文件
- mv---移动文件
格式:mv [-i] 源文件或目录 目的文件或目录
4. 压缩与解压
- tar---归档
# 将/etc目录下的所有文件打包并压缩,设置大报名为etc.tar.gz,同时保存到/opt目录下
tar -zcvf /opt/etc.tar.gz /etc # gzip压缩
tar -jcvf /opt/etc.tar.bz2 /etc # bzip2压缩
# 排除性打包:打包/home目录和/etc目录,排除/home下的ixdba目录
tar -exclude /home/ixdba -zcvf myfile.tar.gz /home/* /etc
# 查阅压缩包的内容
tar -ztvf /opt/etc.tar.gz
tar -jtvf /opt/etc.tar.bz2
# 解压压缩包
tar -zxvf /opt/etc.tar.gz
tar -jxvf /opt/etc.tar.bz2
# 解压压缩包中指定文件
tar -zxvf /opt/etc.tar.gz etc/inittab
# 解压压缩包中指定目录
tar -zxvf /opt/etc.tar.gz -C /tmp
-
dd---用指定大小的块转换或复制文件,同时可以对设备进行备份
格式:
dd if="input_file" of="output_file" bs="block_size" count="number"
bs:指定一个块的大小,默认512字节
count:块的数量
将/etc/inittab文件备份到/opt/inittab.bak中
dd if=/etc/inittab of=/opt/inittab.bak
3+1 records in
3+1 records out
3+1表示有3个完整的512字节的块,1个未满512字节的块
将/dev/sda2整个磁盘分区进行备份,保存备份文件到/opt目录(输出路径不能相同,否则怎么都备份不完)
dd if=/dev/sda2 of=/opt/sda2.back
恢复备份包到相应的分区(要先卸载目标分区)
dd if=/opt/sda2.back of=/devl/sda2
###5. 磁盘管理与维护
* df---检查磁盘空间占用情况
查看当前系统磁盘分区情况
df -hT
* du---显示文件或目录占用的磁盘空间
显示当前目录下所有文件的大小
du -sh ./*
显示Linux系统/etc目录的总大小
du -sh /etc
sync---强制将内存数据写回磁盘,以免数据丢失(默认每个3秒系统会自动执行一次sync)
###6. 网络设置与维护
* ifconfig---配置网络或显示当前网络状态(root用户的命令)
命令:ifconfig [选项] [interface] [inet|up|down|netmask|addr|broadcast]
ifconfig命令选项说明
|选项|说明|
|------|------|
|-a|显示所有的网络接口信息,包括活动和非活动的|
|-s|仅显示每个接口的摘要信息,是有关接口活动性的,每个接口显示一行信息|
|-v|如果某个网络接口出现错误,将返回错误信息|
1). interface:网络接口名,类似于eth0、eth1和lo等(CentOS7.×版本中,为enp0s1、enp0s2),表示第1块网卡、第2块网卡和回环接口
2). up:激活一个网络接口
3). down:禁用一个网络接口
4). netmask:为一个指定的网络接口指定子网掩码
5). addr:为网络接口指定IP地址
6). broadcast:为指定的接口设置广播地址
显示所有网络接口信息
ifconfig
enp03: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.81.232 netmask 255.255.255.0 broadcast 192.168.81.255
inet6 fe80:a00:27ff:fe90:55 prefixlen 64 scopeid 0x20<link>
enter 08:00:27:90:00:55 txqueuelen 1000 (Ethernet)
RX packets 20378 bytes 1845248 (1.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 958 bytes 147065 (143.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 4 bytes 336 (336.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4 bytes 336 (336.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
从上面可以看出以下几点:
第1行:UP代表网卡开启状态,RUNNING代表网卡上的网线处于连接状态,MULTICAST代表支持组播,MTU:1500代表最大传输单元为1500字节。
第2行:依次显示网卡的IP地址、子网掩码和广播地址
第3行:IPv6地址的配置信息
第4行:ether后面表示硬件网卡的MAC地址。Ethernet表示连接类型为以太网
第5、6行:显示网卡接收数据包的统计信息和接收错误的统计信息
第7、8行:显示网卡发送数据包的统计信息和发送错误的统计信息
> 用ifconfig命令配置的网卡信息,在网卡重启或机器重启后,所有的配置都会失效,如果要让网卡配置永久生效,需要修改网卡的配置文件。
在网卡enp0s3上配置两个IP地址,分别为192.168.60.136、192.168.66.138,子网掩码为255.255.255.0
ifconfig enp0s3 192.168.60.136 netmask 255.255.255.0
ifconfig enp0s3:0 192.168.66.138 netmask 255.255.255.0
此时用ifconfig命令查看,就可以看到两个网卡的信息了,分别是enp0s3和enp0s3:0
修改网卡MAC地址为新的MAC地址
ifconfig enp0s3hw enther xx:xx:xx:xx:xx:xx
将网卡enp0s3禁用后再启用
ifconfig enp0s3 down
ifconfig enp0s3 up
* scp---将文件或目录从一个Linux系统复制到另外一个Linux系统
将本地文件复制到远程Linux
scp /home/ixdba/etc.tar.gz root@192.168.60.168:/tmp
将远程Linux文件复制到本地
scp root@192.168.60.133:/home/idxdba/etc.tar.gz /tmp
将本地/etc目录中所有文件及子目录复制到远程Linux系统root用户的/opt目录中
scp -r /etc root@192.168.60.135:/opt
* netstat---显示本机运行端口和路由表信息
格式:netstat [选项]
|选项|说明|
|------|------|
|-a|显示本机所有连接和监听端口|
|-n|以网络IP地址的形式显示当前建立的有效连接和端口|
|-r|显示路由表信息|
|-s|显示按协议的统计信息。默认情况下,将显示IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP和UDPv6的统计信息|
|-v|显示当前的有效连接,与-n选项类似|
|-t|显示所有的TCP协议连接情况|
|-u|显示所有的UDP协议连接情况|
|-c<秒数>|后面跟的秒数,表示每隔几秒就刷新显示一次|
|-i|显示自动配置接口的状态|
|-l|仅显示连接状态为LISTEN的服务的网络状态|
|-p|显示连接对应的PID与程序名|
显示当前系统的路由信息
netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.81.250 0.0.0.0 UG 0 0 0 enp0s3
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 enp0s3
从上面可以看出,当前系统的默认网关是192.168.81.250,对应的网络接口为enp0s3
显示有效的TCP连接
netstat -an
显示已启动的网络连接、端口信息以及对应的进程ID和服务名
netstat -tlnpu
显示处于连接状态的资源信息
netstat -atunp
* traceroute---显示网络数据包传输至指定主机的路径信息、追踪传输路由状态
命令格式:traceroute [选项] [远程主机名或IP地址] [数据包大小]
|选项|说明|
|------|------|
|-i<网络接口>|使用指定的网络接口发送数据包|
|-n|直接使用IP地址而不使用主机名|
|-v|详细显示命令的执行过程|
|-w<超时秒数>|设置等待远程主机回应的时间|
|-x|开启或关闭对数据包的正确性检验|
|-s<来源ip>|设置本地主机发送数据包的IP地址|
|-g<网关地址>|设置来源的路由网关,最多可设置8个|
跟踪从本机到网站www.ixdba.net的数据包发送过程
traceroute -i eth0 -s 192.168.60.251 -w 10 www.ixdba.net 100
上面指定eth0网络接口发送数据包,IP为192.168.60.251,并设置超时时间为10秒,最后设置发送数据包的大小为100kb。输出可以看到路由迂回,每个路由节点做3次时间测试。
如果在指定的时间内,traceroute检测不到某个路由节点的回应,会在屏幕上输出"*",表示此节点无法通过。由于traceroute是利用ICMP连接的,有些网络设备(如防火墙)可能会屏蔽ICMP通过的权限,因此也会出现节点没有回应的状态,分析网络问题的需要知道这点。
* telnet---与远程主机通信或获取远程主机对应端口的信息
通过telnet协议登录到开启了telnet服务的远程主机上(不输入23端口也是可以的,因为telnet默认寻找的端口就是23)
telnet 192.168.60.123 23
查看某台Linux系统的22和80短偶是否打开以及分别开启了什么服务
telnet 192.168.60.88 22
如果 www.ixdba.net对应的80端口开启,输入get命令将显示端口对应的服务类型
telnet www.ixdba.net 80
get
* wget---从网络上下载某个软件