Linux

A collection of 16 posts
Linux

Linux 加电启动过程

linux 的启动流程分析_单人旅行的技术博客_51CTO博客linux 的启动流程分析, 说起linux的启动流程,让我想起一个成语:牵一发而动全身,随着你按下开关的那一刻,屏幕上虽然黑乎乎的没有什么界面,但背后却引来了犹如千军万马的程序。呵呵,这就叫不看不知道,一看吓一跳,下面的两幅图我感觉很好,借来用一用,让大家具体了解一下,你那一个简单的动作所引发的“血案”图一: 图2:下面我们一起具体的把每一步分析一下:第一51CTO博客详解linux系统的启动过程及系统初始化_51CTO博客_linux系统启动过程详解linux系统的启动过程及系统初始化,一、linux系统的启动流程  关于linux系统的启动流程我们可以按步进行划分为如下:POST加电自检-->BIOS(BootSequence)-->加载对应引导上的MBR(bootloader)-->主引导设置加载其BootLoader-->Kernel初始化-->initrd—>
2 min read
Git

实用Git快捷命令

Photo by Roman Synkevych 🇺🇦 [https://unsplash.com/@synkevych?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText] on Unsplash [https://unsplash.com/?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText] 在我们使用Git作为版本管理的时候,可以将一些经常使用的操作命令或者命令组合通过别名的方式添加git alias或者shell alias以此来缩短输入,减少git command help的时间,提高开发效率。 添加别名的方式主要分为两种: 1、git alias 以Mac OS为例,在当前用户目录下的.gitconfig文件中添加alias模块, [http] cookiefile = /Users/
4 min read
Kernel

Zircon内核与LK内核的关系

LK(Little Kernel)是一个为嵌入式应用设计的微系统内核,它为FreeRTOS、ThreadX这样的商业项目提供了一个不错的选择。这些系统仅提供有限的内存、有限的外设和任务集;Zircon运行在那些拥有快速处理器、不定大小内存、能够挂载任意外设的现代手机、PC等末端计算设备上。 Zircon内部构建在LK层之上;Zircon有进程的概念,LK则没有;Zircon的进程构建在LK的线程、内存结构之上。 更多的不同点: * Zircon有一类用户模式的支持,LK没有; * Zircon是一个对象句柄系统,LK没有这个概念; * Zircon有能力安全模型,在LK里所有代码都是被信任的。 随着时间的推移,为了满足新的需求、更好的适应上层系统,低层次的结构也可能会改变。 原文链接: https://fuchsia.googlesource.com/zircon/+/HEAD/docs/zx_and_lk.md 延伸: LK: https://github.com/littlekernel/lk/wiki/Introduction LK内核正在被使用的场景:
1 min read
VPN

Ubuntu 16.04 搭建IKEv2 VPN踩坑

详细步骤在这里: https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-16-04 但是,但是,这里有坑,第一步安装的依赖库,在Ubuntu16.04+自动解决依赖时少了一个。。。 安装完成后,Mac连接VPN会报如下错误: loading EAP_MSCHAPV2 method failed 大概意思是某个OPENSSL支持的加密算法插件没有加载,结果上面那个配置手册里面还正好是这个,最后的FIX是通过安装libcharon-standard-plugins来加载上就OK了。 参考: https://github.com/jawj/IKEv2-setup/issues/12 PS: Vultr邀请码: https://www.vultr.com/?ref=7258769
1 min read
Linux

Linux Shell (8)-中断信号、脚本启动

1. signal [https://www.nitrohsu.com/linux-shell-learning-2] Ctrl+C=SIGINT=kill  -9 Ctrl+Z=SIGTSTP=kill -18 1. trap 捕获信号 trap commands signals 捕获signals信号,执行commands trap commands EXIT 捕获正常退出,执行commands trap - signals 移除捕获signals 1. nohup nohup commands & 后台运行commands,输出到nohup.out 1. jobs 列出相关的作业列表 -l 列出进程PID和job编号 -p 列出作业PID -r 列出运行的作业
1 min read
Linux

Linux Shell (7)-输入输出-read、exec、lsof、mktemp、tee

1. read 读取用户输入 -n1 限定输入长度为1 -p 提示语 -t 等待输入的秒数 -s 将输入隐藏(密码输入等需求,这是个黑科技!!!) 若后面不加变量var的话,默认将输入存储在REPLY中 1. 标准文件描述符,一个shell最多可以打开9个文件描述符 0 STDIN        标准输入(默认键盘) 1 STDOUT    标准输出(默认终端显示器) 2 STDERR     标准错误 3) 错误输出到文件:ls -al aaa 2>error.txt 正常输出到文件:ls -al aaa 1>out.txt 所有输出到文件:ls -al aaa &>all.txt
2 min read
Linux

Linux Shell (6)-命令行选项、参数-shift、getopt、getopts

1. 定义 参数:命令行后面的数据值 选项:修改命令行为的单字符值,以-(破折号)开头 1. 命令行参数索引、长度: $0-程序或者脚本名称的完整路径,如果只需要获取名称可以使用"basename $0"; $1-第一个参数,$2-第二个参数,......,$9-第九个参数,${10}-第十个参数,此后的索引必须加{} 参数中不允许有空格,否则必须用引号; $#-命令行参数的个数,如果获取最后一个参数应该使用${!#}而不是${$#} $*-所有参数作为一个整体处理 $@-所有参数作为多个元素的集合处理 $**$**-当前脚本PID 1. shift 左移每一个参数,$0保持不变,  $1被丢弃 1. 命令行中参数选项以--(双破折号分隔),前为选项,后为参数 2. getopt 格式化选项、参数 getopt options optstring parameters optstring 标记选项是否需要参数,
1 min read
Linux

Linux Shell (5)-if、case、for、while、until

1. if 四种结构: if condition; then commands fi ---------------------- if condition then commands fi ---------------------- if condition then commands else commands fi ---------------------- if condition then commands elif then commands fi ---------------------- condition: test condition _通过test命令的退出状态来判断条件是否成立,换种写法为 [condition_** ]** ---------------number -eq 等于 -le 小于等于 -lt 小于 -ge 大于等于 -gt 大于 -ne
2 min read
Linux

Linux Shell (4)-vim

vim,号称史上最复杂的编辑器,当然也是黑的最没边的编辑器,哈哈~ 1. 移动定位 k上移一行,h左移一字符,j下移一行,l右移一行 **                k**↑ h← l→ **                j**↓ PageDown**Ctrl+f** 下移一屏幕 PageUp**Ctrl+b** 上移一屏幕 G 移动到最后一行 num G 移动到第num行 gg 移动到第一行 1. 编辑 x 删除当前光标字符 dd 删除当前光标行 dw 删除当前光标单词 d$ 删除当前光标至行末所有内容 J 删除光标行末断开线 A 追加内容到光标行末尾 num dd->p 剪切num行,然后粘贴 num y->
1 min read
Linux

Linux Shell (3)-环境变量、权限、用户、用户组

1. 环境变量 printenv*export***set**unset\ 系统全局: /etc/profile 用户相关(一般使用其中一个): $HOME/.bash_profile $HOME/.bash_login $HOME/.profile 1. alias alias ll=‘ls -al’ 1. /etc/passwd 用户信息(登录名、密码、UID、组ID、帐户描述、HOME目录、默认shell) 1. /etc/shadow 密码信息(登录名、加密密码、密码上次修改时距离19700101的天数、距离能够修改密码时的最少天数、距离必须修改密码时的最少天数、距离密码逾期并警告用户修改的天数、从密码逾期到被禁用的天数、帐户已禁用天数、保留字段) 1.
2 min read
Linux

Linux Shell (2)-进程、文件、磁盘空间、压缩

1. Process Signal 1    HUP     挂起2    INT       中断3    QUIT    停止运行9    KILL      强制终止11  SEGV    段违例15  TERM   条件终止17  STOP    强制终止,但未停止18  TSTP     停止或暂停,但继续在后台之行19  CONT   STOP或TSTP之后恢复执行 1. kill 建议执行顺序依次(TERM->INT\HUP->KILL) 1. killall 可以使用进程名称以及通配符来匹配,谨慎使用 1. mount 显示当前挂载的介质设备信息(设备位置、在虚拟目录的挂载点、文件系统类型、访问状态) -o ro                     只读挂载rw                    只写user                 允许普通用户挂载check=none   挂载不执行完整性检查loop                 挂载某个文件
2 min read
Linux

Linux Shell (1)-基础、文件、监控进程

1. 脚本文件 # 为注释行shell不处理,但第一行#!/bin/bash为特例,标示着采用何种shell运行 `` 将内部命令行的执行结果赋值 > 输出重定向,覆盖 >> 输出重定向,追加 < 输入重定向 << 指定一个结束符,并以此结束符结束输入 | 管道符 exit 退出状态 0 命令完成 1 未知错误 127 无法找到命令 130 Ctrl+C终止 1. shell 提示符由变量PS1、PS2控制,通过格式符可以进行定制:PS1="\h\t\w$" Ubuntu中的sh默认指向为dash而非bash,这个需要注意。 1. ls -R 文件以及文件夹缩略信息 -l 文件类型+权限+硬链接数+所属用户+所属组+大小+修改时间+
3 min read
HTTP

proxy方式连接httpd与tomcat

这几天一直在微信公众平台的开发,由于服务器验证现在仅支持80端口,本博客又架设在Httpd服务器,80端口占用无法再分配给Tomcat使用,所以就开始考虑Tomcat与Httpd的连接问题。 目前主要有三种方式,1、JK;2、http_proxy;3、ajp_proxy JK方式是通过mod_jk来完成服务器端代码解析的一种方式,也是当前主流的连接方式,鉴于mod_jk已经停止开发,而且配置较为繁琐,遂没有使用它。 http_proxy是通过端口映射将某虚拟主机域下的部分网页解析交给监听8080端口的tomcat来处理,配置起来简单,方便使用,故采用这种方式。 请确保proxy、http_proxy的开启,键入以下命令确认 a2enmod proxy a2enmod proxy_http service apache2 reload 在site-available中添加额外的虚拟主机文件mysite.com,内容如下 ServerAdmin XXX@XXXX.com ServerName xxxxx.example.
1 min read
Linux

漫谈linux文件IO

在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO。本篇文件打算详细全面,深入浅出。剖析文件IO的细节。从多个角度探索如何提高IO性能。本文尽量用通俗易懂的视角去阐述。不copy内核代码。 阐述之前,要先有个大视角,让我们站在万米高空,鸟瞰我们的文件IO,它们设计是分层的,分层有2个好处,一是架构清晰,二是解耦。让我们看一下下面这张图。 1. 穿越各层写文件方式程序的最终目的是要把数据写到磁盘上, 但是系统从通用性和性能角度,尽量提供一个折中的方案来保证这些。让我们来看一个最常用的写文件典型example,也是路径最长的IO。{char *buf = malloc(MAX_BUF_SIZE);strncpy(buf, src, , MAX_BUF_SIZE);fwrite(buf, MAX_BUF_SIZE, 1, fp);fclose(
10 min read