Linux基础知识整理
1、数据安全
2、永不宕机
3、体验更好
二、Linux系统知识学习
2.1 shell及其常用命令
绝对路径,相对路径:
-
绝对路径:路径的写法“一定由根目录 / 写起”,例如: /usr/share/doc 这个目录。
-
相对路径:路径的写法“不是由 / 写起”,例如由 /usr/share/doc 要到 /usr/share/man 下面时,可以写成: “cd ../man”这就是相对路径的写法啦!相对路径意指“相对于目前工作目录的路径!”
命令行操作快捷键:
tab 至少两次 快速输入找到想使用的命令。
Ctrl+a 光标回到命令行首
Ctrl+e 光标回到命令行尾
Ctrl+k 复制剪切(删除)光标处到行尾的字符
Ctrl+u 复制剪切(删除)光标处到行首的字符
Ctrl+y 粘贴Ctrl+u,Ctrl+k,Ctrl+w删除的文本
Ctrl+c 中断终端正在执行的任务或者删除整行
Ctrl+d 退出当前Shell命令行,还可以关闭xshell
Ctrl+r 搜索命令行使用过的历史命令记录
Esc+.(点) 获取上一条命令的最后的部分(空格分隔)
Ctrl+l 清除屏幕所有内容,并在屏幕最上面开始一个新行,等同clear命令
!! 执行上一条命令
!pw 执行最近以pw开头的命令
系统关机重启注销命令:
systemctl halt 关闭系统CPU停止工作
systemctl poweroff 关闭系统并切断电源
systemctl reboot 重启系统
exit 注销退出当前用户窗口
目录的基本操作:
-
tree 用于以树状图列出目录的内容
tree -L 1 指定层数显示目录
tree -d 只显示目录
-
mdkir 创建目录
mdkir -p /11/22/33 创建多个路径
-
cd 切换工作目录
-
rm -r 删除目录
文件的基本操作:
-
touch 创建文件
-
cp 复制文件
-
mv 移动文件
-
rm 删除文件
rm -r 删除目录
rm -f 强制删除
内容操作:
vi 文本编辑工具,具体操作看下文
目录结构:
/etc:系统初始化及设置相关重要文件
/etc/resolv.conf:Linux系统 DNS客户端的配置文件
/etc/hosts:系统本地的DNS解析文件
/etc/fstab:配置开机设备自动挂载的文件
/etc/rc.local:存放开机自启动程序命令的文件
/etc/profile及/etc/bashrc:配置系统的环境变量/别名等的文件
/etc/redhat-release:查看系统版本
/etc/sysctl.conf:Linux内核参数设置文件
/etc/init.d:存储系统或服务器以System V模式启动的脚本文件(CentOS7以前)
/etc/inittab:设置开机运行级别以及启动相应级别脚本的文件(CentOS7以前)
/etc/hostname:主机名配置文件
/usr/local:源码编译安装软件默认的位置路径
/var/log:记录系统及软件运行信息文件所在的目录
/proc:进程及内核信息存放目录
文件查找:
find
用于在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名,其支持按名称查找、按正则表达式查找、按文件大小查找、按文件权限查找等多种查询方式。如果在使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。
语法:find + 目标目录(路径) + <选项> + 参数 例:查看tomcat目录下哪些文件带有“127”,命令如下
find -type f -name "*.xml" |xargs grep '127'
locate
其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
whereis
whereis 文件名 主要用于程序名的搜索
which
which 可执行文件名 会在环境变量$PATH设置的目录里查找符合条件的文件
实验:
如何查找带有xxx内容的文件
find /home/hadoop/ -type f -name '*.py'|xargs grep -n 'data_chushou'
打包命令:
tar zcvf /opt/data.tar.gz ./data 将当前目录下的data目录打包成data.tar.gz
tar zcvf aaa.tar.gz ./* --exclude=4.txt --exclude=5.txt 打包时排除指定的文件
tar tf /opt/data.tar.gz 查看压缩包里的内容
tar zxvf /opt/data.tar.gz -C /tmp 将data.tar.gz解压到指定的目录
实验:
编写shell脚本:
]# vim info.sh
#!/bin/bash
mkdir /home/test{1,2}
dd if=/dev/zero of=/home/test1/a bs=1M count=10 &>/dev/null
ln /home/test1/a /home/test2/a_ln
cp /home/test1/a /home/test2/a_bak
tar -zcvf /home/test1/a.tar.gz /home/test1/a &>/dev/null
if [ $? == 0 ]
then
echo "success"
else
echo "no success"
fi
2.2 磁盘管理
mount 挂载命令
umount 卸载命令
df 显示磁盘分区上的可使用的磁盘空间
开机自动挂载分区,将要挂载的分区写入到/etc/fstab文件中:
UUID=79a3924b-739e-48dc-ab0c-0444b9ac6591 swap swap defaults 0 0
设备名(UUID) 挂载点 文件系统类型 挂载参数 是否备份 是否开机检查/dev/sda1
查看设备UUID:
blkid 对查询设备上所采用文件系统类型进行查询
df -i 查看inode大小
df -h 查看分区大小
du -h /opt 查看指定目录大小
实验:
[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.Be careful before using the write command.
Device does not contain a recognized partition tableBuilding a new DOS disklabel with disk identifier 0x718957f9.
Command (m for help): nPartition type: p primary (0 primary, 0 extended, 4 free) e extendedSelect (default p): pPartition number (1-4, default 1): 1First sector (2048-41943039, default 2048):Using default value 2048Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1GPartition 1 of type Linux and of size 1 GiB is set
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk label type: dosDisk identifier: 0x718957f9
Device Boot Start End Blocks Id System/dev/sdb1 2048 2099199 1048576 83 Linux
Command (m for help): tSelected partition 1Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk label type: dosDisk identifier: 0x718957f9
Device Boot Start End Blocks Id System/dev/sdb1 2048 2099199 1048576 8e Linux LVM
Command (m for help): wThe partition table has been altered!
Calling ioctl() to re-read partition table.Syncing disks.
[root@localhost ~]# partprobe -s /dev/sdb1 /* 不重启机器 ,让机器识别 /
[root@localhost ~]# mkfs.ext4 /dev/sdb1
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/sdb1 /data /* 将新创建好的分区挂载到目录下 /
[root@localhost ~]# df -h
[root@localhost ~]# blkid /* 查看分区的UUID,UUID需要记录 /
/dev/sdb1: UUID="cbbf1327-22f9-4e71-b161-11eda3865999" TYPE="ext4"
[root@localhost ~]# echo "UUID=cbbf1327-22f9-4e71-b161-11eda3865999 /data ext4 defaults 0 0" >> /etc/fstab
[root@localhost ~]# pvcreate /dev/sdb1 /* 将分区初始化为物理卷,如果在初始化的时候出错了,可能是因为分区的分区类型不正确,区的类型要求是8e(linux lvm) /
Physical volume "/dev/sdb1" successfully created.
[root@localhost ~]# vgcreate vg1 /dev/sdb1 /* 创建物理卷组vg1 /
Volume group "vg1" successfully created*
[root@localhost ~]# lvcreate -L 500M -n u02lv vg1 /* 创建逻辑卷组u02lv,指定大小为500M */
Logical volume "u02lv" created.*
[root@localhost ~]# lvdisplay /* 检查 */
[root@localhost ~]# mkfs.ext4 /dev/vg1/u02lv /* 格式化新建的逻辑卷 */
[root@localhost ~]# mkdir /data1
[root@localhost ~]# mount /dev/vg1/u02lv /data1
[root@localhost ~]# df -h
/dev/mapper/vg1-u02lv 477M 2.3M 445M 1% /data1
[root@localhost ~]# blkid
/dev/mapper/vg1-u02lv: UUID="09134afa-c128-4c8e-85c4-5f26f6cc7e9e" TYPE="ext4"
[root@localhost ~]# echo "UUID=09134afa-c128-4c8e-85c4-5f26f6cc7e9e /data1 ext4 defaults 0 0" >> /etc/fstab
2.3 文件编辑器vi的使用
普通模式:
:set nu 显示行号
普通模式:移动光标
行尾 $
行首 0
文件尾部 G
文件开头 gg
到指定行 阿拉伯数字gg
普通模式:搜索与替换操作
向下搜索 /3306 继续搜 按n,反向搜N
向上搜索 ?80 继续搜 按n,反向搜N
普通模式:替换
:%s/A/B/g
:%s#world#oldgirl#g
/#还可以用@等特殊字符替换,实际就是分隔符。
s是替换 g表示全局(所有)指
定行号替换:
:4,6s/oldboy/oldgirl/g
普通模式:复制、粘贴、删除等操作
删除单行 dd(剪切)
删除多行 ndd n用任意数字替换
撤销 u
单行复制 yy
多行复制 nyy n用任意数字替换
粘贴 p
进入编辑模式命令
i 插入
A 追加 行尾插入
a 光标下一个字符插入
o 下一行开头插入
O 上一行开头插入
命令行模式
:wq 退出并保存
:wq! 退出并强制保存,“!”为强制的意思
:q! 强制退出,不保存
:set nu 显示行号
:set nonu 与set nu相反,取消行号
2.4 系统管理
用户管理 :
useradd
-u 指定UID
-s 指定登录的SHELL解释器
-M 不创建家目录
-g 指定所属的组
-d 指定家目录
userdel
-r 递归删除用户目录及下面内容
usermod
-u 指定UID
-s 指定登录的SHELL解释器
-M 不创建家目录
-g 指定所属的组
-d 指定家目录
-G 修改此用户为多个不同组的成员
-a 追加用户到用户组,仅与-G参数连用
groupadd 添加用户组
-g 指定组ID groupdel 删除用户组
实验:
[root@ecs-9253 ~]# groupadd oinstall
[root@ecs-9253 ~]# groupadd dba
[root@ecs-9253 ~]# useradd -g oinstall -G dba -s /bin/bash oracle
[root@ecs-9253 ~]# id oracleuid=1001(oracle) gid=1001(oinstall) groups=1001(oinstall),1002(dba)
[root@ecs-9253 ~]# mkdir /home/test
[root@ecs-9253 ~]# chown -R oracle.oinstall /home/test
[root@ecs-9253 ~]# ll -d /home/testdrwxr-xr-x 2 oracle oinstall 4096 Mar 9 15:19 /home/test
## 设置oracle用户默认的nofile,nproc 的 soft,hard限制
[root@ecs-9253 ~]# cat /etc/security/limits.conf |egrep -v "#|^$"* soft nofile 65535* hard nofile 65535oracle soft nproc 65535oracle hard nproc 65535
2.5 定时任务
周期性的执行任务计划的软件,Linux定时任务的常用软件crond。
cron是定时任务的软件名,crond是服务进程名,真正实现定时任务服务。
crontab命令是用来设置定时任务规则的配置命令。
例:在晚上0点运行脚本
00 00 * * * /bin/sh /server/scripts/bak.sh &>/dev/null
2.6 网络的基本配置
启用,禁用网卡命令
[root@ecs-9253 ~]# ifconfig eth0 up
[root@ecs-9253 ~]# ifconfig eth0 down
设置网卡为静态IP地址:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth0
BOOTPROTO=static #设置网卡获得ip地址的方式,可能的选项为static,dhcp或bootp,分别对应静态指定的 ip地址,通过dhcp协议获得的ip地址,通过bootp协议获得的ip地址
IPADDR=12.168.0.33 #如果设置网卡获得 ip地址的方式为静态指定,此字段就指定了网卡对应的ip地址
NETMASK=255.255.255.0 #网卡对应的网络掩码
GATEWAY=192.168.1.1 #默认网关
DNS1=223.5.5.5 #首选DNS服务器
DNS2=8.8.8.8 #备用DNS服务器
修改网关配置:
vi /etc/sysconfig/network
NETWORKING=yes #(表示系统是否使用网络,一般设置为yes。如果设为no,则不能使用网络,而且很多系统服务程序将无法启动)
HOSTNAME=centos #(设置本机的主机名,这里设置的主机名要和/etc/hosts中设置的主机名对应)
GATEWAY=192.168.0.1 #(设置本机连接的网关的IP地址。)
修改DNS配置:
vi /etc/resolv.conf
nameserver 223.5.5.5 #首选DNS服务器
nameserver 114.114.114.114 #备用DNS服务器
search localdomain #域名
重启网络服务:
systemctl restart network
查看默认路由:
2.7 系统监控
CPU监控:
top 提供了实时的对系统处理器的状态监视
htop 是一个 Linux 下的交互式的进程浏览器,可以用来替换Linux下的top命令
内存监控:
free 工具用来查看系统可用内存
vmstat 实时动态监视操作系统的虚拟内存、进程、CPU活动
IO监控:
iostat 动态监视系统的磁盘操作活动
iotop 是一个用来监视磁盘I/O使用状况的top类工具
系统负载:
uptime 打印系统总共运行了多长时间和系统的平均负载
tar 系统运行状态统计工具
2.8 如何杀进程
kill -pid 只杀死指定进程号的进程
killall httpd 杀死同一进程组内的所有进程
kill -l PID 用启动进程的用户已注销的方式结束进程
2.9 知道pid号后,如果查找进程工作目录,用什么命令
方法1
使用pwdx命令,这是最简单的方法,提供进程号,该命令就可以返回进程的工作目录。比如有一个进程号是1833的进程,使用命令,
[root@ecs-9253 ~]# pwdx 1833
1833: /
方法2
使用/proc/{pid}这个重量级工具,在/proc/{pid}目录下有一个叫做cwd的软连接,通过查看这个原链接就可以知道进程的工作路径了。使用如下命令:
[root@ecs-9253 ~]# ll /proc/1833/cwd
lrwxrwxrwx 1 root root 0 Mar 8 15:34 /proc/1833/cwd -> /