fedora 12怎么安装第三方底部虚拟按键apk软件工具点击没反应

请教如何用虚拟机安装fedora linux系统啊?安装到下面一幅图就不会了... 点击tab按键出现了第二幅图 不懂

}

一、Linux终端、内核等概念

  • Shell 是指“提供给使用者使用界面”的软件(命令解析器),类似于 DOS 下的 command(命令行)和后来的 > file3

    第一个 sort 是为 uniq 做准备,第二个是以重复次数从大到小排列, head -3 是只写前三。

    0

    文件描述符:是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于 UNIX、Linux 这样的操作系统。

    • 默认使用终端的标准输入作为命令的输入和标准输出作为命令的输出
    1. # 或者匹配不包含"baidu"的内容

    • sed 命令基本格式:
    安静模式,只打印受影响的行,默认打印输入数据的全部内容
    用于在脚本中添加多个执行命令一次执行,在命令行中执行多个命令通常不需要加该参数
    指定执行filename文件中的命令
    使用扩展正则表达式,默认为标准正则表达式
    将直接修改输入文件内容,而不是打印到标准输出设备
  1. # 其中一些命令可以在后面加上作用范围,形如:

其中n1,n2表示输入内容的行号,它们之间为,逗号则表示从n1到n2行,如果为波浪号则表示从n1开始以step为步进的所有行;command为执行动作,下面为一些常用动作指令:

打印指定行,通常与-n参数配合使用
  1. # 将输入文本中"shiyanlou" 全局替换为"hehe",并只打印替换的那一行,注意这里不能省略最后的"p"命令
  1. (这里我们只把要删的行打印出来了,并没有真正的删除,如果要删除的话,请使用-i参数)

它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。最简单地说,AWK是一种用于处理文本的编程语言工具。

不过我们通常可以直接使用awk命令(awk语言的解释器),因为系统已经为我们创建好了awk指向mawk的符号链接。

mawk 也是awk编程语言的一种解释器

awk所有的操作都是基于pattern(模式)—action(动作)对来完成的,如下面的形式:

它将所有的动作操作用一对{}花括号包围起来。其中pattern通常是表示用于匹配输入的文本的“关系式”或“正则表达式”,action则是表示匹配后将执行的动作。在一个完整awk操作中,这两者可以只有其中一个,如果没有pattern则默认匹配输入的全部文本,如果没有action则默认为打印匹配内容到屏幕。

  • awk处理文本的方式,是将文本分割成一些“字段”,然后再对这些字段进行处理,默认情况下,awk以空格作为一个字段的分割符,不过这不是固定的,你可以任意指定分隔符,下面将告诉你如何做到这一点。

    注意: .* 表示任意多个字符,特殊字符前加上\

    • 快速学会vim的基础操作:

    • 注意:如果你在安装一个软件之后,无法立即使用Tab键补全这个命令,你可以尝试先执行source ~/.zshrc,然后你就可以使用补全操作

    • APT是Advance Packaging Tool(高级包装工具)的缩写,APT可以自动下载,配置,安装二进制或者源代码格式的软件包,因此简化了Unix系统上管理软件的过程。APT最早被设计成dpkg的前端,用来处理deb格式的软件包。现在经过APT-RPM组织修改,APT已经可以安装在支持RPM的系统管理RPM包。这个包管理器包含以 apt- 开头的多个工具,如

    • 当你在执行安装操作时,首先apt-get 工具会在本地的一个数据库中搜索关于 w3m 软件的相关信息,并根据这些信息在相关的服务器上下载软件安装。

    • 我们需要定期从服务器上下载一个软件包列表,使用 sudo apt-get update 命令来保持本地的软件包列表是最新的(有时你也需要手动执行这个操作,比如更换了软件源),而这个表里会有软件依赖信息的记录,对于软件依赖,我举个例子:我们安装 w3m 软件的时候,而这个软件需要 libgc1c2 这个软件包才能正常工作,这个时候 apt-get 在安装软件的时候会一并替我们安装了,以保证 w3m 能正常的工作。

    • 下面列出一些apt-get包含的常用的一些工具:

    • 下面是一些apt-get常用的参数:

    • 你可以使用如下方式重新安装:

    • 另一个你需要掌握的是,如何在不知道软件包完整名的时候进行安装。通常我们是使用Tab键补全软件包名。

    1. # 升级没有依赖问题的软件包
    2. # 升级并解决依赖关系
    3. # 或者不保留配置文件的移除
    4. # 移除不再需要的被依赖的软件包
    • 当自己刚知道了一个软件,想下载使用,需要确认软件仓库里面有没有,就需要用到搜索功能了,命令如下:

      apt-cache 命令则是针对本地数据进行相关操作的工具,search 顾名思义在本地的数据库中寻找有关 softname1 softname2 …… 相关软件的信息。

    • dpkg本身是一个底层的工具。上层的工具,像是 APT,被用于从远程获取软件包以及处理复杂的软件包关系。"dpkg"是"Debian Package"的简写。
    • 我们经常可以在网络上见到以deb形式打包的软件包,就需要使用dpkg命令来安装。

    1. # 安装之前参看deb包的信息
    • 这个包还额外依赖了一些软件包,这意味着,如果主机目前没有这些被依赖的软件包,直接使用dpkg安装可能会存在一些问题,因为dpkg并不能为你解决依赖关系。

      使用它的-f参数了,修复依赖关系的安装

    • 查看已安装软件包的安装目录

    • 用户进程:通过执行用户程序、应用程序或称之为内核之外的系统程序而产生的进程,此类进程可以在用户的控制下运行或关闭。
    • 系统进程:通过执行系统内核程序而产生的进程,比如可以执行内存资源分配和进程切换等相对底层的工作;而且该进程的运行不受用户的干预,即使是 root 用户也不能干预系统进程的运行。
    • 交互进程:由一个 shell 终端启动的进程,在执行过程中,需要与用户进行交互操作,可以运行于前台,也可以运行在后台。
    • 批处理进程:该进程是一个进程集合,负责按顺序启动其他的进程。
    • 守护进程:守护进程是一直运行的一种进程,在 Linux 系统启动时启动,在系统关闭时终止。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。例如 httpd 进程,一直处于运行状态,等待用户的访问。还有经常用的 cron(在 centOS 系列为 crond)进程,这个进程为 crontab 的守护进程,可以周期性的执行用户设定的某些任务。

    • 就比如我们启动了终端,就是启动了一个 bash 进程,我们可以在 bash 中再输入 bash 则会再启动一个 bash 的进程,此时第二个 bash 进程就是由第一个 bash 进程创建出来的
    • 于父进程与子进程便会提及这两个系统调用 fork()exec()
    • fork() 是一个系统调用(system call),它的主要作用就是为当前的进程创建一个新的进程,这个新的进程就是它的子进程,这个子进程除了父进程的返回值和 PID 以外其他的都一模一样,如进程的执行代码段,内存信息,文件描述,寄存器状态等等
    • exec() 也是系统调用,作用是切换子进程中的执行程序也就是替换其从父进程复制过来的代码段与数据段
    • 子进程就是父进程通过系统调用 fork()而产生的复制品,fork() 就是把父进程的 PCB 等进程的数据结构信息直接复制过来,只是修改了 PID,所以一模一样,只有在执行 exec()之后才会不同,而早先的 fork() 比较消耗资源后来进化成

    简单的实现逻辑就如下方所示

    • 当一个子进程要正常的终止运行时,或者该进程结束时它的主函数 main() 会执行 exit(n); 或者return n,这里的返回值n 是一个信号,系统会把这个SIGCHLD 信号传给其父进程,当然若是异常终止也往往是因为这个信号。
    • 在将要结束时的子进程代码执行部分已经结束执行了,系统的资源也基本归还给系统了,但若是其进程的进程控制块(PCB)仍驻留在内存中,而它的 PCB 还在,代表这个进程还存在(因为 PCB 就是进程存在的唯一标志,里面有 PID 等消息),并没有消亡,这样的进程称之为僵尸进程(Zombie)。
    • 正常情况下,父进程会收到两个返回值:exit code(SIGCHLD 信号)与 reason for termination 。之后,父进程会使用 wait(&status) 系统调用以获取子进程的退出状态,然后内核就可以从内存中释放已结束的子进程的 PCB;而如若父进程没有这么做的话,子进程的 PCB 就会一直驻留在内存中,一直留在系统中成为僵尸进程(Zombie)。
    • 虽然僵尸进程是已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,在进程列表中保留一个位置,记载该进程的退出状态等信息供其父进程收集,从而释放它。但是 Linux 系统中能使用的 PID 是有限的,如果系统中存在有大量的僵尸进程,系统将会因为没有可用的 PID 从而导致不能产生新的进程
    • 另外如果父进程结束(非正常的结束),未能及时收回子进程,子进程仍在运行,这样的子进程称之为孤儿进程。在 Linux 系统中,孤儿进程一般会被 init 进程所“收养”,成为 init 的子进程。由 init 来做善后处理,所以它并不至于像僵尸进程那样无人问津,不管不顾,大量存在会有危害

    • 进程 0是系统引导时创建的一个特殊进程,也称之为内核初始化,其最后一个动作就是调用 fork()创建出一个子进程运行 /sbin/init 可执行文件,而该进程就是 PID=1 的进程 1,而进程 0 就转为交换进程(也被称为空闲进程),进程 1 (init 进程)是第一个用户态的进程,再由它不断调用 fork() 来创建系统里其他的进程,所以它是所有进程的父进程或者祖先进程。同时它是一个守护程序,直到计算机关机才会停止。

    1. # 通过以下的命令我们可以很明显的看到这样的结构
    2. # 我们还可以使用这样一个命令来看,其中 pid 就是该进程的一个唯一编号,ppid 就是该进程的父进程的 pid,command 表示的是该进程通过执行什么样的命令或者脚本而产生的

    在图中看见我们执行的 ps 就是由 zsh 通过 fork-exec 创建的子进程而执行的

    • 每一个进程都会是一个进程组的成员,而且这个进程组是唯一存在的,他们是依靠 PGID(process group ID)来区别的,而每当一个进程被创建的时候,它便会成为其父进程所在组中的一员。
    • 进程组的 PGID 等同于进程组的第一个成员的 PID,进程一般通过使用getpgrp()系统调用来寻找其所在组的 PGID,领导进程可以先终结,此时进程组依然存在,并持有相同的PGID,直到进程组中最后一个进程终结。
    • 与进程组类似,每当一个进程被创建的时候,它便会成为其父进程所在Session中的一员,每一个进程组都会在一个 Session 中,并且这个 Session 是唯一存在的,
    • Session 主要是针对一个 tty 建立,Session 中的每个进程都称为一个工作(job)。每个会话可以连接一个终端(control terminal)。当控制终端有输入输出时,都传递给该会话的前台进程组。Session 意义在于将多个 jobs 囊括在一个终端,并取其中的一个 job 作为前台,来直接接收该终端的输入输出以及终端信号。 其他 jobs 在后台运行。
    • 前台(foreground)就是在终端中运行,能与你有交互的
    • 后台(background)就是在终端中运行,但是你并不能与其任何的交互,也不会显示其执行的过程

    • 并且每个终端或者说 bash 只能管理当前终端中的 job,不能管理其他终端中的 job。
    • 我们都知道当一个进程在前台运作时我们可以用 ctrl + c 来终止它,但是若是在后台的话就不行了
    • 我们可以通过 &这个符号,让我们的命令在后台中运行

    图中所显示的 [1] 236分别是该 job 的 job number 与该进程的 PID,而最后一行的Done表示该命令已经在后台执行完毕。

    • 我们还可以通过ctrl + z使我们的当前工作停止并丢到后台中去
    • 被停止并放置在后台的工作我们可以使用这个命令来查看

      其中第一列显示的为被放置后台 job 的编号,而第二列的 表示最近(刚刚、最后)被放置后台的 job,同时也表示预设的工作,也就是若是有什么针对后台 job 的操作,首先对预设的 job- 表示倒数第二(也就是在预设之前的一个)被放置后台的工作,倒数第三个(再之前的)以后都不会有这样的符号修饰,第三列表示它们的状态,而最后一列表示该进程执行的命令

    • 我们可以通过这样的一个命令将后台的工作拿到前台来

    1. #后面不加参数提取预设工作,加参数提取指定工作的编号
    2. #输入命令echo $SHELL就能看到环境设定的sh类型了。
    3. #进到bin目录下ls一下就能看到本系统能支持哪些类型的shell。
    • 删除一个工作,或者重启等等
    1. #kill的使用格式如下
    2. #signal从1-64个信号值可以选择,可以这样查看
    重新读取参数运行,类似于restart
    • 若是在使用kill+信号值然后直接加 pid,你将会对 pid 对应的进程进行操作
    • 若是在使用kill+信号值然后 %jobnumber,这时所操作的对象是 job,这个数字就是就当前 bash 中后台的运行的 job 的 ID

    • top工具是我们常用的一个查看工具,能实时的查看我们系统的一些关键信息的变化:

      top 是一个在前台执行的程序,所以执行后便进入到这样的一个交互界面,正是因为交互界面我们才可以实时的获取到系统与进程的信息。在交互界面中我们可以通过一些指令来操作和筛选。

    表示该机器已经启动了多长时间
    表示当前系统中只有一个用户
    分别对应1、5、15分钟内cpu的平均负载
  1. 假设我们的系统是单 CPU、单内核的,把它比喻成是一条单向的桥,把CPU任务比作汽车。
  2. load = 0 的时候意味着这个桥上并没有车,cpu 没有任何任务;
  3. load < 1 的时候意味着桥上的车并不多,一切都还是很流畅的,cpu 的任务并不多,资源还很充足;
  4. load = 1 的时候就意味着桥已经被车给沾满了,没有一点空隙,cpu 的已经在全力工作了,所有的资源都被用完了,当然还好,这还在能力范围之内,只是有点慢而已;
  5. load > 1 的时候就意味着不仅仅是桥上已经被车占满了,就连桥外都被占满了,cpu 已经在全力的工作了,系统资源的用完了,但是还是有大量的进程在请求,在等待。若是这个值大于2,大于3,超过 CPU 工作能力的 2,3。而若是这个值 > 5 说明系统已经在超负荷运作了。
  • 我们可以通过以下的命令来查看 CPU 的个数与核心数
  1. #查看物理CPU的个数
  2. 通过上面的指数我们可以得知 load 的临界值为 1 ,但是在实际生活中,比较有经验的运维或者系统管理员会将临界值定为0.7。这里的指数都是除以核心数以后的值,不要混淆了
  3. 若是 0.7< load < 1 的时候我们就需要稍微关注一下了,虽然还可以应付但是这个值已经离临界不远了;
  4. 若是 load = 1 的时候我们就需要警惕了,因为这个时候已经没有更多的资源的了,已经在全力以赴了;
  5. 若是 load > 5 的时候系统已经快不行了,这个时候你需要加班解决问题了
  • 通常我们都会先看 15 分钟的值来看这个大体的趋势,然后再看 5 分钟的值对比来看是否有下降的趋势。
  • 查看 busybox 的代码可以知道,数据是每 5 秒钟就检查一次活跃的进程数,然后计算出该值,然后 load 从 /proc/loadavg 中读取的。而这个 load 的值是如何计算的呢,这是 load 的计算的源码
用户空间进程占用CPU百分比
内核空间运行占用CPU百分比
用户进程空间内改变过优先级的进程占用CPU百分比
等待输入输出的CPU时间百分比

CPU 利用率是对一个时间段内 CPU 使用状况的统计,而Load Average是 CPU 的 Load,它所包含的信息不是 CPU 的使用率状况,而是在一段时间内 CPU 正在处理以及等待 CPU 处理的进程数情况统计信息,这两个指标并不一样。

缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖
该进程任务所使用的虚拟内存的总数
该进程所使用的物理内存数,也称之为驻留内存数

NICE 值叫做静态优先级,是用户空间的一个优先级值,其取值范围是-20至19。这个值越小,表示进程”优先级”越高,而值越大“优先级”越低。nice值中的 -20 到 19,中 -20 优先级最高, 0 是默认的值,而 19 优先级最低
PR 值表示 Priority 值叫动态优先级,是进程在内核中实际的优先级值,进程优先级的取值范围是通过一个宏定义的,这个宏的名称是 MAX_PRIO,它的值为 140。Linux 实际上实现了 140 个优先级范围,取值范围是从 0-139,这个值越小,优先级越高。而这其中的 0 - 99 是实时进程的值,而 100 - 139 是给用户的。
其中 PR 中的 100 to 139 值部分有这么一个对应 PR = 20 + (-20 to +19),这里的 -20 to +19 便是nice值,所以说两个虽然都是优先级,而且有千丝万缕的关系,但是他们的值,他们的作用范围并不相同
* VIRT **任务所使用的虚拟内存的总数,其中包含所有的代码,数据,共享库和被换出 swap空间的页面等所占据空间的总数

切换显示平均负载和启动时间的信息
根据CPU使用百分比大小进行排序
根据驻留内存大小进行排序
忽略闲置和僵死的进程,这是一个开关式命令
终止一个进程,系统提示输入 PID 及发送的信号值。一般终止进程用 15 信号,不能正常结束则使用 9 信号。安全模式下该命令被屏蔽。


TPGID栏写着-1的都是没有控制终端的进程,也就是守护进程
STAT表示进程的状态,而进程的状态有很多,如下表所示

其中的D是不能被中断睡眠的状态,处在这种状态的进程不接受外来的任何 signal,所以无法使用 kill 命令杀掉处于D状态的进程,无论是 killkill -9 还是 kill -15,一般处于这种状态可能是进程 I/O 的时候出问题了。

  • 使用-l参数可以显示自己这次登陆的 bash 相关的进程信息罗列出来

  • 若是查找其中的某个进程的话,我们还可以配合着 grep 和正则表达式一起使用

  • 此外我们还可以查看时,将连同部分的进程呈树状显示出来

  • 当然如果你觉得使用这样的此时没有把你想要的信息放在一起,我们也可以是用这样的命令,来自定义我们所需要的参数显示

  • 通过pstree可以很直接的看到相同的进程数量,最主要的还是我们可以看到所有进程之间的相关性。

  1. #-A :各程序树之间以 ASCII 字元來連接;
  2. #-u :同时列出每个 process 的所屬账户名称。

  • 当一个进程结束的时候或者要异常结束的时候,会向其父进程返回一个或者接收一个SIGHUP信号而做出的结束进程或者其他的操作,这个 SIGHUP 信号不仅可以由系统发送,我们可以使用 kill 来发送这个信号来操作进程的结束或者重启等等。
  • 用 kill 来操作下一些不属于 job 范畴的进程,直接对pid 下手
  1. #首先我们使用图形界面打开了 gedit、gvim,用 ps 可以查看到
  2. #使用9这个信号强制结束 gedit 进程
  3. #我们再查找这个进程的时候就找不到了

  • **当然就是靠该进程的优先级值来判定进程调度的优先级,而优先级的值就是上文所提到的 PRnice来控制与体现了

  • nice的值我们是可以通过 nice命令来修改的,而需要注意的是 nice 值可以调整的范围是 -20 ~ 19,其中 root 有着至高无上的权力,既可以调整自己的进程也可以调整其他用户的程序,并且是所有的值都可以用,而普通用户只可以调制属于自己的进程,并且其使用的范围只能是 0 ~ 19,因为系统为了避免一般用户抢占系统资源而设置的一个限制**

  1. #这个实验在环境中无法做,因为权限不够,可以自己在本地尝试
  2. #打开一个程序放在后台,或者用图形界面打开
  3. #用 ps 查看其优先级
  • 我们还可以用 renice来修改已经存在的进程的优先级

  • 常见的日志一般存放在 /var/log

  • 系统日志主要是存放系统内置程序或系统内核之类的日志信息如 alternatives.logbtmp 等等,应用日志主要是我们装的第三方应用所产生的日志如 tomcat7apache2等等。

  • 我们用这样的命令来看看 auth.log中的信息

  • apt 文件夹中的日志信息,其中有两个日志文件 history.logterm.log,两个日志文件的区别在于 history.log 主要记录了进行了哪个操作,相关的依赖有哪些,而term.log 则是较为具体的一些操作,主要就是下载包,打开包,安装包等等的细节操作。

  • 而这其中有两个比较特殊的日志,其查看的方式比较与众不同,因为这两个日志并不是 ASCII 文件而是被编码成了二进制文件,所以我们并不能直接使用 lesscatmore 这样的工具来查看,这两个日志文件是 wtmplastlog

  • 我们查看的方法是使用 lastlastlog 工具来提取其中的信息

  • syslog是一个系统日志记录程序,虽然时代的进步与发展,syslog 已经年老体衰跟不上时代的需求,所以他被 rsyslog所代替了,较新的 Ubuntu、Fedora 等等都是默认使用 rsyslog 作为系统的日志收集工具

  • rsyslog可以提供超过每秒一百万条消息给目标文件。这样能实时收集日志信息的程序是有其守护进程的,如 rsyslog的守护进程便是 rsyslogd
  • 手动开启这项服务,然后来查看

  • 第一个主要是配置的环境,也就是rsyslog 加载什么模块,文件的所属者等;而第二个主要是配置的 Filter Conditions

  • 首先通过 Input module来收集消息,然后将得到的消息传给 Parser module,通过分析模块的层层处理,将真正需要的消息传给 Output module,然后便输出至日志文件中。

  • rsyslog 还有一个核心的功能模块便是 Queue,也正是因为它才能做到如此高的并发。

  • 第一个模块便是 Input,该模块的主要功能就是从各种各样的来源收集 messages,通过这些接口实现:

  • Output中也有许多可用的接口,可以通过man或者官方的文档查看
    而这些模块接口的使用需要通过 $ModLoad 指令来加载,那么返回上文的图中,配置生效的头两行可以看懂了,默认加载了 imklogimuxsock 这两个模块

  • 在配置中 rsyslog 支持三种配置语法格式:

  • sysklogd是老的简单格式,一些新的语法特性不支持。而 legacy rsyslog 是以 dollar 符($)开头的语法,在 v6 及以上的版本还在支持,就如上文所说的$ModLoad 还有一些插件和特性只在此语法下支持。而以$ 开头的指令是全局指令,全局指令是rsyslogd 守护进程的配置指令,每行只能有一个指令。 RainnerScript 是最新的语法。在官网上 rsyslog 大多推荐这个语法格式来配置

  • 执行顺序: 指令在 rsyslog.conf 文件中是从上到下的顺序执行的。

  • 模板是 rsyslog 一个重要的属性,它可以控制日志的格式,支持类似 template()语句的基于stringplugin 的模板,通过它我们可以自定义日志格式。

  • **legacy 格式使用 $template 的语法,不过这个在以后要移除,所以最好使用新格式 template():,以免未来突然不工作了也不知道为什么**

  • 模板定义的形式有四种,适用于不同的输出模块,一般简单的格式,可以使用 string的形式,复杂的格式,建议使用 list 的形式,使用list 的形式,可以使用一些额外的属性字段(property statement)

  • 如果不指定输出模板,rsyslog 会默认使用 RSYSLOG_DEFAULT。若想更深入的学习可以查看官方文档

  • rsyslog 通过 Facility 的概念来定义日志消息的来源,以便对日志进行分类,Facility 的种类有:

  • 而另外一部分 priority 也称之为serverity level,除了日志的来源以外,对统一源产生日志消息还需要进行优先级的划分,而优先级的类别有一下几种:

  • 而其中有类似于这样的配置信息意思有细微的差别

  1. - 代表异步写入,也就是日志写入时不需要等待系统缓存的同步,也就是日志还在内存中缓存也可以继续写入无需等待完全写入硬盘后再写入。通常用于写入数据比较大时使用。
  2. 到此我们对 rsyslog 的配置就有了一定的了解,若想更深入学习模板,队列的高级应用,大家可去查看官网的文档,需要注意的是 rsyslog 每个版本之间差异化比较大,学习之前先查看自己所使用的版本,再去查看相关的文档
  • 与日志相关的还有一个还有常用的命令logger,logger 是一个 shell 命令接口,可以通过该接口使用 Syslog 的系统日志模块,还可以从命令行直接向系统日志文件写入信息。
在每行都记录进程 ID

  • logrotate程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件。我们可以根据日志文件的大小,也可以根据其天数来切割日志、管理日志,这个过程又叫做“转储”。

  • 大多数 Linux 发行版使用logrotatenewsyslog 对日志进行管理。logrotate 程序不但可以压缩日志文件,减少存储空间,还可以将日志发送到指定 E-mail,方便管理员及时查看日志。

  1. create //当转储后文件不存在时创建它
}

我要回帖

更多关于 第三方底部虚拟按键apk 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信