关于 diff 和patch

参考: https://blog.csdn.net/zygblock/article/details/53384862

diff和patch是 版本控制 git 的不可缺少的工具

diff 是用来比较 源文件( 目录) / 和 目标文件(夹)的 差异, 通常是用来比较 文本文件的, 一般不用来比较 二进制文件

diff的输出 是一种 patch格式的, 可以 把 输出结果 重定向保存为 foo.patch 文件 , 然后 供 patch命令 来使用, 所以, 通常 diff和 patch是 联合使用的

patch 是 根据 patch文件( 包含差异列表的文件, 即 difflisting文件) 来将 旧文件 (源文件) -> 打补丁/ 升级 为 新文件 (升级文件) 的程序

======================================

关于diff 主要是 要掌握它的 几种 输出格式:

  • 使用 diff -y -W 50 old_file new_file 是 不用 normal的输出格式, 用 并排的方式,显示差异, -y 和-W 联合使用, -W == --width 指定列(栏)的宽度
  • 更常用 的是 使用 diff -u file1 file2 的格式, 是 -u == -unified 即统一的格式, 将两个文件的 内容都输出在一起, 统一的输出. 用 ---(-) 表示第一个文件(源文件/旧文件) 用+++(+)表示第二个文件(新文件, 更新后的文件)

制作 补丁文件: diff -u file.old file.update > difflisting
给源文件 打补丁: patch -i difflisting -b file.old -b的作用是 原来的file.old将被打补丁, 同时 源文件被保存一个副本 file.old.orig
patch -i difflisting -o file.new file.old -o 表示原来的文件被打补丁成为 file.new, 而源文件 还是被保存不变.

特别要注意的是, 打补丁一定要注意 是给 谁 打补丁, 给哪个文件 打补丁, 千万不要把 目标文件搞反了, 否则就把更新的文件变成 原来的 旧文件了, 而且如果 要打多个补丁, 一定要注意 打补丁的顺序

关于补丁的应用 参考: http://linux-wiki.cn/wiki/%E8%A1%A5%E4%B8%81%28patch%29%E7%9A%84%E5%88%B6%E4%BD%9C%E4%B8%8E%E5%BA%94%E7%94%A8
补丁(patch)的制作与应用
制作补丁时的选项: -r主要是对目录应用的, 第归里面的文件和子目录. -N : 是正确处理已经 应用过补丁的 文件 或 已经被 删除 的文件 ;
应用补丁的 选项: -p num 主要是 指忽略还是不忽略 目录的层次,
-R 则是 取消打补丁
而 应用补丁或取消 补丁的 时候, 都可以 使用 输入重定向的 方式: patch old_file < patch_file

patch的时候, - 表示将要被删除的内容行, 而 + 表示 将要被添加/替换为的 行

patch后, 旧文件将和 新文件 (更新后的文件) 完全一致!

### 为什么要使用 patch? patch后, 旧文件将和 新文件 (更新后的文件) 完全一致! 那为什么不直接修改 或 直接用 cp / install 命令来复制 替换呢? 确实是这样的! 但是 patch的主要目的, 并不是 用来 给 **1个**文件来 打补丁的, 它主要是用来 给一个文件夹 中的很多文件 / 很多子目录 来打补丁, 来进行升级的, 这个 才是patch 的主要用途! 是linux用来升级的 主要手段 .也就是说, patch 主要是用来 给 linux等 进行升级的, 当然在版本控制中 也会用到!

Linux patch命令用于修补文件。 参考: http://www.runoob.com/linux/linux-comm-patch.html "patch指令让用户利用设置修补文件的方式,修改,更新原始文件。倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行。如果配合修补文件的方式则能一次修补大批文件,这也是Linux系统核心的升级方法之一。"

即: 一个补丁文件中, 可以包含多个补丁, 每个补丁中 包含 一个 补丁头, 一个块.....

==========================================
ls == echo * 来替换
install和cp的区别? 主要在与 处理 已经存在的文件和 正在 运行的 文件 时的差别上!
install 一般用在 makefile中, cp一般场合
cp是先将原来 的文件内容 清空, 然后写入新内容
install 则是将原文件删除, 重新创建一个新文件, 然后再写内容.
因此, install不仅能 更换句柄, 而且可以设置 文件的新属性, 可以解决 如果目标文件正在运行 或 持续写入内容的句柄 更换问题.

=========================

runlevel
init 3

ctrl+alt+f1~6, ctrl_alt+f78, 注意切换字符界面,是用ctrl+alt+功能键, 而不是 只用 alt + 功能键

https://wenku.baidu.com/view/b861ed9c69dc5022aaea00c2.html

target: 就是runlevel文件。
从 fedora16 开始 就不再使用initab 而是使用target来配置启动级别了,

  • multi-user.target, analogous to runlevel 3

  • graphical.target.

target:启动的对象,启动(服务的)对象

开发Systemd的主要目的就是减少系统引导时间和计算开销

Systemd引入了并行启动的概念,它会为每个需要启动的守护进程建立一个套接字,这些套接字对于使用它们的进程来说是抽象的,这样它们可以允许不同守护进程之间进>行交互。Systemd会创建新进程并为每个进程分配一个控制组(cgroup)。处于不同控制组的进程之间可以通过内核来互相通信。systemd处理开机启动进程的方式非常漂亮,和传统基于init的系统比起来优化了太多。让我们看下Systemd的一些核心功能

查看linux机器是32位还是64位的方法:
file /sbin/init 或者file /bin/ls

当登陆一个linux系统时,bash shell依次会从4个不同的地方启动文件里的读取命令,顺序是:
1: /etc/profile
2:$HOME/.bash_profile
3:$HOME/.bash_login
4:$HOME/.profile

/lib 系统级别,系统的lib
/usr/lib 操作系统自带的程序级别,二进制安装包的lib

原文地址:https://www.cnblogs.com/bkylee/p/10295489.html