皮皮网
皮皮网

【互书包源码】【getchars源码】【tradeblazer源码】sed 源码分析

来源:彩虹3荣耀源码 发表时间:2024-12-24 09:30:38

1.Linux中的./configure
2.如何自学入门生物信息学
3.MyFlash——美团点评的码分开源MySQL闪回工具
4.LINUX删掉换行符
5.Jvm-Sandbox原理分析-Sandbox的启动-01
6.CentOS5系统管理目录  基础篇

sed 源码分析

Linux中的./configure

       Linux环境下的软件安装,并不是一件容易的事情;如果通过源代码编译后在安装,当然事情就更为复杂一些;现在安装各种软件的教程都非常普遍;但万变不离其中,对基础知识的扎实掌握,安装各种软件的问题就迎刃而解了。Configure脚本配置工具就是基础之一,它是autoconf的工具的基本应用。

       ä¸Žä¸€äº›æŠ€å·§ç›¸æ¯”,Configure显得基础一些,当然使用和学习起来就显得枯燥乏味一些,当然要成为高手,对基础的熟悉不能超越哦。

       ä¸ºæ­¤æˆ‘转载了一篇关于Configure选项配置的详细介绍。供大家参考

       'configure'脚本有大量的命令行选项。对不同的软件包来说,这些选项可能会有变化,但是许多基本的选项是不会改变的。带上'--help'选项执行'configure'脚本可以看到可用的所有选项。尽管许多选项是很少用到的,但是当你为了特殊的需求而configure一个包时,知道他们的存在是很有益处的。下面对每一个选项进行简略的介绍:

       --cache-file=FILE

       'configure'会在你的系统上测试存在的特性(或者bug!)。为了加速随后进行的配置,测试的结果会存储在一个cache file里。当configure一个每个子树里都有'configure'脚本的复杂的源码树时,一个很好的cache file的存在会有很大帮助。

       --help

       è¾“出帮助信息。即使是有经验的用户也偶尔需要使用使用'--help'选项,因为一个复杂的项目会包含附加的选项。例如,GCC包里的'configure'脚本就包含了允许你控制是否生成和在GCC中使用GNU汇编器的选项。

       --no-create

       'configure'中的一个主要函数会制作输出文件。此选项阻止'configure'生成这个文件。你可以认为这是一种演习(dry run),尽管缓存(cache)仍然被改写了。

       --quiet

       --silent

       å½“'configure'进行他的测试时,会输出简要的信息来告诉用户正在作什么。这样作是因为'configure'可能会比较慢,没有这种输出的话用户将会被扔在一旁疑惑正在发生什么,使用这两个选项中的任何一个都会把你扔到一旁。(译注:这两句话比较有意思,原文是这样的:If there was no such output, the user would be left wondering what is happening. By using this option, you too can be left wondering!)

       --version

       æ‰“印用来产生'configure'脚本的Autoconf的版本号。

       --prefix=PEWFIX

       '--prefix'是最常用的选项。制作出的'Makefile'会查看随此选项传递的参数,当一个包在安装时可以彻底的重新安置他的结构独立部分。举一个例子,当安装一个包,例如说Emacs,下面的命令将会使Emacs Lisp file被安装到"/opt/gnu/share":

       $ ./configure --prefix=/opt/gnu

       --exec-prefix=EPREFIX

       ä¸Ž'--prefix'选项类似,但是他是用来设置结构倚赖的文件的安装位置,编译好的'emacs'二进制文件就是这样一个问件。如果没有设置这个选项的话,默认使用的选项值将被设为和'--prefix'选项值一样。

       --bindir=DIR

       æŒ‡å®šäºŒè¿›åˆ¶æ–‡ä»¶çš„安装位置,这里的二进制文件定义为可以被用户直接执行的程序。

       --sbindir=DIR

       æŒ‡å®šè¶…级二进制文件的安装位置。这是一些通常只能由超级用户执行的程序。

       --libexecdir=DIR

       æŒ‡å®šå¯æ‰§è¡Œæ”¯æŒæ–‡ä»¶çš„安装位置。与二进制文件相反,这些文件从来不直接由用户执行,但是可以被上面提到的二进制文件所执行。

       --datadir=DIR

       æŒ‡å®šé€šç”¨æ•°æ®æ–‡ä»¶çš„安装位置。

       --sysconfdir=DIR

       æŒ‡å®šåœ¨å•ä¸ªæœºå™¨ä¸Šä½¿ç”¨çš„只读数据的安装位置。

       --sharedstatedir=DIR

       æŒ‡å®šå¯ä»¥åœ¨å¤šä¸ªæœºå™¨ä¸Šå…±äº«çš„可写数据的安装位置。

       --localstatedir=DIR

       æŒ‡å®šåªèƒ½å•æœºä½¿ç”¨çš„可写数据的安装位置。

       --libdir=DIR

       æŒ‡å®šåº“文件的安装位置。

       --includedir=DIR

       æŒ‡å®šC头文件的安装位置。其他语言如C++的头文件也可以使用此选项。

       --oldincludedir=DIR

       æŒ‡å®šä¸ºé™¤GCC外编译器安装的C头文件的安装位置。

       --infodir=DIR

       æŒ‡å®šInfo格式文档的安装位置.Info是被GNU工程所使用的文档格式。

       --mandir=DIR

       æŒ‡å®šæ‰‹å†Œé¡µçš„安装位置。

       --srcdir=DIR

       è¿™ä¸ªé€‰é¡¹å¯¹å®‰è£…没有作用,他会告诉'configure'源码的位置。一般来说不用指定此选项,因为'configure'脚本一般和源码文件在同一个目录下。

       --program-prefix=PREFIX

       æŒ‡å®šå°†è¢«åŠ åˆ°æ‰€å®‰è£…程序的名字上的前缀。例如,使用'--program-prefix=g'来configure一个名为'tar'的程序将会使安装的程序被命名为'gtar'。当和其他的安装选项一起使用时,这个选项只有当他被`Makefile.in'文件使用时才会工作。

       --program-suffix=SUFFIX

       æŒ‡å®šå°†è¢«åŠ åˆ°æ‰€å®‰è£…程序的名字上的后缀。

       --program-transform-name=PROGRAM

       è¿™é‡Œçš„PROGRAM是一个sed脚本。当一个程序被安装时,他的名字将经过`sed -e PROGRAM'来产生安装的名字。

       --build=BUILD

       æŒ‡å®šè½¯ä»¶åŒ…安装的系统平台。如果没有指定,默认值将是'--host'选项的值。

       --host=HOST

       æŒ‡å®šè½¯ä»¶è¿è¡Œçš„系统平台。如果没有指定。将会运行`config.guess'来检测。

       --target=GARGET

       æŒ‡å®šè½¯ä»¶é¢å‘(target to)的系统平台。这主要在程序语言工具如编译器和汇编器上下文中起作用。如果没有指定,默认将使用'--host'选项的值。

       --disable-FEATURE

       ä¸€äº›è½¯ä»¶åŒ…可以选择这个选项来提供为大型选项的编译时配置,例如使用Kerberos认证系统或者一个实验性的编译器最优配置。如果默认是提供这些特性,可以使用'--disable-FEATURE'来禁用它,这里'FEATURE'是特性的名字,例如:

       $ ./configure --disable-gui

       -enable-FEATURE[=ARG]

       ç›¸åçš„,一些软件包可能提供了一些默认被禁止的特性,可以使用'--enable-FEATURE'来起用它。这里'FEATURE'是特性的名字。一个特性可能会接受一个可选的参数。例如:

       $ ./configure --enable-buffers=

       `--enable-FEATURE=no'与上面提到的'--disable-FEATURE'是同义的。

       --with-PACKAGE[=ARG]

       åœ¨è‡ªç”±è½¯ä»¶ç¤¾åŒºé‡Œï¼Œæœ‰ä½¿ç”¨å·²æœ‰è½¯ä»¶åŒ…和库的优秀传统。当用'configure'来配置一个源码树时,可以提供其他已经安装的软件包的信息。例如,倚赖于Tcl和Tk的BLT器件工具包。要配置BLT,可能需要给'configure'提供一些关于我们把Tcl和Tk装的何处的信息:

       $ ./configure --with-tcl=/usr/local --with-tk=/usr/local

       '--with-PACKAGE=no'与下面将提到的'--without-PACKAGE'是同义的。

       --without-PACKAGE

       æœ‰æ—¶å€™ä½ å¯èƒ½ä¸æƒ³è®©ä½ çš„软件包与系统已有的软件包交互。例如,你可能不想让你的新编译器使用GNU ld。通过使用这个选项可以做到这一点:

       $ ./configure --without-gnu-ld

       --x-includes=DIR

       è¿™ä¸ªé€‰é¡¹æ˜¯'--with-PACKAGE'选项的一个特例。在Autoconf最初被开发出来时,流行使用'configure'来作为Imake的一个变通方法来制作运行于X的软件。'--x-includes'选项提供了向'configure'脚本指明包含X头文件的目录的方法。

       --x-libraries=DIR

       ç±»ä¼¼çš„,'--x-libraries'选项提供了向'configure'脚本指明包含X库的目录的方法。

       åœ¨æºç æ ‘中运行'configure'是不必要的同时也是不好的。一个由'configure'产生的良好的'Makefile'可以构筑源码属于另一棵树的软件包。在一个独立于源码的树中构筑派生的文件的好处是很明显的:派生的文件,如目标文件,会凌乱的散布于源码树。这也使在另一个不同的系统或用不同的配置选项构筑同样的目标文件非常困难。建议使用三棵树:一棵源码树(source tree),一棵构筑树(build tree),一棵安装树(install tree)。这里有一个很接近的例子,是使用这种方法来构筑GNU malloc包:

       $ gtar zxf mmalloc-1.0.tar.gz

       $ mkdir build && cd build

       $ ../mmalloc-1.0/configure

       creating cache ./config.cache

       checking for gcc... gcc

       checking whether the C compiler (gcc ) works... yes

       checking whether the C compiler (gcc ) is a cross-compiler... no

       checking whether we are using GNU C... yes

       checking whether gcc accepts -g... yes

       checking for a BSD compatible install... /usr/bin/install -c

       checking host system type... i-pc-linux-gnu

       checking build system type... i-pc-linux-gnu

       checking for ar... ar

       checking for ranlib... ranlib

       checking how to run the C preprocessor... gcc -E

       checking for unistd.h... yes

       checking for getpagesize... yes

       checking for working mmap... yes

       checking for limits.h... yes

       checking for stddef.h... yes

       updating cache ../config.cache

       creating ./config.status

       è¿™æ ·è¿™æ£µæž„筑树就被配置了,下面可以继续构筑和安装这个包到默认的位置'/usr/local':

       $ make all && make install

如何自学入门生物信息学

       自学生物信息学,首先需理解生物信息学是码分一个融合数学、计算机科学和生物学的码分领域,重点在于数据处理和分析。码分掌握基本生物概念,码分如基因组、码分互书包源码转录组、码分蛋白组等,码分是码分入门基础。对于初学者,码分推荐阅读《基因X》等厚实的码分生物学书籍,以补充基础知识。码分避免阅读过于陈旧的码分生物信息学入门书籍,这可能会浪费时间。码分兴趣和好奇心是码分学习的驱动力,了解基因科技行业动态,设立具体学习目标,如完成特定项目,或复现已有的数据分析流程,都能有效提高学习效率。

       使用Google搜索是寻找学习资源的有效途径。Linux操作系统对于基因数据分析至关重要,学会基本命令如`ls`, `cd`, `mkdir`, `mv`, `cp`, `grep`, `awk`, `sed`, 和管道`|`功能,可以极大提高工作效率。Python语言因其易于学习、社区活跃、工具包丰富和数据科学应用广泛,是初学者的理想选择。C或C++语言可以进一步提升编程能力,尤其是在处理大型项目或高性能计算方面。熟悉常用的组学数据分析软件,如bwa, samtools, GATK, BEDtools等,对于构建完整数据分析流程至关重要。

       实践是生物信息学学习中的关键环节。通过在线平台如Rosalind参与生物信息题目训练,或者寻找基因科技公司的实习机会,将理论知识应用到实际问题解决中。构建完整的数据分析流程,复现或构建项目,同时理解每一环节的原理,是提高技能的有效方式。统计学知识,尤其是假设检验、贝叶斯推断等,对生物信息学分析至关重要。阅读和理解优秀的组学算法源码,不仅能够精进编程和算法设计能力,getchars源码还能深入理解数据分析背后的原理。

       紧跟生物信息学领域的最新发展,阅读顶级学术杂志如Cell、Nature、Science等,关注生物探索、奇点网等公众号,加入优质交流圈,参加基因组学会议,保持与行业的紧密联系。推荐的书籍有《基因X》和《Bioinformatics with Python Cookbook》。在线课程如Coursera上的“genomic data science”系列课程提供了系统全面的学习资源。

       自学生物信息学是一个长期且深入的过程,需要持续的学习、实践和探索。关注“碱基矿工”公众号,获取更多生物信息和组学领域的最新资讯和支持。

MyFlash——美团点评的开源MySQL闪回工具

       闪回工具的现状及理想特性

       当前市场上存在多种数据恢复工具,它们主要分为三种实现方式:

       1. 使用mysqlbinlog工具配合sed、awk,将binlog解析成类SQL文本,再用sed、awk转换为真正的SQL。

       2. 对数据库源码打补丁,增加Flashback选项,扩展mysqlbinlog功能。

       3. 利用业界提供的解析binlog的库生成SQL,代表是binlog2sql。

       这些工具在过滤选项上有限,如无法基于SQL类型过滤,需回滚delete语句时,还需结合awk、sed等工具筛选。理想的闪回工具需具备以下特性:

       - **无需binlog文本转换**,直接操作binlog。

       - **提供丰富的过滤方式**,基于库、表、SQL类型、位置、时间等。

       - **兼容多个MySQL版本**。

       - **数据库重构不敏感**,方便升级。

       - **自主控制binlog解析**,灵活操作。tradeblazer源码

       闪回工具的binlog格式基础

       binlog文件结构由`format description event`开头,`rotate event`结尾,中间由多个事件组成。每个事件由事件头部和数据组成。

       常见事件包括:

       - `format description event`:描述binlog格式。

       - `table map event`:定义表结构。

       - `update row event`:表示数据更新。

       binlog事件回滚

       回滚逻辑基于事件类型:对于insert和delete操作,只需交换type_code即可完成回滚;对于update操作,难点在于计算AI、BI的长度,需要处理字段长度编码和decimal类型。

       解析binlog关键点

       - **长度编码整数**:通过一个或多个字节组合表示长度,有效节省存储空间。

       - **decimal类型**:整数和小数每9个数字占4个字节,不足9个时,由剩余字节填充。

       闪回工具架构解析

       MyFlash工具通过以下步骤实现闪回功能:

       1. **解析binlog**:将binlog文件解析为多个事件,用户可指定开始与结束位置,判断时间条件。

       2. **重组事件**:将事件组成最小执行单元,包含表元数据和数据事件,用于保证执行逻辑正确。

       3. **事件反转与重组**:反转最小执行单元中的数据事件,逆序最小执行单元队列。

       4. **生成新binlog**:将逆序的最小执行单元输出为新binlog文件,注意修改next_position字段。

       性能对比与测试

       在特定场景下,测试MyFlash工具的性能,结果显示其速度最快,说明MyFlash在闪回操作中表现出色。

       以上内容展示了闪回工具的现状、理想特性、binlog格式解析、事件回滚逻辑、解析关键点、工具架构解析、以及性能测试结果。

LINUX删掉换行符

       去掉文件中的换行符

       (1)tr命令的操作是针对文件的操作,它把整个文本当做操作的对象,所以可以直接去除文件中的换行符

       tr '\n' ' ' < file

       (2)sed的操作对象是行.而作为行分割符号的回车符,本身是不属于行的.所以sed中必须加上N命令,把下一行的内容添加到当前的pattern space中,这样实际上是把相邻的2行合并了.下一次仍然是先n,再p,再N,开始新的轮回:

       cat file | sed 'N;s/\n/ /'

       所以上面的语句是不能把文件内容合并为一行的,到底该怎么写,我暂时没有想到,呵呵

       (3)直接用awk

       awk '{ printf("%s ",$0)}' file

       (4)当然,用echo也是可以的:

       while read line;do echo -n "$line"; done < awk_help.txt, 这样,可以把awk_help.txt的内容合并为一行

       sed -e "s#\[/r][/r][/n]#\[/r][/n]#g" file

Jvm-Sandbox原理分析-Sandbox的启动-

       Jvm-Sandbox的启动(一):sandbox.sh脚本分析

       Sandbox的启动是通过其内置的shell脚本 sandbox.sh 开始执行的,一切的开始皆可从该脚本中探寻出结果。脚本有一定的代码量,大概有+行,这里将该脚本分为如下几个部分进行讲解:

1、变量定义过程

       这个过程首先预定义了接下来即将使用的一些变量。代码如下:

# 定义sandbox的home目录,并为其赋值 typeset SANDBOX_HOME_DIR [[ -z ${ SANDBOX_HOME_DIR} ]] && SANDBOX_HOME_DIR=${ PWD}/..# 定义 SANDBOX_USER,playmaker 源码并为其赋值 typeset SANDBOX_USER=${ USER} [[ -z ${ SANDBOX_USER} ]] && SANDBOX_USER=$(whoami)# 定义 SANDBOX_SERVER_NETWORK typeset SANDBOX_SERVER_NETWORK# 定义lib目录,这个目录下主要存放jar包 typeset SANDBOX_LIB_DIR=${ SANDBOX_HOME_DIR}/lib# 定义 SANDBOX_TOKEN_FILE typeset SANDBOX_TOKEN_FILE="${ HOME}/.sandbox.token"# 定义JVM参数 SANDBOX_JVM_OPS typeset SANDBOX_JVM_OPS="-XmsM -XmxM -Xnoclassgc -ea"# 定义目标JVM的进程号,后面的agent主要attach到该JVM进程上 typeset TARGET_JVM_PID# 定义目标机器IP以及默认机器IP typeset TARGET_SERVER_IP typeset DEFAULT_TARGET_SERVER_IP="0.0.0.0"# 定义目标进程端口 typeset TARGET_SERVER_PORT# 定义名称空间 typeset TARGET_NAMESPACE typeset DEFAULT_NAMESPACE="default"

       注释和变量命名已经描绘的非常清楚了,在看后面代码遇到忘记了的变量可以到这里来回顾下。

       这里为其中一些变量补充说明:

       SANDBOX_HOME_DIR:shell脚本中,-z表示检测紧跟的字符串长度是否为0,如果为0返回true。这里使用短路与,如果 ${ SANDBOX_HOME_DIR} 为0,则使用 ${ PWD}/.. 的目录作为sandbox的home目录。这种方式表示优先使用环境变量 SANDBOX_HOME_DIR,如果未定义环境变量SANDBOX_HOME_DIR,则使用当前目录。

       SANDBOX_TOKEN_FILE:这个文件主要存放了sandbox attach记录,包括attach进程的host:port。

       TARGET_SERVER_IP:一般情况下,我们都是将整个工程打包后上传至目标机器,然后在目标机器上执行该shell脚本,因此默认机器IP一般为localhost即可。

2、执行入口

       执行入口就比较简单了,就一行代码,其中${ @}会保存我们传递给该shell脚本的所有参数:

main "${ @}"

       比方说,我们以如下命令启动脚本,则${ @} 就包含了-p 这个参数

./sandbox.sh -p 、main函数

       main函数是该脚本的重要方法,也是脚本的执行入口,它主要完成了以下几件事:

       其代码如下所示:

function main() { # 遍历脚本参数 while getopts "hp:vFfRu:a:A:d:m:I:P:ClSn:X" ARG; do case ${ ARG} in h) # 帮助手册函数,大家可以自行翻阅源码查看 usage exit ;; # 赋值PID p) TARGET_JVM_PID=${ OPTARG} ;; v) OP_VERSION=1 ;; l) OP_MODULE_LIST=1 ;; R) OP_MODULE_RESET=1 ;; F) OP_MODULE_FORCE_FLUSH=1 ;; f) OP_MODULE_FLUSH=1 ;; u) OP_MODULE_UNLOAD=1 ARG_MODULE_UNLOAD=${ OPTARG} ;; a) OP_MODULE_ACTIVE=1 ARG_MODULE_ACTIVE=${ OPTARG} ;; A) OP_MODULE_FROZEN=1 ARG_MODULE_FROZEN=${ OPTARG} ;; d) OP_DEBUG=1 ARG_DEBUG=${ OPTARG} ;; m) OP_MODULE_DETAIL=1 ARG_MODULE_DETAIL=${ OPTARG} ;; # 赋值IP I) TARGET_SERVER_IP=${ OPTARG} ;; # 赋值PORT P) TARGET_SERVER_PORT=${ OPTARG} ;; C) OP_CONNECT_ONLY=1 ;; S) OP_SHUTDOWN=1 ;; n) OP_NAMESPACE=1 ARG_NAMESPACE=${ OPTARG} ;; X) set -x ;; ?) usage exit_on_err 1 ;; esac done # 重置环境 reset_for_env # 校验权限 check_permission# 根据不同的参数,进行相应处理 # 如果没有指定IP,则使用默认值 [ -z "${ TARGET_SERVER_IP}" ] && TARGET_SERVER_IP="${ DEFAULT_TARGET_SERVER_IP}"# 如果没有指定port,使用默认值 [ -z "${ TARGET_SERVER_PORT}" ] && TARGET_SERVER_PORT=0# reset NAMESPACE [[ ${ OP_NAMESPACE} ]] && TARGET_NAMESPACE=${ ARG_NAMESPACE} [[ -z ${ TARGET_NAMESPACE} ]] && TARGET_NAMESPACE=${ DEFAULT_NAMESPACE}if [[ ${ OP_CONNECT_ONLY} ]]; then [[ 0 -eq ${ TARGET_SERVER_PORT} ]] && exit_on_err 1 "server appoint PORT (-P) was missing" SANDBOX_SERVER_NETWORK="${ TARGET_SERVER_IP};${ TARGET_SERVER_PORT}" else # -p was missing [[ -z ${ TARGET_JVM_PID} ]] && exit_on_err 1 "PID (-p) was missing." # attach jvm的核心方法 attach_jvm fi# -v show version [[ -n ${ OP_VERSION} ]] && sandbox_curl_with_exit "sandbox-info/version"# -l list loaded modules [[ -n ${ OP_MODULE_LIST} ]] && sandbox_curl_with_exit "sandbox-module-mgr/list"# -F force flush module [[ -n ${ OP_MODULE_FORCE_FLUSH} ]] && sandbox_curl_with_exit "sandbox-module-mgr/flush" "&force=true"# -f flush module [[ -n ${ OP_MODULE_FLUSH} ]] && sandbox_curl_with_exit "sandbox-module-mgr/flush" "&force=false"# -R reset sandbox [[ -n ${ OP_MODULE_RESET} ]] && sandbox_curl_with_exit "sandbox-module-mgr/reset"# -u unload module [[ -n ${ OP_MODULE_UNLOAD} ]] && sandbox_curl_with_exit "sandbox-module-mgr/unload" "&action=unload&ids=${ ARG_MODULE_UNLOAD}"# -a active module [[ -n ${ OP_MODULE_ACTIVE} ]] && sandbox_curl_with_exit "sandbox-module-mgr/active" "&ids=${ ARG_MODULE_ACTIVE}"# -A frozen module [[ -n ${ OP_MODULE_FROZEN} ]] && sandbox_curl_with_exit "sandbox-module-mgr/frozen" "&ids=${ ARG_MODULE_FROZEN}"# -m module detail [[ -n ${ OP_MODULE_DETAIL} ]] && sandbox_curl_with_exit "sandbox-module-mgr/detail" "&id=${ ARG_MODULE_DETAIL}"# -S shutdown [[ -n ${ OP_SHUTDOWN} ]] && sandbox_curl_with_exit "sandbox-control/shutdown"# -d debug if [[ -n ${ OP_DEBUG} ]]; then sandbox_debug_curl "module//post/

CentOS5系统管理目录  基础篇

       Linux与开源软件的介绍,从自由软件与开源运动的角度出发,详细阐述了自由软件的概念、FSF、GNU和GNUProject的背景,以及自由软件协议的定义,同时讨论了自由软件与商业价值的关系,最后对比了开源软件与开放源码的异同。Linux操作系统的历史、特点和组成被全面梳理,内核版本与发行版本的演变也得到清晰解释。在此基础上,文章深入探讨了Linux的网络应用,并为读者介绍了CentOSLinux,包括RedHatLinux系列的jsqlparser 源码背景、起源和特点,以及CentOSLinux的不同版本。

       安装CentOS5的步骤,从必备知识开始,强调了磁盘分区的重要性,尤其是静态分区的局限性和逻辑卷管理(LVM)的优势。服务器方式安装CentOS5的流程被详细描述,包括下载与使用安装光盘启动系统。安装后的基本配置则涉及运行SetupAgent,使用更新源的国内镜像,以及安装必要的软件包,为系统稳定运行打下坚实基础。

       Linux字符界面操作基础,从选择在字符界面下工作、虚拟控制台和本地登录、远程登录Linux系统开始,逐步深入到系统运行级别与关机的管理,以及Shell和命令操作的基础,包括Shell的简介、命令操作基础、获得命令帮助的方法,以及文件与目录操作命令的详细讲解,涉及目录操作、文件操作和文件打包压缩命令,同时介绍了文本处理命令、信息显示命令和基本网络操作命令。

       Linux字符界面操作的进阶内容,包括提高工作效率的策略,如命令行补全、命令历史的使用和命令别名的设置,以及重定向和管道技术的深入理解。文件权限及设置命令的重要性被强调,包括文件权限的定义、权限设置命令的应用,以及find命令的格式、选项表达式、条件匹配表达式、动作表达式和组合条件表达式,还有正则表达式基础、grep的使用,以及文件编辑器Vi、sed和awk的高级功能,最后是进程管理和作业控制的深入探讨,以及Shell变量和Shell环境的详细说明。

       Shell脚本编程的介绍,从Shell脚本的定义、成分、建立与执行过程开始,涉及编码规范、深入变量操作、条件测试、使用特殊环境变量、分支结构和循环结构的使用,以及子程序结构(函数)的定义和调用,最后通过Shell脚本示例分析,如sysinfo和init脚本的详细解析,为读者提供了实际操作的指导。

扩展资料

       CentOS5系统管理以CentOS 5为蓝本,分两部分介绍了Linux操作系统的基本使用和系统管理。基础篇介绍了自由软件和开源软件的基础知识、Linux的基础知识、CentOS 5的安装、Linux字符操作界面的使用和常用命令、Shell功能及Shell编程;系统篇介绍了包管理与系统更新、账户管理、磁盘管理和 LVM 管理、文件系统管理、TCP/IP 网络配置、系统引导和启动、守护进程管理、系统监控和备份与恢复等内容。

云计算开发与运营主要学哪些

       云计算开发与运营主要学哪些?

       云计算的学习一般包含五大阶段:

       云计算第一阶段:主要学习网络基础,包括计算机网络(以太网、TCP/IP网络模型)、云计算网络(网络QoS、交换机与路由器),配备有企业级项目实战:IP地址配置与DNS解析。

       云计算第二阶段:学习Linux基础,包括Linux操作系统(文件权限、作业控制与进程管理)以及Linux高级管理(Sed、Awk工具、源码编译)。企业级项目实战为:云数据中心主机CPU资源利用率实时统计、分析系统。

       云计算第三阶段:学习Linux运维自动化,企业级项目实战为Python+Shell实现企业级FTP文件统一管理。

       云计算第四阶段:数据库运维管理的学习,企业级项目实战:MySQL Galera高可用集群环境部署、异步消息队列集群RabbitMQ部署与运维。

       云计算第五阶段:企业级云架构管理与综合实战(PaaS+TaaS),项目训练的是基于LAMP架构实现云计算PaaS平台典型应用部署与运维,通过Nginx实现千万级并发访问处理。

       Linux操作系统高效率、应用广,适用于各种设备中,在国内Linux的人才缺口逐渐扩大,就业方向多、岗位充足:

       有云计算方向、DBA方向、安全运维方向、系统运维方向、Python运维开发方向等。

       linux学完可以选择的工作岗位更是多种多样,云计算工程师、云计算研发工程师、云计算架构师、数据库运维工程师、高级数据库工程师、数据库架构师、安全运维工程师、安全专家、安全架构师、系统运维工程师、高级系统运维工程师、系统运维技术专家、Python运维开发工程师、Python高级运维开发工程师、技术总监等。

FreeBSD常用命令--ports使用方法讲解

       更新 INDEX 对照表

       4.x 的 INDEX 位於 /usr/ports/INDEX,5.x 位於 /usr/ports/INDEX-5。 INDEX 是对照 ports 所有相依等资讯的对照表,若长期未更新的话,会导致ports 对照失败。官方有定期更新 INDEX,如果 想自行更新的话,则:

       cd /usr/ports/

       make fetchindex

       更新 INDEX HTML

       FreeBSD 提供了用网页的方式来观看 ports collection,即可使用 lynx, w3m, links 或其它可浏览网页的程式来查阅。制作全部 ports collection 的方式如下:

       cd /usr/ports/

       make readmes

       如果是仅须要做目前目录下的资讯,或单一更新某一分类下的资讯,如 /usr/ports/ftp/ 的话,则:

       cd /usr/ports/ftp/

       make readme

       则仅会更新 /usr/ports/ftp/ 这个目录的资讯,其上与其下的目录皆不会更动到。 执行成功後,会在相对应的目录下产生 README.html 的档案。

       更新 ports Mk

       Mk (/usr/ports/Mk/) 是编译 ports 时所叁考的设定,有时若发生 ports

       collections 太新,而导致 Mk 的内容不符,此时 就是应该更新 Mk 的时候了。

       cd /usr/src/

       make update

       cd /usr/src/share/mk

       make install

       以关键字在ports寻找软件

       如果要从全部的 ports collection 中找寻与关键字 "ldap" 有关的 ports,则:

       cd /usr/ports/

       make search key=ldap | grep ^Path

       如果只要从与 ftp 相关的 ports 下找寻与关键字 "ldap" 有关的 ports,则:

       cd /usr/ports/ftp/

       make search key=ldap | grep ^Path

       还有另一个用法,方法只是将 key 换成 name 。如果已经知道要搜寻 ports 的名称,或只想找名称相关的关键字 "ldap", 则:

       cd /usr/ports/

       make search name=ldap | grep ^Path

       如果只要从 ftp 相关的 ports 下找寻名称与关键字 "ldap" 有关的 ports,则:

       cd /usr/ports/ftp/

       make search name=ldap | grep ^Path

       安装一个新的 port

       如果系统上未安装此软体,则可以选择安装一个新的 port。以 editors/joe 为例的话,则:

       cd /usr/ports/editors/joe/

       make install

       如此会在系统上安装一个新的 joe 软体。如果需要在安装完成後,一并清除编辑时期所留下来的暂存目录,则:

       cd /usr/ports/editors/joe/

       make clean

       如何得知 ports system 对某个 ports 所提供的编译叁数

       所有的 ports collections 中所提供的编译叁数都会在对应的 Makefile 档案内详述,如 sysutils/portupgrade 的话,则是位在 /usr/ports/sysutils/portupgrade/Makefile 档案下。

       可以对此档案浏览以得知编译时期可以下达的叁数,如对 sysutils/portupgrade 有提供 NOPORTDOCS,则:

       cd /usr/ports/sysutils/portupgrade/

       make -DNOPORTDOCS install 和make NOPORTDOCS=yes install 亦同那麽安装此 ports 时,会将 NOPORTDOCS 所对应的相关叁数指定进去。有时候设定较人性化的 ports 会在安装前提供叁数供选择,但是其实大部份的ports 都没有提供,因此必须自行去搜寻可编 译的叁数,在此我提供的方式如下:

       cd /usr/ports/sysutils/portupgrade/

       grep defined Makefile

       如此几乎可以知道所有提供的可编译叁数,虽然有时会多出一些不相干的资料,不会这个确实是一个不错可叁考的方式。

       安装 ports 前查询所需依赖/相关的套件

       在安装 ports 前,可以查询所需依赖/相关的套件。以 mail/p5-Mail-SpamAssassin 为例的话,则:

       cd /usr/ports/mail/p5-Mail-SpamAssassin/

       make all-depends-list

        #显示所有相关的套件

       make pretty-print-build-depends-list #显示编译期间所需要的套件

       make pretty-print-run-depends-list #显示此套件要执行时所需要的套件

       手动加入编译 ports 的叁数

       在ports collections 有提供的前提之下,有时候并不是所有该软体所支援的叁数 都会收纳在 ports collections 中,因此有时候会需要手动加入编译的叁数。如 ftp/pure-ftpd 中,如果不想把 inetd 的支援编入的选项,并没有被 ports collections 所纳入,因此必须手动加上这个 编译叁数,如下:

       cd /usr/ports/ftp/pure-ftpd/

       make CONFIGURE_ARGS+="--without-inetd" install

       指定 ports 的安装路径

       预设 ports collecions 已安排安装的路径 (/usr/local/),如果不想将套件安装在预设路径的话,可以手动指定安装路径。 以 editors/joe 为例,则:

       cd /usr/ports/editors/joe/

       make PREFIX=/usr install

       那么 joe 就会将档案对应在 /usr 目录下,而不是预设的 /usr/local 目录下。

       只下载源码包

       cd /usr/ports/editors/joe/

       make fetch

       预设会将 joe 的 源码包 下载至 /usr/ports/distfiles/ 目录下。

       下载安装此 ports 所有须要的其他 ports 的 源码包

       cd /usr/ports/systuils/portupgrade/

       make fetch-recursive

       预设会将此 ports 的源码包与所有须要的其他ports 的源码包,下载至 /usr/ports/distfiles/ 目录下。

       下载全部所有 ports 的 源码包

       cd /usr/ports/

       make fetch

       则会所将全部所有 ports 的 源码包 下载至 /usr/ports/distfiles/ 目录下。

       下载全部 ftp 下所有 ports 的 源码包

       cd /usr/ports/ftp/

       make fetch

       则会所将全部 ftp 下所有 ports 的 源码包 下载至 /usr/ports/distfiles/目录下。

       下载并解开源码包的步骤

       cd /usr/ports/editors/joe/

       make extract

       会将源码包解开至 /usr/ports/editors/joe/work/ 目录下。

       解开源码包并补上官方提供的 patch

       先补上官方提供的 patch ,再行 patch 自己的修正。以 editors/joe 为例的话,则:

       cd /usr/ports/editors/joe/

       make patch

       会将源码包解开至 /usr/ports/editors/joe/work/ 目录下,并已经 patch 上官方提供的 patch。

       如果想要一次清掉所有 ports 产生的暂存资料,则只要回到 ports 的根目录执行即可:

       cd /usr/ports/

       make clean

       安装一个新的 port,并将打包(package)起来

       将安装完成的软体打包起来,有许多便利性:包括在丛集系统中,可供其它机器 使用,或将未来此软体出问题可重新利用此 package 重新快速安装。以 editors/joe 为例的话,则:

       cd /usr/ports/editors/joe/

       make package

       如此会在系统上安装一个新的 joe 软体,并将此软体打包(package)起来。package 预设会在 /usr/ports/editors/joe/ 目录下,如果希望集中管理的话,建议做如下的步骤:

       mkdir -p /usr/ports/packages/All/以後打包的 packages 都会存放在此目录下,并且系统会自动做分类,以方便管理。如果需要在安装完成後,一并清除编辑 时期所留下来的暂存目录,使用,如:

       cd /usr/ports/editors/joe/

       make package clean

       打包一个 port,并将其所有相依的 ports 也打包起来

       如果编辑一个 port 需要依赖其它的ports,那麽必须将其它 ports 也一起打包,否则安装 packages 会有相 依赖其它 ports 的 packages 的问题。以 sysutils/portupgrade 为例的话,则:

       cd /usr/ports/sysutils/portupgrade/

       make DEPENDS_TARGET=package package

       如此会在对所有 portupgrade 所相依赖的 ports 一并打包,也包括自己本身。

       对一个已经安装的 port 打包

       如果安装好一个套软,事前并未打包,事後想打包的话,则:

       以 editors/joe 为例的话

       cd /var/db/pkg/

       pkg_create -b joe-{ 版本号}

       会将已安装的 port 打包起来,放在 /var/db/pkg/ 目录下。

       清理 ports 编辑期间所产生的暂存资料

       在编辑 port 的时候,会有编辑期间所需要的工作目录(work),因此通常安装好一个套件後,会清除此暂存目录,以节省系 统磁碟空间。以 editors/joe 为例的话,则:

       cd /usr/ports/editors/joe/

       make clean

       如果是希望清除所有 ports 的暂存目录,则:

       cd /usr/ports/

       make clean

       如果是希望清除全部 ftp 下所有的暂存目录,则:

       cd /usr/ports/ftp/

       make clean

       清理 ports 编辑期间所产生的暂存资料,以及其相对应的源码包

       make clean,仅只是清除编辑期间所需要的工作目录(work),并没有将编译ports 时一并下载的 源码包 删除(相对应之 源码包 预设会存放在 /usr/ports/distfiles/),如果欲把 源码包 一并删除,以 editors/joe 为例的话,则:

       cd /usr/ports/editors/joe/

       make distclean

       make distclean 的步骤包含了 make clean 的功能,也就是说除了会删除源码包 外,还会一并清除编辑期间所产生的工作目录。

       如果是希望清除所有 ports 的暂存目录,及源码包 ,则:

       cd /usr/ports/

       make distclean

       如果是希望清除全部 ftp 下所有的暂存目录,及 源码包,则:

       cd /usr/ports/ftp/

       make distclean

       移除已安装的 ports

       以 editors/joe 为例的话,则:

       cd /usr/ports/editors/joe/

       make deinstall

       或是使用 pkg_delete

       cd /var/db/pkg/

       pkg_delete joe-{ version}

       有时候套件之间的相依性会导致无法直接移除,如果要强制移除的话,则:

       cd /var/db/pkg/

       pkg_delete -f joe-{ version}但很有可能会导致其它的套件执行起来出现问题。

       一并移除所相依的 ports

       以 sysutils/portupgrade 为例的话,则:

       cd /usr/ports/sysutils/portupgrade/

       make deinstall-depends

       执行此步骤前,请注意是否会移除应该保护的套件。

       或是使用 pkg_delete

       cd /var/db/pkg/

       pkg_delete -r portupgrade-{ version} 重新安装已安装过的 ports

       重新安装的前提是,之前有安装过或目前已安装。以 editors/joe 为例的话,

       则:

       cd /usr/ports/editors/joe/

       make deinstall

       make clean

       make install 或 make reinstall

       升级已安装的 ports

       如果已经安装好套件,事後欲升级的话,必须先移除旧版本的 port,移除的方法以 editors/joe 为例,则:

       cd /var/db/pkg/

       pkg_delete joe-{ version}

       cd /usr/ports/editors/joe/

       make install

       或是

       cd /usr/ports/editors/joe/

       make clean

       make reinstall

       安装旧版的 ports

       有时候会因为相依性,或是新版有问题,而会想装旧版本的套件。这里的方法是利用 CVS 的好处,回归到以前旧版本存在的日子,以安装旧版本的套件。首先,若我们要回复到某一个套件的版本时,需要去查询 FreeBSD ports CVS repository。最常见的就是 Freshports 网站、 FreeBSD 的 Mailing FreeBSD cvs 或是 FreeBSD ports cvsweb。

       查到该套件版本所依存的日子後,就修改 CVS tag。一般预设 ports 的 CVStag 会写在 /usr/share/examples/cvsup/ports-supfile ,如要回朔到// 号的话,则:

       vi /usr/share/examples/cvsup/ports-supfile

       

相关栏目:综合