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

查看默认路由:

route -n

 

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 -> /

 

 

原文地址:https://www.cnblogs.com/jianchen013/p/14519495.html