2022年1月

进程线程协程

查看进程

ps

常用组合:aux,e,f,F,H,axo

  • u:以用户为中心组织进程状态信息显示
  • a:与终端相关的进程;
  • x:与终端无关的进程;
  • e: 显示所有进程
  • f:显示完整格式程序信息
  • F:显示完成格式的进程信息
  • H:以进程层级格式显示进程相关信息
  • axo:自定义显示字段,后面跟上想要的消息,用逗号分隔

ps aux与ps -aux不同,"ps -aux"打印用户名为"x"的用户的所有进程,以及打印所有将由-a选项选择的过程。如果用户名为"x"不存在,ps的将会解释为"ps aux",而且会打印一个警告。

[root@server1 ~]# ps aux
USER     PID  %CPU     %MEM    VSZ     RSS          TTY     STAT  START   TIME COMMAND
用户    进程ID CPU占用 内存占用 虚拟内存集 常驻内存集 终端/? 进程状态 启动事件 累计占用CPU事件 由哪个命令执行
root        1  0.2     0.6   128020    6520         ?        Ss   08:45   0:02 /usr/lib/syste
root        2  0.0     0.0        0       0         ?        S    08:45   0:00 [kthreadd]
root        3  0.0     0.0        0       0         ?        S    08:45   0:00 [ksoftirqd/0]
root        4  0.0     0.0        0       0         ?        S    08:45   0:00 [kworker/0:0]
root        5  0.0     0.0        0       0         ?        S<   08:45   0:00 [kworker/0:0H]
root        7  0.0     0.0        0       0         ?        S    08:45   0:00 [migration/0]
root        8  0.0     0.0        0       0         ?        S    08:45   0:00 [rcu_bh]
root        9  0.0     0.0        0       0         ?        S    08:45   0:00 [rcu_sched]

进程状态STAT

每个CPU核心同时只能处理一个进程,在进程运行时,随着资源分配情况不同,他也会处于不同的状态

R运行状态:进程要么在运行要么在运行队列

S睡眠状态/可中断睡眠:进程在等待事件的完成

D磁盘睡眠状态/不可中断睡眠:等待IO结束

T停止状态:可通过发送SIGSTOP信号给进程来停止进程,等接收到SIGCNT信号继续运行

Z僵尸状态:通知父进程回收资源

僵尸进程:当一个子进程退出后,如果父进程没有利用wait或者waitpid来获取子进程的状态信息,那么子进程的状态描述符依旧保存在系统中

孤儿进程:如果父进程突然被中止,子进程就成为孤儿进程,将被初始进程接管

+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader,即其有子进程

X死亡状态:这是一个返回状态,不会出现在任务列表

进程状态转换

avatar
linux系统进程状态

top

动态系统资源管理器

  • d n:n秒刷新一次
  • p n:指定PID
  • i:不显示闲置和僵尸进程
  • c:显示整个命令行
  • s:安全模式

运行过程中的指令

  • s – 改变画面更新频率
  • l – 关闭或开启第一部分第一行 top 信息的表示
  • t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示
  • m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
  • N – 以 PID 的大小的顺序排列表示进程列表
  • P – 以 CPU 占用率大小的顺序排列进程列表
  • M – 以内存占用率大小的顺序排列进程列表
  • h – 显示帮助
  • n – 设置在进程列表所显示进程的数量
  • q – 退出 top
  • s – 改变画面更新周期
  • 1 - 查看各个cpu占用情况
  • f - 定制化条目,按d或者选择条目,s为选择默认排列顺序

avatar

top - 18:43:43 up  2:41,  1 user,  load average: 0.00, 0.01, 0.05

任务队列消息,按l取消该行

系统时间,运行事件,当前用户,负载均衡(1分钟,5分钟,15分钟,每隔5s检查一次活跃的进程数,按照特定算法计算出值,除以逻辑CPU的数量,高于5的时候就表明系统在超负荷运转)

Tasks: 108 total,   1 running, 107 sleeping,   0 stopped,   0 zombie

总进程,运行,休眠,停止,僵尸

%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

0.0%us【user space】— 用户空间占用CPU的百分比。

0.0%sy【sysctl】— 内核空间占用CPU的百分比。

0.0%ni【】— 改变过优先级的进程占用CPU的百分比

100%id【idolt】— 空闲CPU百分比

0.0%wa【wait】— IO等待占用CPU的百分比

0.0%hi【Hardware IRQ】— 硬中断占用CPU的百分比

0.0%si【Software Interrupts】— 软中断占用CPU的百分比

KiB Mem :   995924 total,   734508 free,    99996 used,   161420 buff/cache

内存状态

KiB Swap:  2097148 total,  2097148 free,        0 used.   721236 avail Mem

swap交换分区

   PID  USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND

PID — 进程id

USER — 进程所有者

PR — 进程优先级

NI — nice值。负值表示高优先级,正值表示低优先级

VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR — 共享内存大小,单位kb

S —进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

%CPU — 上次更新到现在的CPU时间占用百分比

%MEM — 进程使用的物理内存百分比

TIME+ — 进程使用的CPU时间总计,单位1/100秒

COMMAND — 进程名称(命令名/命令行)

进程控制

kill [] PID

-l:列出所有支持的信号

[root@server1 ~]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

常用

编号信号名作用
1SIGHUP重新加载
2SIGINT键盘中断
9SIGKILL强制终止
15SIGTERM正常结束,缺省信号

pkill [] name

pkill能够直接对进程名进行操作

-P:只对父进程号发送信号
-g 指定进程组
-t:指定开启进程的终端
-u:指定用户

[root@xwz ~]# pkill -u centos [root@xwz ~]# pkill -t pts/2 # 终止pts/2上所有进程 [root@xwz ~]# pkill -9 -t pts/2 # 终止pts/2上所有进程,并结束pts/2

进程优先级

cpu同一个事件只能处理一个进程,通过时间片调度使得linux实际能够运行的进程数要超过cpu核心数量,给用户多个进程同时运行的家乡

每个进程的重要成都不一样,SCHED_OTHER调度策略运行的进程的相对优先级称为进程的nice值,从-20到19,nice值越高,优先级越低.子进程通常会继承父进程的nice级别

renice 数值 PID可以调整nice值

top的r也可以调整nice

nice -n 值 systemctl start 服务可以以指定的nice值启动进程

进程优先级可以用0-139表示

0-99:实时优先级,越高越优先
100-139:静态优先级,数字越小越优先

作业控制jobs

前台进程:在终端中运行

后台进程:与终端无关

jobs查看后台进程

fg id把作业id调回前台

kill %id 杀死作业号为id的后台程序

远程主机

screen

-S 'name':开启一个新的终端并指定名称

-r id :连上指定终端

-list:列出所有终端

ctrl+a+d:列出所有终端列表

基础概念

进程

进程是程序在某一数据集上的一次运行活动,是系统进行资源分配和调度的进本单位,由以下组成

分配给他的内存地址空间
安全属性
线程
进程状态

进程的特性

  • 动态性:进程是程序的一次执行过程,是动态的
  • 并发性:进程可以和别的进程一起并发执行
  • 独立性:进程是能够独立运行的基本单位,也是系统执行资源分配和调度的独立单位
  • 异步性:由于进程间的相互制约,进程的执行是间断性的。
  • 结构:进程由程序、数据、进程控制块组成
  • 同个程序可以在不同的数据集上构成不同的进程得到不同的结果,但是在执行过程中程序不能发生改变

进程的状态转化

avatar

就绪:进程已经被分配到出了CPU以外所有的资源,等到获取到了就可以立即执行

执行:进程正在运行中

阻塞:正在执行的进程,由于某些条件不满足无法继续执行,于是放弃CPU处于阻塞状态

进程的切换

同步和异步

同步指一个任务的完成必须要依赖另外一个任务的时候,得等到那个被依赖的任务完成后,这个任务才能完成,要么都成功,要么都失败,两个任务的状态可以保持一致

异步指任务通知完被依赖的任务需要做什么工作后,这个任务不需要等待他,而是继续自己执行,只要自己这个任务完成就算完成了,所以异步是不可靠的序列

阻塞和非阻塞

阻塞是指运行中的进程(线程)在获得想要的结果之前,这个进程(线程)会被挂起

非阻塞指调用无法立即获得想要结果时,也不会阻塞该进程

异步操作也是可以被阻塞的,只不过他是在等待消息通知的时候被阻塞,而不是处理消息的时候被阻塞

并行与并发

并行指两者同时进行

并发指资源有限的情况下,两者交替轮流使用资源

死锁

指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程

进程类型

守护进程:与终端无关,由系统引导启动

前台进程:与终端有关

生命周期

https://www.cnblogs.com/zhangchao0515/p/5339964.html

linux中创建一个新进程的方式是使用fork函数,fork()执行一次有两个返回值,在父进程中返回值是子进程的进程号,在子进程中返回值是0

使用fork函数得到的子进程是父进程的一个复制品,它从父进程处复制了整个进程的地址空间,包括进程上下文,进程堆栈,内存信息,打开的文件描述符,信号控制设定,进程优先级,进程组号,当前工作目录,根目录,资源限制,控制终端等。而子进程所独有的只是它的进程号,资源使用和计时器等

父进程fork复制自己的地址空间创建子进程,每个子进程分配一个PID,PID和父进程的PID是子进程环境的元素,所有进程都可以创建子进程,所有进程都由初始进程创建

子进程继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码,随后子进程自己运行,通常父进程在子进程运行期间处于睡眠状态,当子进程完成发出信息退出,父进程接收子进程的信号被唤醒。子进程在退出时丢弃资源环境,其余部分称为僵尸,父进程被唤醒后清理剩余结构并继续执行自己的代码

初始进程

centos5/6:init
centos7:systemd

linux主要以四种方式创建新的进程

  • 系统初始化(前台进程负责和用户交互,后台进程与用户武馆,运行在后台并且直在需要时才唤醒的进程叫做守护进程)
  • 进程在运行中开启子进程
  • 用户的交互式请求而创建一个新进程(双击打开某exe)
  • 一个批处理作业的初始化

    进程状态

    每个CPU核心同时只能处理一个进程,在进程运行时,随着资源分配情况不同,他也会处于不同的状态

R运行状态:进程要么在运行要么在运行队列

S睡眠状态/可中断睡眠:进程在等待事件的完成

D磁盘睡眠状态/不可中断睡眠:等待IO结束

T停止状态:可通过发送SIGSTOP信号给进程来停止进程,等接收到SIGCNT信号继续运行

Z僵尸状态:通知父进程回收资源

僵尸进程:当一个子进程退出后,如果父进程没有利用wait或者waitpid来获取子进程的状态信息,那么子进程的状态描述符依旧保存在系统中

孤儿进程:如果父进程突然被中止,子进程就成为孤儿进程,将被初始进程接管

X死亡状态:这是一个返回状态,不会出现在任务列表

线程

线程是进程中最小的执行单位

这句话是什么意思?

就比如说,我们打开任务管理器,里面能看到很多进程,我们双击打开一个qq,那也是一个进程,这个运行着的qq他有很多功能,比如说看天气,群消息,好友消息等等,我们可以在看天气的时候,同时去看好友消息,他们不是同一个功能,但是执行起来不需要等一个结束了才能去执行另外一个,这个就叫多线程,再更具体一点,比如说看下面这段代码

avatar

这里提供了一个work函数,下面采用了两种调用方式:一种是多线程,一种是多进程他们的区别在于。多进程,p1和p2每一个都分配到了一份空间资源等,他们在自己各自的那份资源里面运行work,而多线程模式下,主进程拥有t1,t2两个线程,主进程占有一份资源,t1和t2不另外再去外面获取资源,而是在主进程的那份当中获取一部分来执行work。

多进程与多线程的优缺点

多进程可以使用多个内核,可以通过增加CPU来提升性能,另外可以减少线程加锁/解锁对性能的影响,每个进程互相独立,子进程崩溃也不会影响主程序的稳定性,理论上来说多进程好像会多耗很多资源,但是在linux里面,linux采用写时拷贝,可以节省一定的资源,当一个变量x在父进程中存在,父进程在创建多个子进程的时候,子进程不会每个都把这个x复制一遍,而是和父进程采用同一个内存空间的变量,当子或父进程需要改变x的值的时候,才会复制这个变量,这样父子之间变量互不影响,父子进程地址空间完全隔开,但是变量的地址可以完全相同。多进程和多线程两者开销没有显著区别,而多进程的性能明显要好于多线程

多进程具有封闭性和可再现性,多道程序设计实现了程序的并发执行和资源贡献,提高了系统效率和资源利用率

多进程的控制逻辑较为复杂,需要和主程序交互、跨进程边界,如果有大量数据传送就不太好

多进程和多线程的优缺点

在Linux下编程多用多进程编程少用多线程编程。

多线程无需跨进程边界,程序逻辑和控制比较简单,线程可以共享内存和变量等,消耗的总资源比进程少点,操作系统切换线程比在切换进程速度上要快得多。多线程一般用于IO密集型的任务

多线程比起多进程,会存在一些安全隐患,当多线程处理同一个共享变量的时候,可能A刚把这个数读出来,B对其进行了减一操作,而A不变,这样会导致数值上出现问题.为了防止这个问题我们可以对这个变量加锁,当一个对象给锁住了的时候,如果别的线程想要获取这个对象,必须等锁他的线程执行完释放后才可以,否则一直处于等待状态

多线程一个挂全完蛋,进程则互不影响

什么是多线程?如何实现多线程?

协程

协程是一种用户态的轻量级线程,由用户自己控制调度,一个线程可以拥有多个协程.一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协助运行,在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只有在明确的被要求挂起的时候才会被挂起。常用的如python的yield,await等

基本

MB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。SMB使用了NetBIOS的应用程序接口 (Application Program Interface,简称API),一般端口使用为139,445。

SMB协议

  • SMB(服务信息模块)协议是一个高层协议、它提供了在网络上的不同计算机之间共享文
    件,打印机和不同通信资料的手段
  • SMB使用NetBIOS API实现面向连接的协议,该协议为Window是客户程序和服务提供了一个
    通过虚链路按照请求——响应方式进行通信的机制
  • SMB的工作原理就是让NetBIOS与SMB协议运行在TCP/IP上,并且使用NetBIOS的名字解释
    器让Linux机器可以在Windows的网络邻居中被看到,从而在Windows的网络邻居中被看到,从而和Windows9x/NT/200X进行相互沟通,共享文件和打印机

CIFS:

  • 通用网际文件系统是微软服务器消息块协议(SMB)的增强版
  • 提供计算机用户在企业内部网和因特网上共享文件的标准方法
  • CIFS在TCP/IP运行,利用英特网上的全球域名服务系统(DNS)增强其可扩展性,同时为因
    特网上普遍存在的慢速拨号连接优化

NetBIOS协议

  • NetBIOS是Network Basic Input/Output System的简称,网络基本输入输出协议。协议,一般指能用于局域网通信的一套API,是由IBM公司开发的。主要作用,通过NetBIOS协议获得计算机名称,然后把计算机名称解析为对应的IP地址

    配置及概念

相关配置

/etc/sysconfig/samba:用于设置守护进程的启动参数。 
/etc/samba/smb.conf:主配置文件。 
/etc/samba/smbusers:用于映射Linux用户和Windows用户。 
/etc/samba/lmhosts:用于设置NetBIOS名字与IP地址的对应关系表。
/etc/pam.d/samba:Samba的PAM配置文件 
/etc/rc.d/init.d/smb:Samba的INIT启动脚本

相关工具

服务端工具: 
  /usr/bin/smbpasswd:用于设置Samba用户账号及口令 
  /usr/bin/testparm:用于检测配置文件的正确性 
  /usr/bin/smbstatus:用于查找网络中的Samba服务器 

客户端工具: 
  /usr/bin/findsmb:用于查找网络中的Samba服务器 
  /usr/bin/smbclient:Linux下的Samba客户端 
  /usr/bin/smbget:基于SMB/CIFS的类似于wget的下载工具 
  /usr/bin/smbtar:类似于tar的归档工具,用于将SMB/CIFS的共享打包备份到Linux主机

安全等级

Samba安全等级: 
  User:由本地Samba服务器负责账户验证,使用smbpasswd 设置账号(默认的安全等级) 
  Domain:账户验证账户及口令的工作由其他的Windows,或Samba域控制器负责,需要使用“password server”指令指定验证服务器 
  Ads:验证账户及口令的工作由支持Kerberos验证的Windows活动目录服务器负责。需要使用“realm”指令指定Kerberos领域 
  Share:匿名共享 
  
Samba账户及口令数据库 
1.Samba使用的账户文件/数据库是与系统账户文件分离的 
2.当设置了user的安全等级后(默认),将由本地系统对问Samba共享资源的用户进行认证 
3.用.tdb格式的口令数据库,初始情况下口令数据库文件并不存在 
4.为了创建Samba的口令数据库文件,管理员可以在添加Samba账户的同时创建它 
5.管理员可以使用smbpasswd命令配置Samba账号并设置其口令

主配置文件

avatar

实验

通过用户名设置共享目录

共享销售部 /xsb 这个目录,只有知道用户名和密码的同时可以看这个共享,在/xsb目录中存放销售部重
要的数据。需要将security设置为user级别,这样可以启用samba身份验证机制,然后在共享目录 /xsb
下设置valid user 字段,配置只允许销售部员工能访问这个共享目录


[root@server1 ~]# vim /etc/samba/smb.conf 
[global]
    workgroup = SAMBA 
    security = user 
    passdb backend = smbpasswd
    smb passwd file = /etc/samba/smbpasswd
    # passdb backend = tdbsam

[root@server1 ~]# systemctl restart smb.service
重启后,会自动生成/etc/samba/smbpasswd文件

添加用户和组,该用户禁止登录,不生成登录目录

[root@server1 ~]# groupadd xsb
[root@server1 ~]# useradd -g xsb -M -s /sbin/nologin xsb001
[root@server1 ~]# useradd -g xsb -M -s /sbin/nologin xsb002
[root@server1 ~]# useradd jsb001

添加对应的samba账户

[root@server1 ~]# smbpasswd -a xsb001
New SMB password:
Retype new SMB password:
Added user xsb001.
[root@server1 ~]# smbpasswd -a xsb002
New SMB password:
Retype new SMB password:
Added user xsb002.

修改配置文件,重启服务

[root@server1 ~]# mkdir /xsb [root@server1 ~]# cp /etc/hosts /xsb [root@server1 ~]# vim /etc/samba/smb.conf 
[xsb] 
    comment = Xsb Data 
    path = /xsb 
    valid user = xsb01,xsb02


[root@server1 ~]# systemctl restart smb.service
[root@server1 ~]# systemctl restart nmb.service
#nmb是做ip与主机名映射用的

检查139和445

[root@server1 ~]# ss -tanl
State       Recv-Q Send-Q Local Address:Port               Peer Address:Port
LISTEN      0      50                *:139                           *:*
LISTEN      0      128               *:22                            *:*
LISTEN      0      100       127.0.0.1:25                            *:*
LISTEN      0      50                *:445                           *:*
LISTEN      0      50               :::139                          :::*
LISTEN      0      128              :::22                           :::*
LISTEN      0      100             ::1:25                           :::*
LISTEN      0      50               :::445                          :::*

验证

linux

[root@server1 ~]# yum install samba-client -y


[root@server1 ~]# smbclient -L //192.168.226.148/xsb -U xsb001
Enter SAMBA\xsb001's password:

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        xsb             Disk      Xsb Data
        IPC$            IPC       IPC Service (Samba 4.10.16)
        xsb001          Disk      Home Directories
Reconnecting with SMB1 for workgroup listing.

windows

win+r 输入\\ip

dos窗口用net user * /delete可以清空用户缓存信息

avatar

巨慢无比....一时半会儿不出来别急

挂载

[root@server1 ~]# mkdir /xsbdata
[root@server1 ~]# yum install cifs-utils -y
vim auth.smb

username=某用户
password=某用户smb密码

vim /etc/fstab
//ip/xsb /xsbdata cifs defaults,credentials=/root/auth.smb 0 0

[root@server1 ~]# mount -a
[root@server1 ~]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
/dev/mapper/centos-root 17811456 1267400 16544056    8% /
devtmpfs                  485792       0   485792    0% /dev
tmpfs                     497960       0   497960    0% /dev/shm
tmpfs                     497960    7852   490108    2% /run
tmpfs                     497960       0   497960    0% /sys/fs/cgroup
/dev/sda1                1038336  135376   902960   14% /boot
tmpfs                      99596       0    99596    0% /run/user/0
//192.168.226.148/xsb   17811456 1267400 16544056    8% /xsbdata

不同账户访问不同目录

创建三个无家目录不能登陆的用户

[root@server1 ~]# useradd -s /sbin/nologin -r smb1
[root@server1 ~]# useradd -s /sbin/nologin -r smb2
[root@server1 ~]# useradd -s /sbin/nologin -r smb3
[root@server1 ~]# smbpasswd -a smb1
New SMB password:
Retype new SMB password:
Added user smb1.
[root@server1 ~]# smbpasswd -a smb2
New SMB password:
Retype new SMB password:
Added user smb2.
[root@server1 ~]# smbpasswd -a smb3
New SMB password:
Retype new SMB password:
Added user smb3.

查看smb账号

[root@server1 ~]# pdbedit -L
xsb001:1000:
xsb002:1001:
smb1:997:
smb2:996:
smb3:995:

修改配置文件

[root@server1 ~]# vim /etc/samba/smb.conf
在workgroup下加一行
config file= /etc/samba/conf.d/%U 说明:%U表示用户名 

[share] #共享文件夹在最后添加 
Path=/data/dir #指定分享文件夹的路径 
Read only= NO #不仅仅是只读 
Guest ok = yes 
write list=@admin 

创建目录,对smb1和smb2创建单独的配置文件


[root@server1 ~]# mkdir /data
[root@server1 ~]# mkdir /data/dir
[root@server1 ~]# mkdir /data/dir1
[root@server1 ~]# mkdir /data/dir2
[root@server1 ~]# mkdir /data/dir/share.txt
[root@server1 ~]# mkdir /data/dir1/smb1.txt
[root@server1 ~]# mkdir /data/dir2/smb2.txt


[root@server1 ~]# mkdir /etc/samba/conf.d

[root@server1 ~]# vim /etc/samba/conf.d/smb1
[share] 
Path=/data/dir1
Read only= NO 等价于writable = yes 
Create mask=0644

[root@server1 conf.d]# vim /etc/samba/conf.d/smb2
[share] 
path=/data/dir2

[root@server1 conf.d]# systemctl restart smb nmb

在客户机上测试

[root@server2 ~]# yum -y install samba-client samba-common cifs-rtils samba

[root@server2 ~]# smbclient //192.168.226.148/share -U smb1%123
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Tue Jan 18 15:41:33 2022
  ..                                  D        0  Tue Jan 18 15:41:15 2022
  smb1.txt                            D        0  Tue Jan 18 15:41:33 2022

                17811456 blocks of size 1024. 16543616 blocks available
smb: \> exit
[root@server2 ~]# smbclient //192.168.226.148/share -U smb2%123
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Tue Jan 18 15:41:38 2022
  ..                                  D        0  Tue Jan 18 15:41:15 2022
  smb2.txt                            D        0  Tue Jan 18 15:41:38 2022

                17811456 blocks of size 1024. 16543616 blocks available
smb: \> exit
[root@server2 ~]# smbclient //192.168.226.148/share -U smb3%123
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Tue Jan 18 15:41:24 2022
  ..                                  D        0  Tue Jan 18 15:41:15 2022
  share.txt                           D        0  Tue Jan 18 15:41:24 2022

                17811456 blocks of size 1024. 16543596 blocks available
smb: \> exit

基础

NFS,网络文件系统,允许网络中的计算机之间通过网络共享资源,当将NFS主机分享的目录挂载到本地时,本地可以读写NFS服务器上的文件。

nfs本身没有网络传输的功能,而是基于远程过程调用协议实现

RPC:远程过程调用,当两台异地服务器AB,A想要调用B上应用提供的函数,由于不在同一个内存空间,不能直接调用,而是要通过网络来表达调用的语义和传达调用的数据。他可为遵从RPC协议应用层协议提供端口注册功能,工作于会话层,使用111端口来监听客户端的请求

  • 基于RPC的服务在启动时向portmapper注册端口
  • 客户端联系服务端portmapper询问端口号
  • portmapper告诉客户端端口号
  • 客户端访问该端口
  • 服务端响应请求

avatar

实验

挂载

关防火墙和selinux
webserver端安装web服务

yum install httpd -y
systemctl start httpd

NAS端

yum install -y nfs-utils
mkdir /webdata
vim /webdata/index.html

vim /etc/exports
/webdata ip/24(rw)

systemctl start nfs-server.service
systemctl enable nfs-server.service

web端查看共享

yum install -y nfs-untils
showmount -e ip

web挂载

mount -t nfs ip:/webdata /var/www/html
df

在浏览器测试访问即可

自动挂载

服务器


[root@server1 ~]# mkdir /data
[root@server1 ~]# useradd -d /data/user user
[root@server1 ~]# id user
uid=1000(user) gid=1000(user) 组=1000(user)
[root@server1 ~]# yum install -y nfs-utils.x86_64


[root@server1 ~]# vim /etc/exports.d/test.exports
/data/user  *(rw,anonuid=1000,anongid=1000,all_squash)


[root@server1 ~]# systemctl restart nfs-server.service
[root@server1 ~]# cd /data/user/
[root@server1 user]# touch 123

客户端

[root@server1 ~]# yum install nfs-utils.x86_64

[root@server1 ~]# showmount -e 192.168.226.148
Export list for 192.168.226.148:
/data/user *
[root@server1 ~]# mkdir /data
[root@server1 ~]# mount -t nfs 192.168.226.148:/data/user /data
[root@server1 ~]# df -Th
文件系统                   类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root    xfs        17G  1.2G   16G    7% /
devtmpfs                   devtmpfs  475M     0  475M    0% /dev
tmpfs                      tmpfs     487M     0  487M    0% /dev/shm
tmpfs                      tmpfs     487M  7.7M  479M    2% /run
tmpfs                      tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/sda1                  xfs      1014M  133M  882M   14% /boot
tmpfs                      tmpfs      98M     0   98M    0% /run/user/0
192.168.226.148:/data/user nfs4       17G  1.2G   16G    7% /data
[root@server1 ~]# umount /data
[root@server1 ~]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
/dev/mapper/centos-root 17811456 1232320 16579136    7% /
devtmpfs                  485792       0   485792    0% /dev
tmpfs                     497960       0   497960    0% /dev/shm
tmpfs                     497960    7816   490144    2% /run
tmpfs                     497960       0   497960    0% /sys/fs/cgroup
/dev/sda1                1038336  135376   902960   14% /boot
tmpfs                      99596       0    99596    0% /run/user/0
[root@server1 ~]# yum install autofs


[root@server1 ~]# vim /etc/auto.master
/data /etc/auto.home

[root@server1 ~]# vim /etc/auto.home
*  -fstype=nfs 192.168.226.148:/data/user


[root@server1 ~]# systemctl restart autofs
[root@server1 ~]# useradd -d /data/user -u 1000 user
useradd:警告:此主目录已经存在。
不从 skel 目录里向其中复制任何文件。
[root@server1 ~]# ls /data/
user
[root@server1 ~]# su - user
[user@server1 ~]$ ls
123

rpm

常用指令

-a:查询所有安装包
‐f:查询指定的文件由哪个程序包安装生成
-h, --hash   软件包安装的时候列出哈希标记 
‐i:information
-v, --verbose    提供更多的详细信息输出
‐l:查看指定的程序文件安装后生成的所有文件
安装RPMs
rpm -ivh packagename
升级RPMs
rpm -Uvh packagename
移除RPMS
rpm -ev packagename
查看指定包是否安装
rpm -q 包名
rpm -qa | grep 包名
查找指定包安装的文件
rpm -ql 包名
查询包的info
rpm -qi 包名

源码包

  1. ./configure [--]

    1. 指定安装路径,例如 --prefix=/usr/local/nginx
    2. 启用或禁用某些功能,例如 --enable-ssl 、 --disable-filter 、 --with- http_ssl_module
    3. 和其他软件关联,例如 --with-pcre
    4. 检查安装环境
  2. make,可以用-j用多颗cpu编译
  3. make install

yum

基于rpm包管理,能够从指定服务器自动下载rpm包并安装,自动解决依赖关系

常用指令

查看可用仓库

yum repolist #查看默认的源
yum clean all #清空缓存及其他文件
yum makecache #重建缓存

软件包安装

yum -y install 包名/本地包名/url #-y是默认确认的意思,可以不加
yum -y reinstall 包名
yum update 包名 #不加包名就是更新所有软件
yum list #列出所有可安装的软件清单
yum list/info 包名 #查询包是否群在
yum remove 包名#删除
yum search 指令名 #查找软件包
yum grouplist #安装环境,如图形桌面等

历史

yum history #查看历史记录
yum history info id #列出某次详细详细
yum history undo id #撤销某次更改

国内yum源:

163:http://mirrors.163.com/.help/centos.html
中科大:https://mirrors.ustc.edu.cn/help/centos.html
阿里:https://developer.aliyun.com/mirror/
清华:https://mirror.tuna.tsinghua.edu.cn/help/centos/

实验

yum换源

查看默认源

[root@server1 ~]# yum repolist
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.njupt.edu.cn
 * extras: mirrors.cn99.com
 * updates: mirrors.cn99.com
源标识                                  源名称                                   状态
!base/7/x86_64                          CentOS-7 - Base                          10,072
!extras/7/x86_64                        CentOS-7 - Extras                           500
!updates/7/x86_64                       CentOS-7 - Updates                        3,252

下载对应源的CentOS-Base.repo,最后再生成缓存

[root@server1 yum.repos.d]# yum makecache
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
base                                                            | 3.6 kB  00:00:00
extras                                                          | 2.9 kB  00:00:00
updates                                                         | 2.9 kB  00:00:00
(1/7): extras/7/x86_64/other_db                                 | 145 kB  00:00:01
(2/7): extras/7/x86_64/filelists_db                             | 259 kB  00:00:01
(3/7): base/7/x86_64/other_db                                   | 2.6 MB  00:00:05
(4/7): base/7/x86_64/filelists_db                               | 7.2 MB  00:00:08
(5/7): updates/7/x86_64/filelists_db                            | 7.0 MB  00:00:09
(6/7): updates/7/x86_64/other_db                                | 918 kB  00:00:00
(7/7): updates/7/x86_64/primary_db                              |  13 MB  00:00:09
元数据缓存已建立

通过ftp提供update源

配置防火墙、关selinux、准备FTP

 firewall-cmd --permanent --add-service=ftp
 firewall-cmd --reload 12

 setenforce 0
 sed -i "s/=enforcing/=disabled/g" /etc/sysconfig/selinux 12

 yum -y install vsftpd
 systemctl start vsftpd
 sysemctl enable vsftpd
#开启yum缓存
vim /etc/yum.conf
keepcache=1

yum update -y

mkdir /var/ftp/update

find /var/cache/yum/x86_64/7/ -iname "*.rpm" |xargs -i  cp {} /var/ftp/update/

yum -y install createrepo
#创建软件仓库
createrepo /var/ftp/update

avatar
avatar