linux 运行级, runlevel

linux 运行级, runlevel 作为默认,REDHAT Linux 9.0在启动时会自动启动X-Window进入图形化操作界面。而许多Linux铁杆玩家已经习惯了在Console字符界面工作,或是有些玩家嫌X-Window启动太慢,喜欢直观快速的Console操作。 1.进入字符界面 为了在Linux启动时直接进入Console界面,我们可以编辑/etc/inittab文件。找到 id:5:initdefault: 这一行,将它改为 id:3:initdefault: 后重新启动系统即可。我们看到,简简单单地将5改为3,就能实现启动时进入X-Window图形操作界面或Console字符界面的转换,这是因为Linux操作系统有六种不同的运行级 (run level) ,在不同的运行级下,系统有着不同的状态,这六种运行级分别为: 0: 停机 (记住不要把initdefault 设置为0,因为这样会使Linux无法启动 ) 1: 单用户模式,就像Win9X下的安全模式。 2: 多用户,但是没有 NFS 。 3: 完全多用户模式,标准的运行级。 4: 一般不用,在一些特殊情况下可以用它来做一些事情。 5: X11,即进到 X-Window 系统。 6: 重新启动 (记住不要把initdefault 设置为6,因为这样会使Linux不断地重新启动) 。 其中运行级3就是我们要进入的标准Console字符界面模式。 2.自由转换字符界面和X-Window图形界面 在了解了启动自动进入X-Window图形操作界面和Console字符操作界面的转换后,也许你会想,这两种操作界面各有各的好处,我能不能"贪心"一点,同时拥有这两种操作界面呢?在无所不能的Linux操作系统中,这个要求当然是可以得到满足的。 在X-Window图形操作界面中按"Alt+Ctrl+功能键Fnn=1~6"就可以进入Console字符操作界面。这就意味着你可以同时拥有X-Window加上6个Console字符操作界面,这是一件多么令人振奋的事情啊! 在Console字符操作界面里如何回到刚才的X-Window中呢?很简单,按"Alt+Ctrl+F7"即可。这时Linux默认打开7个屏幕,编号为tty1tty7。X-Window启动后,占用的是tty7号屏幕,tty1tty6仍为字符界面屏幕。也就是说,用"Alt+Ctrl+Fn"组合键即可实现字符界面与X Window界面的快速切换。 Linux的老用户们都知道,X-Window是一个非常方便地图形界面,它能使用户用鼠标最简单的进行操作,但是它也有不少缺点: 比如启动和运行速度慢、稳定性不够、兼容性差、容易崩溃等。但是一旦X-Window系统出了问题,并不会使整个Linux系统的崩溃而导致数据丢失或系统损坏,因为当X-Window由于自身或应用程序而失去响应或崩溃时,我们可以非常方便地退出X-Window进入Console进行故障处理,要做的只是按"Alt+Ctrl+Backspace"键,这意味着只要系统没有失去对键盘的响应,X-Window出了任何问题,都可以方便地退出。

2011-11-21 · 1 min · 47 words · -

STDIN STDOUT, STDERR

STDIN STDOUT, STDERR Unix/Linux/BSD 都有三个特别文件,分别 标准输入 即 STDIN , 在 /dev/stdin , 一般指键盘输入, shell里代号是 0 标准输出 STDOUT, 在 /dev/stdout, 一般指终端(terminal), 就是显示器, shell里代号是 1 标准错误 STDERR, 在 /dev/stderr 也是指终端(terminal), 不同的是, 错误信息送到这里 shell里代号是 2 stdout和stderr 有人说stdio是带缓冲的,stderr是不带缓冲的,这并不是指fd=1和fd=2这两个设备文件,这两个设备是字符设备,本身没有缓存。并且你看一个进程的1和2两个fd指向的其实是同一个终端设备文件 ls -l /proc/8669/fd/ total 0 lrwx------ 1 root root 64 4月 25 20:57 0 -> /dev/pts/7 lrwx------ 1 root root 64 4月 25 20:57 1 -> /dev/pts/7 lrwx------ 1 root root 64 4月 25 20:57 2 -> /dev/pts/7 所以,细想一下就知道,向1或2两个fd写东西,在内核里走的是完全相同的路径,不可能存在一会儿缓存一会儿不缓存的情况。 ...

2011-11-19 · 1 min · 169 words · -

Debian/Ubuntu 系统 Update-rc.d

Debian/Ubuntu 系统 Update-rc.d https://wangyan.org/blog/ubuntu-update-rc-d.html Ubuntu或者Debian系统中update-rc.d命令,是用来更新系统启动项的脚本。这些脚本的链接位于/etc/rcN.d/目录,对应脚本位于/etc/init.d/目录。在了解update-rc.d命令之前,你需要知道的是有关Linux 系统主要启动步骤,以及Ubuntu中运行级别的知识。 一、Linux 系统主要启动步骤 读取 MBR 的信息,启动 Boot Manager。 加载系统内核,启动 init 进程, init 进程是 Linux 的根进程,所有的系统进程都是它的子进程。 init 进程读取 /etc/inittab 文件中的信息,并进入预设的运行级别。通常情况下 /etc/rcS.d/ 目录下的启动脚本首先被执行,然后是/etc/rcN.d/ 目录。 根据 /etc/rcS.d/ 文件夹中对应的脚本启动 Xwindow 服务器 xorg,Xwindow 为 Linux 下的图形用户界面系统。 启动登录管理器,等待用户登录。 二、运行级别 Ubuntu中的运行级别 0 (关闭系统) 1 (单用户模式,只允许root用户对系统进行维护。) 2 到 5 (多用户模式,其中3为字符界面,5为图形界面。) 6 (重启系统) 切换运行级别 init [0123456Ss] 例如: init 0 命令关机; init 6 命令重新启动 启动项管理工具 sudo apt-get install sysv-rc-conf //或者使用带gui的工具bum sudo sysv-rc-conf 三、update-rc.d命令详解 ...

2011-11-18 · 1 min · 119 words · -

shell逻辑运算符

shell逻辑运算符 -d 常用!侦测『目录』是否存在 -b 侦测是否为一个『 block 档案』 -c 侦测是否为一个『 character 档案』 -S 侦测是否为一个『 socket 标签档案』 -L 侦测是否为一个『 symbolic link 的档案』 -e 侦测『某个东西』是否存在! 2. 关于程序的逻辑卷标! -G 侦测是否由 GID 所执行的程序所拥有 -O 侦测是否由 UID 所执行的程序所拥有 -p 侦测是否为程序间传送信息的 name pipe 或是 FIFO (老实说,这个不太懂!) 3. 关于档案的属性侦测! -r 侦测是否为可读的属性 -w 侦测是否为可以写入的属性 -x 侦测是否为可执行的属性 -s 侦测是否为『非空白档案』 -u 侦测是否具有『 SUID 』的属性 -g 侦测是否具有『 SGID 』的属性 -k 侦测是否具有『 sticky bit 』的属性 4. 两个档案之间的判断与比较 ;例如[ test file1 -nt file2 ] -nt 第一个档案比第二个档案新 -ot 第一个档案比第二个档案旧 -ef 第一个档案与第二个档案为同一个档案 ( link 之类的档案) 5. 逻辑的『和(and)』『或(or)』 && 逻辑的 AND 的意思 || 逻辑的 OR 的意思 运算符号 代表意义 = 等于 应用于: 整型或字符串比较 如果在[] 中,只能是字符串 != 不等于 应用于: 整型或字符串比较 如果在[] 中,只能是字符串 < 小于 应用于: 整型比较 在[] 中,不能使用 表示字符串 > 大于 应用于: 整型比较 在[] 中,不能使用 表示字符串 -lt 小于 应用于: 整型比较 -gt 大于 应用于: 整型比较 -le 小于或等于 应用于: 整型比较 -ge 大于或等于 应用于: 整型比较 -a 双方都成立 (and) 逻辑表达式 –a 逻辑表达式 -o 单方成立 (or) 逻辑表达式 –o 逻辑表达式 -z 空字符串 -n 非空字符串

2011-11-12 · 1 min · 149 words · -

missing LSB tags and overrides

missing LSB tags and overrides update-rc.d tomcat defaults pop out warning message missing LSB tags and overrides add the following lines into the script BEGIN INIT INFO Provides: tomcat Required-Start: $remote_fs $syslog Required-Stop: $remote_fs $syslog Default-Start: 2 3 4 5 Default-Stop: 0 1 6 Short-Description: Start tomcat at boot time Description: Enable service provided by tomcat. END INIT INFO

2011-11-12 · 1 min · 59 words · -

tomcat 开机启动, jsvc

tomcat 开机启动, jsvc 参考http://tomcat.apache.org/tomcat-7.0-doc/setup.html的介绍,tomcat自带了jsvc工具, 需要先安装gcc, make 在tomcat的bin目录下: cd $CATALINA_HOME/bin tar xvfz commons-deamon-native.tar.gz cd commons-daemon-1.0.x-native-src/unix ./configure make cp jsvc ../.. cd ../.. 设置启动脚本 在$CATALINA_HOME/bin/commons-daemon-1.0.x-native-src/unix/samples目录下有一个Tomcat7.sh文件,将其复制到/etc/init.d/m目录下并命名为tomcat: sudo cp Tomcat7.sh /etc/init.d/tomcat add following lines to the file. ### BEGIN INIT INFO # Provides: tomcat # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start tomcat at boot time # Description: Enable service provided by tomcat. ### END INIT INFO CATALINA_HOME=/xxx/xxx/xxx/apache-tomcat-7.0.22 export CATALINA_HOME JAVA_HOME=/opt/jvm/jdk1.7.0 export JAVA_HOME 修改运行级别 ...

2011-11-12 · 1 min · 96 words · -

守护进程, 守护线程

守护进程, 守护线程 守护进程详解及创建,daemon() 使用 守护进程概述 Linux Daemon (守护进程) 是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux 系统的大多数服务器就是通过守护进程实现的。常见的守护进程包括系统日志进程 syslogd、 web 服务器 httpd、邮件服务器 sendmail 和数据库服务器 MySQLd 等。 守护进程一般在系统启动时开始运行,除非强行终止,否则直到系统关机都保持运行。守护进程经常以超级用户 (root) 权限运行,因为它们要使用特殊的端口 (1-1024) 或访问某些特殊的资源。 一个守护进程的父进程是 init 进程,因为它真正的父进程在 fork 出子进程后就先于子进程 exit 退出了,所以它是一个由 init 继承的孤儿进程。守护进程是非交互式程序,没有控制终端,所以任何输出,无论是向标准输出设备 stdout 还是标准出错设备 stderr 的输出都需要特殊处理。 守护进程的名称通常以 d 结尾,比如 sshd、xinetd、crond 等 二,创建守护进程步骤 首先我们要了解一些基本概念: 进程组 : 每个进程也属于一个进程组 每个进程主都有一个进程组号,该号等于该进程组组长的 PID 号. 一个进程只能为它自己或子进程设置进程组 ID 号 会话期: 会话期(session)是一个或多个进程组的集合。 setsid()函数可以建立一个对话期: 如果,调用setsid的进程不是一个进程组的组长,此函数创建一个新的会话期。 (1)此进程变成该对话期的首进程 (2)此进程变成一个新进程组的组长进程。 (3)此进程没有控制终端,如果在调用setsid前,该进程有控制终端,那么与该终端的联系被解除。 如果该进程是一个进程组的组长,此函数返回错误。 (4)为了保证这一点,我们先调用fork()然后exit(),此时只有子进程在运行 现在我们来给出创建守护进程所需步骤: 编写守护进程的一般步骤步骤: 在父进程中执行fork并exit推出; 在子进程中调用setsid函数创建新的会话; 在子进程中调用chdir函数,让根目录 ”/” 成为子进程的工作目录; 在子进程中调用umask函数,设置进程的umask为0; 在子进程中关闭任何不需要的文件描述符 说明: 在后台运行。 为避免挂起控制终端将Daemon放入后台执行。方法是在进程中调用fork使父进程终止,让Daemon在子进程中后台执行。 if(pid=fork()) exit(0);//是父进程,结束父进程,子进程继续 脱离控制终端,登录会话和进程组 有必要先介绍一下Linux中的进程与控制终端,登录会话和进程组之间的关系: 进程属于一个进程组,进程组号 (GID) 就是进程组长的进程号 (PID) 。登录会话可以包含多个进程组。这些进程组共享一个控制终端。这个控制终端通常是创建进程的登录终端。 控制终端,登录会话和进程组通常是从父进程继承下来的。我们的目的就是要摆脱它们,使之不受它们的影响。方法是在第1点的基础上,调用setsid()使进程成为会话组长: setsid(); 说明: 当进程是会话组长时setsid()调用失败。但第一点已经保证进程不是会话组长。setsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与控制终端脱离。 禁止进程重新打开控制终端 现在,进程已经成为无终端的会话组长。但它可以重新申请打开一个控制终端。可以通过使进程不再成为会话组长来禁止进程重新打开控制终端: if(pid=fork()) exit(0);//结束第一子进程,第二子进程继续 (第二子进程不再是会话组长) 关闭打开的文件描述符 进程从创建它的父进程那里继承了打开的文件描述符。如不关闭,将会浪费系统资源,造成进程所在的文件系统无法卸下以及引起无法预料的错误。按如下方法关闭它们: for(i=0;i 关闭打开的文件描述符close(i);> 改变当前工作目录 进程活动时,其工作目录所在的文件系统不能卸下。一般需要将工作目录改变到根目录。对于需要转储核心,写运行日志的进程将工作目录改变到特定目录如/tmpchdir("/") 重设文件创建掩模 进程从创建它的父进程那里继承了文件创建掩模。它可能修改守护进程所创建的文件的存取位。为防止这一点,将文件创建掩模清除: umask(0); 处理SIGCHLD信号 处理SIGCHLD信号并不是必须的。但对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程 (zombie) 从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下可以简单地将SIGCHLD信号的操作设为SIG_IGN。 signal(SIGCHLD,SIG_IGN); 这样,内核在子进程结束时不会产生僵尸进程。这一点与BSD4不同,BSD4下必须显式等待子进程结束才能释放僵尸进程。 创建守护进程 在创建之前我们先了解setsid()使用: ...

2011-11-12 · 6 min · 1278 words · -

dentry

dentry 上一节提到了,struct file并不是文件系统的核心数据结构,那么dentry和inode,这两个结构体谁是文件系统的核心数据结构呢,它们存在的目的又分别是什么呢? 首先dentry是目录项缓存,是一个存放在内存里的缩略版的磁盘文件系统目录树结构,他是directory entry的缩写。我们知道文件系统内的文件可能非常庞大,目录树结构可能很深,该树状结构中,可能存在几千万,几亿的文件。 首先假设不存在dentry这个数据结构,我们看下我们可能会面临什么困境: 比如我要打开/usr/bin/vim 文件, 1 首先需要去/所在的inode找到/的数据块,从/的数据块中读取到usr这个条目的inode, 2 跳转到user 对应的inode,根据/usr inode 指向的数据块,读取到/usr 目录的内容,从中读取到bin这个条目的inode 3 跳转到/usr/bin/对应的inode,根据/usr/bin/指向的数据块,从中读取到/usr/bin/目录的内容,从里面找到vim的inode 我们都知道,Linux提供了page cache页高速缓存,很多文件的内容已经缓存在内存里,如果没有dentry,文件名无法快速地关联到inode,即使文件的内容已经缓存在页高速缓存,但是每一次不得不重复地从磁盘上找出来文件名到VFS inode的关联。 因此理想情况下,我们需要将文件系统所有文件名到VFS inode的关联都纪录下来,但是这么做并不现实,首先并不是所有磁盘文件的inode都会纪录在内存中,其次磁盘文件数字可能非常庞大,我们无法简单地建立这种关联,耗尽所有的内存也做不到将文件树结构照搬进内存 https://bean-li.github.io/vfs-inode-dentry/

2011-11-09 · 1 min · 24 words · -

Repository write access denied

Repository write access denied Repository write access denied manually add public key to /home/git/.ssh/authorized_keys start with : command=“python /home/www/indefero/scripts/gitserve.py USER”,no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa**

2011-11-03 · 1 min · 21 words · -

页缓存, Page Cache

页缓存, Page Cache 可以通过命令 getconf PAGE_SIZE 来获取页的大小: sudo getconf PAGE_SIZE 两个逻辑单位: 页,内存操作的基本单位 磁盘块,磁盘操作的基本单位 我们知道文件一般存放在硬盘 (机械硬盘或固态硬盘)中,CPU 并不能直接访问硬盘中的数据,而是需要先将硬盘中的数据读入到内存中,然后才能被 CPU 访问。 由于读写硬盘的速度比读写内存要慢很多 (DDR4 内存读写速度是机械硬盘 500 倍,是固态硬盘的 200 倍),所以为了避免每次读写文件时,都需要对硬盘进行读写操作,Linux 内核使用 页缓存 (Page Cache) 机制来对文件中的数据进行缓存。 本文使用的 Linux 内核版本为:Linux-2.6.23 DDR4 内存带宽 DDR4 2133:17 GB/s DDR4 2400:19.2 GB/s DDR4 2666:21.3 GB/s DDR4 3200:25.6 GB/s 机械硬盘带宽 5400转笔记本硬盘平均读写速度大致在60-90MB这个区间 7200转台式机硬盘大致在130-190MB区间,10000转的西数黑盘也在这个区间内 10000转和15000转台式机硬盘数据不详 https://zhuanlan.zhihu.com/p/443104177 什么是页缓存 为了提升对文件的读写效率,Linux 内核会以页大小 (4KB)为单位,将文件划分为多数据块。当用户对文件中的某个数据块进行读写操作时,内核首先会申请一个内存页 (称为 页缓存)与文件中的数据块进行绑定。 当用户对文件进行读写时,实际上是对文件的 页缓存 进行读写。所以对文件进行读写操作时,会分以下两种情况进行处理: 当从文件中读取数据时,如果要读取的数据所在的页缓存已经存在,那么就直接把页缓存的数据拷贝给用户即可。否则,内核首先会申请一个空闲的内存页 (页缓存),然后从文件中读取数据到页缓存,并且把页缓存的数据拷贝给用户。 当向文件中写入数据时,如果要写入的数据所在的页缓存已经存在,那么直接把新数据写入到页缓存即可。否则,内核首先会申请一个空闲的内存页 (页缓存),然后从文件中读取数据到页缓存,并且把新数据写入到页缓存中。对于被修改的页缓存,内核会定时把这些页缓存刷新到文件中。 radix 树 radix树:又名基数树,它使用键值 (key-value)对的形式来保存数据,并且可以通过键快速查找到其对应的值。内核以文件读写操作中的数据 偏移量 作为键,以数据偏移量所在的 页缓存 作为值,存储在 address_space 结构的 page_tree 字段中。 buffer cache, 块缓存 Buffer cache 也叫块缓冲,是对物理磁盘上的一个磁盘块进行的缓冲,其大小为通常为1k,磁盘块也是磁盘的组织单位。设立 buffer cache 的目的是为在程序多次访问同一磁盘块时,减少访问时间。系统将磁盘块首先读入 buffer cache,如果 cache 空间不够时,会通过一定的策略将一些过时或多次未被访问的 buffer cache 清空。程序在下一次访问磁盘时首先查看是否在 buffer cache 找到所需块,命中可减少访问磁盘时间。不命中时需重新读入 buffer cache。对 buffer cache 的写分为两种,一是直接写,这是程序在写 buffer cache 后也写磁盘,要读时从 buffer cache 上读,二是后台写,程序在写完 buffer cache后并不立即写磁盘,因为有可能程序在很短时间内又需要写文件,如果直接写,就需多次写磁盘了。这样效率很低,而是过一段时间后由后台写,减少了多次访磁盘的时间。 ...

2011-10-29 · 1 min · 193 words · -

/proc

/proc 在GUN/Linux操作系统中,/proc 是一个位于内存中的伪文件系统(in-memory pseudo-file system)。该目录下保存的不是真正的文件和目录,而是一些“运行时”信息,如系统内存、磁盘io、设备挂载信息和硬件配置信息等。proc目录是一个控制中心,用户可以通过更改其中某些文件来改变内核的运行状态。proc目录也是内核提供给我们的查询中心,我们可以通过这些文件查看有关系统硬件及当前正在运行进程的信息。在Linux系统中,许多工具的数据来源正是proc目录中的内容。例如,lsmod命令就是cat /proc/modules命令的别名,lspci命令是cat /proc/pci命令的别名。 cat /proc/pagetypeinfo 查看内存碎片情况 cat / proc / pagetypeinfo 我看到三种types的内存区域; DMA DMA32 正常 Linux如何select一个内存区域来分配一个新的页面? 写入/读取受内存保护的进程的内存 我怎样才能减less最小的Linux进程的内存占用量 区分Java应用程序mmaped内存和Linux上的JVM mmapped内存 使用C用户空间代码读取Linux / proc接口的最佳方法是什么? 在Linux程序中跟踪积极使用的内存 找出一个进程在Linux上使用多less内存页面 OSError:无法从python subprocess.call分配内存 python subprocess.Popen错误与OSError:一段时间后不能分配内存 Shell脚本循环在CygWin下耗尽内存 在fork ()中重复的段? 这些内存区域仅为32位系统定义,而不在64位中定义。 记住这些是我们正在讨论的内核可访问的main memory 。 在32 bit (4GB)系统中,内核与用户空间之间的分割为1:3 。 含义内核可以访问1GB和用户空间3GB。 内核的1GB分割如下: Zone_DMA (0-16MB): 永久映射到内核地址空间。 出于兼容性原因,较旧的ISA设备只能处理较低的16MB主内存。 Zone_Normal (16MB-896MB): 永久映射到内核地址空间。 许多内核操作只能使用ZONE_NORMAL所以它是性能最关键的区域,并且是内核主要分配的内存。 ZONE_HIGH_MEM (896MB以上): 没有永久映射到内核的地址空间。 内核可以访问整个4GB的主内存。 内核的1GB通过Zone_DMA & Zone_Normal和用户的3GB通过ZONE_HIGH_MEM 。 使用英特尔的Physical Address Extension (PAE) ,可以获得4个额外的位来寻址主存储器,产生36位,总共可以访问64GB的内存。 增量地址空间 (36位地址 – 32位地址)是ZONE_HIGH_MEM用于映射到用户访问的主存储器 (即2GB – 4GB之间)的位置。 ...

2011-10-27 · 1 min · 80 words · -

glibc

glibc glibc 是非常底层的系统库,千万不要自己手动更新,网上有很多教训。 glibc是linux下面c标准库的实现,即GNU C Library。glibc本身是GNU旗下的C标准库,后来逐渐成为了Linux的标准c库,而Linux下原来的标准c库Linux libc逐渐不再被维护。Linux下面的标准c库不仅有这一个,如uclibc、klibc,以及上面被提到的Linux libc,但是glibc无疑是用得最多的。glibc在/lib目录下的.so文件为libc.so.6。 glib glib是GTK+的基础库,它由基础类型、对核心应用的支持、实用功能、数据类型和对象系统五个部分组成,可以在[http://www.gtk.org gtk网站]下载其源代码。是一个综合用途的实用的轻量级的C程序库,它提供C语言的常用的数据结构的定义、相关的处理函数,有趣而实用的宏,可移植的封装和一些运行时机能,如事件循环、线程、动态调用、对象系统等的API。GTK+是可移植的,当然glib也是可移植的,你可以在linux下,也可以在windows下使用它。使用gLib2.0 (glib的2.0版本) 编写的应用程序,在编译时应该在编译命令中加入pkg-config –cflags –libs glib-2.0,如: gcc pkg-config –cflags –libs glib-2.0 hello.c -o hello 使用glib最有名的就是GNOME了。 eglibc eglic是二进制兼容glibc的,就是说如果代码使用的是eglic的库,那么换成glic之后无需重新编译。glibc为了实现最优化处理,致使在空间占用上越来越为人诟病。eglibc的主要特性是更好的支持嵌入式架构,支持不同的shell(GLIBC只支持bash),支持-Os,可配置组件,稳定分支修正了一些重要Bug等。 查看 glibc 版本, glibc version ldd --version # ldd命令为 glibc 提供 dpkg -s libc6 | grep Ver https://nieyong.github.io/wiki_ny/glibc,%20eglibc%E5%92%8C%20glib%E7%9A%84%E5%8C%BA%E5%88%AB.html https://shixiangwang.github.io/home/cn/post/2020-09-28-note-about-glibc/

2011-10-26 · 1 min · 46 words · -

ip-guard, [0x7FFFBB83E044] ANOMALY: use of REX.w is meaningless (default operand size is 64)

“ip-guard, [0x7FFFBB83E044] ANOMALY: use of REX.w is meaningless (default operand size is 64)” HKEY_LOCAL_MACHINE\SOFTWARE\TEC\Ocular.3\agent\config 字符串类型, key: hookapi_filterproc_external value: cmd.exe;wsl.exe foo.reg Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\TEC\Ocular.3\agent\config] "hookapi_filterproc_external"="cmd.exe;wsl.exe"

2011-10-19 · 1 min · 27 words · -

Zipkin

Zipkin Zipkin 是一个基于 Java 开发的、开源的、分布式实时数据跟踪系统 (Distributed Tracking System) https://zipkin.io/

2011-10-16 · 1 min · 9 words · -

df command

df command 文件系统类型, 磁盘分区类型 df -T df 是来自于coreutils 软件包,系统安装时,就自带的;我们通过这个命令可以查看磁盘的使用情况以及文件系统被挂载的位置; 举例: df -lh Filesystem 容量 已用 可用 已用% 挂载点 /dev/hda8 11G 6.0G 4.4G 58% / /dev/shm 236M 0 236M 0% /dev/shm /dev/sda1 56G 22G 35G 39% /mnt/sda1 我们从中可以看到,系统安装在/dev/hda8 ;还有一个56G的磁盘分区/dev/sda1挂载在 /mnt/sda1中; 其它的参数请参考 man df disk free 的缩写;用于显示目前Linux系统上的文件系统的磁盘使用情况统计, df 是用 superblock 的信息统计磁盘占用的. df -h # 查看 inode 使用情况 df -hi df -t ext4 -h # 查看文件系统类型 df -T -h # inode 使用统计 df -i df命令可以获取硬盘被占用了多少空间, 目前还剩下多少空间等信息, 它也可以显示所有文件系统对i节点和磁盘块的使用情况。 ...

2011-10-16 · 2 min · 302 words · -

md5, sha256

md5, sha256 # linux md5sum [OPTION]... [FILE]... md5sum foo.tar sha256sum foo.tar sha1sum foo.tar # windows certutil -hashfile foo.tar MD5 certutil -hashfile foo.tar SHA1 certutil -hashfile foo.tar SHA256 # macos md5 foo.tar MD5: 一种单向Hash函数/单向散列函数 Message Digest Algorithm MD5 (中文名为消息摘要算法第五版) 为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321 (R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992) 。 描述 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5 全称是报文摘要算法 (Message-Digest Algorithm 5) ,此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位 (十六进制长度就是32位) 的"指纹" (或称"报文摘要") ,不同的文件产生相同的报文摘要的可能性是非常非常之小的。 在linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程序。一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行。 选项: -b 或 -binary :把输入文件作为二进制文件看待。 -t 或 -text :把输入的文件作为文本文件看待 (默认) 。 -c 或 -check :用来从文件中读取md5信息检查文件的一致性。(不细说了参见info) -status :这个选项和check一起使用,在check的时候,不输出,而是根据返回值表示检查结果。 -w 或 -warn :在check的时候,检查输入的md5信息又没有非法的行,如果有则输出相应信息。 [举例] ...

2011-10-14 · 2 min · 217 words · -

cgroup, namespace

cgroup, namespace cgroup 的主要作用:管理资源的分配、限制; namespace 的主要作用:封装抽象,限制,隔离,使命名空间内的进程看起来拥有他们自己的全局资源; Chroot Chroot 可以将进程及其子进程与操作系统的其余部分隔离开来。但是,对于 root process ,却可以任意退出 chroot。 现代化容器技术带来的优势 轻量级,基于 Linux 内核所提供的 cgroup 和 namespace 能力,创建容器的成本很低; 一定的隔离性; 标准化,通过使用容器镜像的方式进行应用程序的打包和分发,可以屏蔽掉因为环境不一致带来的诸多问题; DevOps 支撑 (可以在不同环境,如开发、测试和生产等环境之间轻松迁移应用,同时还可保留应用的全部功能); cgroup Linux control groups cgroup 是 Linux 内核的一个功能,用来限制、控制与分离一个进程组的资源 (如CPU、内存、磁盘输入输出等)。它是由 Google 的两位工程师进行开发的,自 2018 年 1 月正式发布的 Linux 内核 v2.6.24 开始提供此能力。 cgroup 主要限制的资源是: CPU 内存 网络 磁盘 I/O cgroup 的组成 cgroup 代表“控制组”,并且不会使用大写。cgroup 是一种分层组织进程的机制, 沿层次结构以受控的方式分配系统资源。我们通常使用单数形式用于指定整个特征,也用作限定符如 “cgroup controller” 。 cgroup 主要有两个组成部分: core - 负责分层组织过程; controller - 通常负责沿层次结构分配特定类型的系统资源。每个 cgroup 都有一个 cgroup.controllers 文件,其中列出了所有可供 cgroup 启用的控制器。当在 cgroup.subtree_control 中指定多个控制器时,要么全部成功,要么全部失败。在同一个控制器上指定多项操作,那么只有最后一个生效。每个 cgroup 的控制器销毁是异步的,在引用时同样也有着延迟引用的问题; ...

2011-10-13 · 1 min · 87 words · -

nohup, shell 的后台运行 &, 和 nohup

nohup, shell 的后台运行 &, 和 nohup # 语法: nohup Command [ Arg … ] [&] # & 后台运行, 但是使用父进程的 stdout 和 stderr ./command0 & # nohup 的意思是 no hup, 忽略所有发送给子命令的 SIGHUP 信号, shell 关闭时 sigup 不会被发到子进程. nohup ./command0 & # 使用 nohup 之后 会看到 nohup: appending output to "nohup.out", command0 的 stdout 和 stderr 都 被重定向到 nohup.out nohup ./command0 > /dev/null 2>&1 & https://www.jianshu.com/p/747e0d5021a2 https://blog.csdn.net/cugxueyu/article/details/2046565 hangup 名称的来由 在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯。当用户 logout 时,modem 就会挂断 (hang up) 电话。 同理,当 modem 断开连接时,就会给终端发送 hangup 信号来通知其关闭所有子进程。 ...

2011-10-08 · 2 min · 215 words · -

linux user, group, 用户 用户组

linux user, group, 用户 用户组 用户 查看用户 cat /etc/passwd wyue:x:513:513::/home/wyue:/bin/bash 看第三个参数: 500 以上的,就是后来建的用户了。其它则为系统的用户。 创建用户 # create user, 创建目录 /home/user0, 默认 bash sudo useradd -m user0 # 创建用户 user_0, 默认不会创建 home 目录, 默认 bash sudo useradd user_0 # 给 user_0 设置密码 sudo passwd user_0 sudo useradd -m -s /bin/bash user0 # create group and user sudo useradd -m -s /bin/bash -g group0 user0 sudo passwd user0 sudo useradd -m -s /bin/zsh user0 sudo useradd -M -s /bin/false user1 sudo useradd user0 # ubuntu shadow 包提供的工具 # adduser 是一个高级脚本,通常存在于 Debian / Ubuntu 系统 上。 # --system 创建一个系统用户,通常用于运行系统服务(如 Kafka、nginx、mysql 等),不是用于日常登录的普通用户。系统用户的 UID 通常小于 1000。 # --group 同时创建一个与用户名相同的用户组(kafka),并将用户添加进这个组。 # kafka 是一个系统用户,通常用于运行 Kafka 服务。 sudo adduser --system --no-create-home --group kafka options # -m: create home folder, 不加 -m 参数,默认不创建 home # -M: Don't create a home directory # -s: specify shell for user, 默认是 /bin/bash # -s /bin/false - Don't assign a shell (or more accurately, make the shell /bin/false, so the user cannot be logged into) # -r: create system account # -d: home dir # -r - Make a system user # -g <群组>: 指定用户所属的群组; # -G <群组>: 指定用户所属的附加群组 # -c <备注>:加上备注文字。备注文字会保存在 passwd 的备注栏位中; 删除用户 -r, 删除用户 home 目录 userdel -r test 设置密码 sudo passwd user0 输入密码: 一般密码至少要有六个字符,这里输入的密码是看不见的,屏幕没显示 重新输一次密码: ...

2011-09-25 · 9 min · 1830 words · -

tar

tar tar tar [-cxtzjvfpPN] 文件与目录 …. 参数: -z : 是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩? -x : 解开一个压缩文件的参数指令! -v : 压缩的过程中显示文件!这个常用,但不建议用在背景执行过程! -f : 使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数! 例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成 『 tar -zcvPf tfile sfile』才对喔! -c : 建立一个压缩文件的参数指令(create 的意思); -t : 查看 tarfile 里面的文件! 特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在! 因为不可能同时压缩与解压缩。 -j : 是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩? -p : 使用原文件的原来属性 (属性不会依据使用者而变) -P : 可以使用绝对路径来压缩! -N : 比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中! -exclude FILE: 在压缩的过程中,不要将 FILE 打包! ...

2011-08-30 · 2 min · 273 words · -