Linux操作系统

Linux核心知识

操作系统启动流程

cmos:记录的开机时的配置信息的,专门会有一块电池给它供电

Linux操作系统完整的启动

1.首先,计算机会加载BIOS,这是计算机上最接近硬件的软件,主要功能是进行加电自检

2.加电自检通过后,BIOS会默认会从磁盘的第0柱面,第0磁道,第一个扇区中读取MBR(主引导记录).一个扇区512字节,存放主引导程序(446字节)和磁盘分区表DPT(64字节),最后两个字节为MBR的结束位

3.CentOS默认会使用Grub作为引导操作系统的程序,Grub比较大,常见的方式为在MBR中写入Grub的地址,这样系统实际会载入Grub作为操作系统的引导程序

4.运行Grub,Grub最重要的功能就是根据其配置文件加载kernal镜像,并运行内核加载后的第一个程序/sbin/init,这个程序会根据/etc/inittab来进行初始化工作.这里最重要的就是根据文件中设置的值来确定系统的runlevel,默认为3

5.Linux执行/etc/rc.sysinit脚本,该脚本会设置系统变量,网络配置,启动swap,设定/proc,加载用户自定义模块,加载内核设置等

6.根据用户级别runlevel值来启动对应的服务,会运行/etc/rc3.d/下所有的脚本

7.运行/etc/rc.local,最终会生成终端或图形界面等待用户的登录

Linux内核系统调用

中断

 

 

入门

用户和密码

1.root用户修改密码:    password

2.root用户添加用户:    useradd ypf

3.root用户修改ypf用户的密码    passwd ypf

4.查看帮助手册:    useradd -h 或者  man useradd

创建的用户,其实是放在 /etc/passwd 文件里

组的信息我们放在 /etc/group 文件中

命令chown改变所属用户,chgrp改变所属组。

用户开启重启和用户登录注销

关机重启

shutdown
    shutdown -h now   #立即关机
    shutdown -h 1     #一分钟以后关机
    shutdown -r now   #立刻重启
halt        #就是直接关机
reboot      #重启系统
syn         #把内存中的数据同步到磁盘,centos7用不了,不知道为什么

登录和注销

#切换用户登录
su 用户名
#注销用户,图形界面无效
logout

安装软件

  • rpm

1.CentOS 下面使用rpm -i jdk-XXX_linux-x64_bin.rpm进行安装,Ubuntu 下面使用dpkg -i jdk-XXX_linux-x64_bin.deb。其中 -i 就是 install 的意思。

2.凭借rpm -qa和dpkg -l就可以查看安装的软件列表,-q 就是 query,a 就是 all,-l 的意思就是 list。

3.可以使用rpm -qa | more和rpm -qa | less这两个命令,它们可以将很长的结果分页展示出来。我们还是利用管道的机制。more 是分页后只能往后翻页,翻到最后一页自动结束返回命令行,less 是往前往后都能翻页,需要输入 q 返回命令行,q 就是 quit。

4.如果要删除,可以用rpm -e和dpkg -r。-e 就是 erase,-r 就是 remove。

  • 软件管家  CentOS 下面是 yum,Ubuntu 下面是 apt-get。

1.例如搜索jdk、yum search jdk和apt-cache search jdk,可以搜索出很多很多可以安装的 jdk 版本。如果数目太多,你可以通过管道 grep、more、less 来进行过滤。

2.选中一个之后,我们就可以进行安装了。你可以用yum install java-11-openjdk.x86_64和apt-get install openjdk-9-jdk来进行安装。

3.安装以后,如何卸载呢?我们可以使用yum erase java-11-openjdk.x86_64和apt-get purge openjdk-9-jdk。

4.Linux 允许我们配置从哪里下载这些软件的,地点就在配置文件里面。对于 CentOS 来讲,配置文件在/etc/yum.repos.d/CentOS-Base.repo里。对于 Ubuntu 来讲,配置文件在/etc/apt/sources.list里。

5.其实无论是先下载再安装,还是通过软件管家进行安装,都是下载一些文件,然后将这些文件放在某个路径下,然后在相应的配置文件中配置一下;主执行文件会放在 /usr/bin 或者 /usr/sbin 下面,其他的库文件会放在 /var 下面,配置文件会放在 /etc 下面。

6.如果是 tar.gz 这种格式的,通过 tar xvzf jdk-XXX_linux-x64_bin.tar.gz 就可以解压缩了。

7.通过 tar 解压缩之后,也需要配置环境变量,可以通过 export 命令来配置。

export JAVA_HOME=/root/jdk-XXX_linux-x64
export PATH=$JAVA_HOME/bin:$PATH

export 命令仅在当前命令行的会话中管用,一旦退出重新登录进来,就不管用了

8.在当前用户的默认工作目录,例如 /root 或者 /home/cliu8 下面,有一个.bashrc 文件,每次登录的时候,这个文件都会运行,因而把它放在这里。这样登录进来就会自动执行。当然也可以通过 source .bashrc 手动执行。

运行程序

1. Linux 执行程序最常用的一种方式,通过 shell 在交互命令行里面运行。

Linux 不是根据后缀名来执行的。它的执行条件是这样的:只要文件有 x 执行权限,都能到文件所在的目录下,通过./filename运行这个程序。当然,如果放在 PATH 里设置的路径下面,就不用./ 了,直接输入文件名就可以运行了,Linux 会帮你找。

2. Linux 运行程序的第二种方式,后台运行。

我们往往使用nohup命令。这个命令的意思是 no hang up(不挂起),也就是说,当前交互命令行退出的时候,程序还要在。

程序不能霸占交互命令行,而是应该在后台运行。最后加一个 &,就表示后台运行。

另外一个要处理的就是输出,原来什么都打印在交互命令行里,现在在后台运行了,输出到哪里呢?输出到文件是最好的。

最终命令的一般形式为
nohup command >out.file 2>&1 &

这里面,“1”表示文件描述符 1,表示标准输出,“2”表示文件描述符 2,意思是标准错误输出,“2>&1”表示标准输出和错误输出合并了。合并到哪里去呢?到 out.file 里

那这个进程如何关闭呢?我们假设启动的程序包含某个关键字,那就可以使用下面的命令。

ps -ef |grep 关键字  |awk '{print $2}'|xargs kill -9

其中 ps -ef 可以单独执行,列出所有正在运行的程序,grep 上面我们介绍过了,通过关键字找到咱们刚才启动的程序。awk 工具可以很灵活地对文本进行处理,这里的 awk '{print $2}'是指第二列的内容,是运行的程序 ID。我们可以通过 xargs 传递给 kill -9,也就是发给这个运行的程序一个信号,让它关闭。如果你已经知道运行的程序 ID,可以直接使用 kill 关闭运行的程序。

3. 程序运行的第三种方式,以服务的方式运行

例如在 Ubuntu 中,我们可以通过 apt-get install mysql-server 的方式安装 MySQL,然后通过命令systemctl start mysql启动 MySQL,通过systemctl enable mysql设置开机启动。之所以成为服务并且能够开机启动,是因为在 /lib/systemd/system 目录下会创建一个 XXX.service 的配置文件,里面定义了如何启动、如何关闭。

在 CentOS 里有些特殊,MySQL 被 Oracle 收购后,因为担心授权问题,改为使用 MariaDB,它是 MySQL 的一个分支。通过命令yum install mariadb-server mariadb进行安装,命令systemctl start mariadb启动,命令systemctl enable mariadb设置开机启动。同理,会在 /usr/lib/systemd/system 目录下,创建一个 XXX.service 的配置文件,从而成为一个服务。

总结此章节常用命令

文件系统

文件系统的功能规划

1. 文件系统要有严格的组织形式,使得文件能够以块为单位进行存储

2. 文件系统中也要有索引区,用来方便查找一个文件分成的多个块都存放在了什么位置

3. 如果文件系统中有的文件是热点文件,近期经常被读取和写入,文件系统应该有缓存层

4. 文件应该用文件夹的形式组织起来,方便管理和查询

5. Linux 内核要在自己的内存里面维护一套数据结构,来保存哪些文件被哪些进程打开和使用

文件系统相关命令行

格式化,也即将一块盘使用命令组织成一定格式的文件系统的过程

1.通过命令 fdisk -l,查看格式化和没有格式化的分区。

# fdisk -l

Disk /dev/vda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000a4c75

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048    41943006    20970479+  83  Linux

Disk /dev/vdc: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

从上面的命令的输出结果可以看出,vda 这块盘大小 21.5G,是格式化了的,有一个分区 /dev/vda1。vdc 这块盘大小 107.4G,是没有格式化的。

2.可以通过命令 mkfs.ext3 或者 mkfs.ext4 进行格式化。

mkfs.ext4 /dev/vdc

也可以选择不将整块盘格式化为一个分区,而是格式化为多个分区。下面的这个命令行可以启动一个交互式程序。

fdisk /dev/vdc

分区结束之后,可能会出现 vdc1, vdc2 等多个分区,这个时候你可以 mkfs.ext3 /dev/vdc1 将第一个分区格式化为 ext3,通过 mkfs.ext4 /dev/vdc2 将第二个分区格式化为 ext4.

3.格式化后的硬盘,需要挂在到某个目录下面,才能作为普通的文件系统进行访问。

mount /dev/vdc1 /根目录/用户A目录/目录1

4.有挂载就有卸载,卸载使用 umount 命令。

umount /根目录/用户A目录/目录1

常用命令

文件和目录权限

文件隐藏属性

查看隐藏属性

lsattr home

修改文件属性

chattr +a ypf.txt

属性a: 这种属性的文件只能在尾部追加而不能删除

属性i: 即使root用户也不能增加修改删除的文件,常用于系统或关键服务的位置

改变文件的权限: chmod

权限组合为r=4,w=2,x=1

递归修改目录下的所有子文件

chmod -R 777 ypf.txt

改变文件的拥有者: chown

chown ypf ypf.txt

修改文件的用户组

chown :ypf ypf.txt

同时修改文件的拥有者和用户组

chown ypf:ypf ypf.txt

修改文件的拥有组: chgrp

chgrp ypf a.txt

递归的进行修改

chgrp -R ypf a.txt

文件特殊属性: SUID/SGID/Sticky

suid: s权限在用户权限上,表明这一命令设置了sticky权限,则该用户组的所有用户可以使用root身份去运行这个命令,suid权限只能作用于二进制文件,给二进制文件添加suid权限的方法

chmod u+s someFile

sgid: 如果某二进制文件的用户组设置了s权限,则该用户组的所有用户都能以该用户的身份去运行这个命令,添加sgid的方法

chmod g+s someFile

sticky: 只能设置到目录上,设置了这个权限的目录,所有用户都可以在这个目录中创建或修改文件,但是有该文件的创建者和root用户可以删除这个文件,给目录添加t权限的方式

chmod o+t someDir

默认权限和umask

对于root用户,文件的默认权限为644,目录的默认权限为755;对于普通用户来说,文件的默认权限是664,目录的默认权限是775

umask遮罩,文件创建的默认权限为666遮罩后的值,目录创建的默认权限为777遮罩后的值

root用户遮罩值为022,普通用户遮罩值为002

查看文件类型: file

file someFile/someDir

查找文件

一般查找: find

find PATH-name fileName

如查找一个文件

find /-name *ypf*

使用数据库查找: locate

locate命令依赖于一个数据库文件,Linux默认每天都会检索一下系统中的所有文件,然后将检索到的文件记录到该数据库中.在执行这个命令之前,都需要执行undatedb,查找速度快于find

undatedb
locate *ypf*

注:centos7不能使用,不知道为什么

查找执行文件: which/whereis

which用于从系统的PATH变量所定义的目录中查找可执行文件的绝对路径,如查找passwd这个命令在系统中的绝对路径

which passwd

使用whereis也可以找到其路径,和which不同的是,它不但能找到二进制文件,还能找出相关的man文件

whereis passwd

文件压缩和打包

gzip/gunzip: 原文件不保留

用来压缩和解压缩单个文件,压缩后的文件以.gz结尾,

#压缩文件
gzip ypf.txt
#解压缩文件
gunzip ypf.txt.gz

tar: 原文件保留

不但可以打包文件,还可以将这个目录中全部文件整合成一个包,整合的同时还能使用gzip的功能进行压缩.一般来说,整合后的包使用.tar为后缀名,使用gzip压缩后的文件使用.gz为后缀名.因为tar有打包和压缩的功能,通常用.tar.gz为后缀名,或者简写为.tgz

#压缩文件
tar -zcvf ypf.tar.gz /ypf

其中-z使用gzip压缩,-c创建压缩文件,-v显示当前被压缩的文件,-f指定文件名

#解压缩文件
tar -zxvf ypf.tar.gz

其中-z是解压缩

如果需要指定压缩后的路径,则使用-C参数

tar -zxvf ypf.tar.gz -C /tmp

 

 

 

 

 

 

 

 

 

 

 

 

网络管理

常用命令

1.网络接口配置

使用ifconfig检查和配置网卡

MTU: 代表最大存储单元,即网卡一次所能传输的最大分包

RX和TX: 接收和发送的包

collision: 发生冲突数,如果不为0,则很可能存在网络故障

txqueuelen:传输缓冲区长度大小

将IP配置信息写入配置文件

网络配置文件所处的目录为/etc/sysconfig/network-scripts/,eth0的配置文件为ifcfg-eth0

DEVICE: 定义了设备的名称

BOOTPROTO: 定义了获取IP的方式(dhcp,static:静态配置IP地址)

ONBOOT: 启动时是否激活该设备

修改为静态IP

DEVICE=eht0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.243
NETMASK=255.255.255.0

修改完成后需要重启端口或重启网络服务

#重启网卡
ifconfig eth0 down
ifconfig eth0 up
#重启网络服务
service network restart

2.路由和网关设置

使用route来操作网关

#添加默认网关
route add default gw 192.168.1.243
#删除默认网关
route del default gw 192.168.1.243
route del default
#查看系统当前路由表
route -n

重启后便不能使用,可以将其配置在ifcfg-eth0中,或者配置在/etc/sysconfig/network中

GATEWAY=192.168.1.243

3.DNS客户端配置

设置主机为DNS客户端的配置文件为/etc/resolv.conf

4.网络测试工具

ping命令: 会对端主机发送一个ICMP的echo请求包,端主机会在收到这个包的时候回应一个ICMP的reply包

ping 192.168.1.243

host命令: 用来查询DNS记录

host www.baidu.com
#指定一个可用的DNS服务器,而是不是使用/etc/resolv.conf文件中定义的DNS查询
host www.baidu.com 8.8.8.8

tranceroute:

tranceroute www.baidu.com

5.常见网络故障排查

硬件故障:网卡物理损坏和链路故障

软件故障:网卡驱动故障

1.确认网卡本身能否正常工作,ping回环接口lo,IP地址为127.0.0.1,如果ping不通,这一证实本机的tcp/ip协议栈有问题

2.确认网卡是否出现了物理或驱动故障,使用ping本机的IP地址

3.确认能否同同网段的其他主机通信,这一步是为了确认二层网络设备(交换机或hub)能否正常工作

4.看能否ping同网关,如果数据可以到达网关,则说明主机和本地网络工作正常

5.看能否ping同公网上的IP,如果可以则说明本地路由设置正确

6.能否ping同公网上的某个域名

进程管理

常用命令

1.进程的观察: ps,top

1.ps: 输出的是瞬间的状态信息

ps aux: 显示所有包含其它使用者的进程

ps -ef: 常用

2.top: 输出的是实时的状态信息

f: 显示更多的字段 1: 查看每个逻辑CPU的使用情况 O: 另选排序规则
快捷键

M:按照Memory排序 P:按照CPU使用率排序 N:按照PID排序 T:按照CPU使用时间排序

K: 杀死一个进程 R:renice一个进程

2.进程的终止: kill,killall

kill [信号代码] 进程id

常用信号代码共三种:

HUP(1)重启, KILL(9)强行杀掉, TERM(15)正常结束

软重启或原地重启: 重启不会改变进程的pid

直接杀死进程可能会造成内存泄漏

查看进程的pid

pidof dhcpd

killall 更加简单高效

killall httpd

3.查询进程打开的文件: lsof

 

重定向

常用命令

1.文件标识符和标准输入输出

Linux使用0~9的整数指明了与特定进程相关的数据流,系统在启动一个进程的时候会同时为这个进程打开三个文件:标准输入(stdin)文件标识符0,标准输出(stdout)文件标识符1,标准错误输出(stderr)文件标识符2

2.I/O重定向

符号含义
>标准输出覆盖重定向
>>标准输出追加重定向
>&标识输出重定向:将一个标识的输出重定向到另一个标识的输入
<标准输入重定向
|

管道

标准输出重定向: >或>>

ls /usr 1>stdout.txt 2>stderr.txt
ls /usr 1>>stdout.txt 2>>stderr.txt

标识输出重定向: >&

#将标准输出和标准错误同时指定到一个文件中
command > stdout_stderr.txt 2>&1
#不保存错误输出
command > stdout.txt 2> /dev/null

标准输入重定向: <

sort < helloworld.txt

3.使用exec

命令说明
exec <file将file文件中的内容作为exec的标准输入
exec >file将file文件作为标准输出
exec 3<file

指定文件标识符

exec 3<&-关闭文件标识符
exec 3>file将写入文件标识符的内容写入到指定文件(这里的文件时file)
exec 4<&3创建文件标识符3的拷贝4

1.将file文件中的内容作为exec的标准输入

exec <command.txt

2.将file文件作为标准输出

即本次会话的所有标准输出重定向到out01.txt文件中,exec >/dev/tty 是将标准输出重定向到了显示器(/dev/tty为显示终端)

3.指定文件标识符

文件标识符也是一种设备,这个设备会出现在/dev/fd目录中

4.关闭文件标识符

5.将写入指定文件标识符的内容写入到指定文件

6.创建文件标识符的拷贝

4.Here Document: 此处文档

end为一个作为标注的分隔符

将要输入的内容保存在helloworld.txt文件中

字符处理

常用命令

使用grep搜索文本

grep [-ivnc] '需要匹配的字符' 文件名

i:不区分大小写,c:统计包含匹配的行数,n:输出行号,v:反向匹配

使用sort排序

sort [-ntkr] 文件名

n:采用数字排序,t:指定分隔符,k:指定第几列,r:反向排序

使用uniq删除重复内容

uniq [-ic]

i:忽略大小写,c:计算重复行数

uniq一般都需要和sort一起使用因为uniq命令只会对比相邻的行,如果重复的行非连续,则uniq会失效

cat a.txt |sort|uniq

使用cut截取文本

它处理的对象为每行,用法如下

cut -f指定的列 -d'分隔符'

例:打印文件/etc/passwd中这个用户和用户的家目录

cat /etc/passwd |cut -f1,6 -d':'

例:打印每个用户的用户名,家目录和shell

cat etc/passwd |cut -f1,6-7 -d':'

当每一行没有特定的分隔符的时候,可以打印特定的字符,用法如下

cut -c指定列的字符

例:打印每一行第1~5个字符,第7~10个字符

cat /etc/passwd |cut -c1-5,7-10

使用tr做文本转换

主要是做文本转换或删除

例:将文件/etc/passwd转换成大写,然后删除文本中的冒号

#转换成大写
cat /etc/passwd |tr '[a-z]' '[A-Z]'
#或者
cat /etc/passwd |tr 'a-z' 'A-Z'
#删除冒号
cat /etc/passwd |tr -d ':'
#转成大写并删除冒号
cat /etc/passwd |tr 'a-z' 'A-Z' |tr -d ':'

使用paste做文本合并:逐行合并

将文本进行逐行合并,中间默认tab隔开,也可以使用-d指定特定的分隔符

#默认使用tab合并
paste a.txt b.txt
#使用-d指定特定的分隔符进行合并
paste -d' ' a.txt b.txt

使用split分隔大文件

#指定参数l,按行进行分割
split -l500 bigFile.txt smail_file_
#指定参数b,按照文件大小来分割
split -b64m bigFile.txt smail_file_

正则表达式

基础正则表达式

1. "."符号: 匹配除了换行以外的任意一个字符

 

2. "*"符号: 匹配前一个字符0次或任意多次

 

3. "\{n,m\}"符号

\{n\}: 匹配前面的字符n次

\{n,\}: 匹配前面的字符n次及以上

\{n,m\}: 批签前面的字符n到m次

4. "^": 用于匹配开头的字符,如"^root"匹配以字母root开始的行

5. "$": 用于匹配尾部,如"abc$"代表以abc结尾的行

6. "[]": 用于匹配方括号内出现的任意字符

7. "\": 表示转义

8. "\<"和"\>": 用于定义单词的左右边界

扩展正则表达式

"?": 用于匹配前一个字符0次或1次

"+": 用于匹配前一个字符1次或多次

"|": 表示或者

通配符

"*": 代表0个或多个字符

"?": 任意一个字符

"{}": 匹配所有括号内包含以逗号分隔的字符

"^"和"!"这两个符号往往和[]一起使用,出现在[]中的时候,表示取反

常用命令

使用命令:systemctl status firewalld.service

查看防火墙状态

使用命令:systemctl stop firewalld.service    

关闭运行的防火墙

输入命令:systemctl disable firewalld.service,禁止防火墙服务器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值