主OS==>宿主机 Host Os,虚拟机OS==>客户机 Guest Os
一些虚拟机:VMWare / KVM / VirtualPC / XEN / OpenVZ
虚拟机作用:开发,测试不同配置/环境
使用VMWare安装Linux虚拟机的过程:创建虚拟机,加载ISO,命名虚拟机,指定容量(指的是最大容量)。
1CPU/2Kernel 和 2CPU/1Kernel 的区别:同CPU的内核之间有核间总线相连,信息交换速度快,不同CPU之间信息交换要经过内存,导致速度降低。
网络:
LVM 逻辑卷管理。逻辑卷和物理卷。
根分区,交换分区(休眠用),挂载点(磁盘被挂载到文件系统的一个分支上)
口令和密码的区别:口令password即一般的登录“密码”,密码指明文和密文转换的密钥。
二进制包 rpm(redHat) deb(debian)
源码包 tar tar.gz zip rar
rpm包安装:
rpm -ivh xxx.rpm-i 安装;-U 升级;-e 移除;-v 显示详细信息;-h 显示安装进度
查看已经安装的shell:
xxxxxxxxxxcat /etc/shellsrpm包查询:
xxxxxxxxxxrpm -q zshrpm -qa zsh 全局查找which查询安装路径:
xxxxxxxxxxwhich ifconfig ==> /usr/sbin/ifconfig作业 CentOS7安装软件的方法
rpm -ivh xxx.rpm 安装。将会用到 wget arch rpm。具体步骤如下:
1)找到网络上的 rpm 资源,用 wget 工具下载。下载前先确定机器架构,使用命令 arch 确定是 MIPS,X64还是 ARM 架构,从而确定应当下载的 rpm 文件。
xxxxxxxxxxarchx86_64xxxxxxxxxxwget -O xxx2.rpm https://xxx1.rpm2)使用 rpm 安装。
xxxxxxxxxxrpm -ivh xxx.rpm3)也可以跳过wget步骤,用url作为目标进行安装。若发现缺失依赖,则需要逐个安装或改用yum安装。
xxxxxxxxxxrpm -ivh https://xxx.rpm
yum install xxx 安装,使用的是软件源,安装相对来说比较便捷。配置方法如下:
假设现在要更换base repo:
1)yum 的配置分为 main 和 repo两部分,main部分由 /etc/yum.conf 决定。使用vim编辑配置。
2)软件源存放在 /etc/yum.repos.d 目录下,软件源命名时要加.repo。发现系统自带CentOSbase.repo和epel.repo。用vim打开repo,发现是类似ini配置文件的格式:
xxxxxxxxxx[base]name=CentOS-$releaseverenabled=1failovermethod=prioritybaseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/gpgcheck=1gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-73)先把repo重命名备份。然后使用wget从url下载对应软件源,将其下载到上文所述的目录下,并重新命名为 xxx.repo。
xxxxxxxxxxwget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 4)yum 清除并重新生成缓存
xxxxxxxxxxyum clean allyum makecache5)yum 的两种安装方式,分别安装单个软件及其依赖,软件包和它们的依赖。
xxxxxxxxxxyum install xxxyum groupinstall "xxx"
下载源码包,编译后安装。用到 wget, tar, make。具体步骤如下:
1)切换到存放下载文件的目录下,用wget下载tar.gz包。
xxxxxxxxxxcd /usr/local/srcwget -O xxx2.tar.gz https://xxx1.tar.gz2)用 tar 解包,进入源码目录后,用 ./configure 检查配置和环境,生成 makefile 文件后,依次运行 make,make install 完成安装。这种方法安装同样可能出现依赖缺失的问题。
xxxxxxxxxxtar -xzvf xxx2.tar.gzcd xxx2./configuremakemake install七层OSI参考模型:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
Physical, DataLink, Network, Transport, Session, Representaion, Application
五层模型:物理层,数据链路层,网络层,传输层,应用层。
TCP三次握手:A--syn-->B,B--syn ack-->A,A--ack-->B
TCP四次挥手:A--fin-->B,B-->ack-->A,B--fin ack-->A,A--ack-->B
各种地址:MAC地址,IP地址,port,domain
IP编制的发展:
A,B,C,D,E类网络地址。分为 固定网络位 + 主机位。
类别 范围 0 8 16 24 32
A 0-127 0-----------|
B 128-191 10----------------------------|
C 192-223 110--------------------------------------------|
D 224-239 1110----------------------------------------------------------|
E 240-255 1111----------------------------------------------------------|
子网划分
无分类编制方法
系统操作
xxxxxxxxxxreboot # 重启poweroff # 断电
文件查看
xxxxxxxxxxcat file1 # 查看file1所有内容,-n 打印行号cat file1 file2 # file1和file2连在一起并查看cat file1 file2 > file 3 # file1和file2连在一起并保存在file3,此时再查看file3,获得的是file1+file2的所有内容more # 分页显示,回车下一行,空格下一页less # 分页显示,同上,可以往回翻,按b上一页zless # 分页显示压缩文本文件nl # 比cat -n 更专业的打印行号命令,-b a全部行标号(和cat -n一样),-b t仅非空行标号head -n 20 [file] # 查看头部20行,默认10行tail -n 20 [file] # 查看尾部20行,默认10行,加 -f 可以不断读取文件,用于动态日志的查看file [file] # 查看文件类型cut [file] -d [str] -f [slice]# 文件每一行都按分隔符(delimiter)str分割,打印分割后的每行的slice定义的字段cut /etc/passwd -c [slice]# slice:# 1.-num表示前num个字符# 2.num表示第num个字符# 3.num-表示num个字符之后的字符# 4.num-num 表示第num1到第num2之间的字符# 5.num1, num2, num3 分别打印第xxx个字符计数命令wc
xxxxxxxxxxwc [file] # 显示所有统计信息wc -l [file] # 行数wc -w [file] # 单词数wc -c [file] # 字节数# 案例ls -l | wc -l # 统计目录文件数排序命令sort
xxxxxxxxxx# 输出文件内容的排序结果,默认字典排序,-r反向排序,-t指定分隔符,-k表示分割后按第n个字段排序sort [file]# 案例cat /etc/passwd | sort -t ':' -k 3 -r # 按照":"分割后的第三列进行字典反向排序sort /etc/passwd -t ':' -k 3 -r # 按照":"分割后的第三列进行字典反向排序比较命令
xxxxxxxxxxdiff [file1] [file2] # 逐行比较两个文件的不同cmp [file1] [file2] # 遇到第一次不同就停止comm [file1] [file2] # 比较两个排序的文件
帮助命令
xtype [command] # 查看命令是系统自带的还是外部命令help [command] # 得到内建命令的帮助,例如help cd[command] --help # 得到外部命令的帮助man [command] # 在帮助手册中查找该指令,LS(n)表示当前查看的指令位于手册第几章节,一共9个章节
目录查看之ls
xxxxxxxxxx-l 完整显示-a 不忽略隐藏文件-i 显示node结点
软硬连接的区别
xxxxxxxxxxvim file1# This is file1# esc + : wqln file1 filePtr # 硬链接ls -i file1ls -i filePtr# 两者结果是一致的,因为filePtr指向file1,两者node结点一致rm file1cat filePtr# >> This is file 1ln -s filePtr fileSoft # 软链接ls -i filePtrls -i fileSoft# 两者结果不一样,因为建立的是软链接rm filePtrcat fileSoft# >>No such file or directory
文件操作
xxxxxxxxxxcp [fromRegExp] [toRegExp] # 复制操作 -n 不要覆盖同名,-f 强制覆盖,-i 覆盖前询问,-r递归复制rm [file] # 删除文件,提示yes/norm -rf [dir] # 强制删除且递归删除,不提示yes/nomv [file1] [file2] # 移动文件1到位置2,可以作为重命名pwd # 查看当前所在目录,print work directorymkdir [dirPath] # 创建空文件夹,-p参数时,可以递归创建,不能创建与已有文件同名的文件夹rmdir [emptyDir] # 删除空文件夹touch [fileName] # 不加参数时创建新文件
查找操作
xxxxxxxxxx##############################################-atime 30 # 30天以上未访问-size +512M # 大小大于 512MegaBytes-ok command ; # 执行指令 冒号前必须有空格 执行前有y/n提示find ~/Bill ~/Denis -size +1000B -atime +30 -ok rm {} \; # 找到 ~/Bill ~/Denis两个文件夹中,大小大于1000B,30天以上没有访问的文件,经用户同意后执行删除##############################################grep [regExp] [file] # 查找file中的符合regExp的行,并显示ls -l | grep [regExp] [file] # 查找列表中的信息,符合grep条件的输出#例如:grep "abc" file1 # 查找文件file1的包含abc的行ls -l | grep "^-r.x" # 查找当前路径文件显示列表中,开头是-dr.x的行,即普通文件
正则表达式
xxxxxxxxxx. 任意字符* 表示多个? 表示一个[abc] 任意一个其中的字符[a-z] 任意一个unicode在a到z的字符
命令执行顺序控制与管道
什么是管道:前一个命令的输出作为下一个命令的输入,用 | 搭建管道。
commandA;commandB;commandC,将ABC命令顺序执行。
commandA && commandB,逻辑与,短路性质,如果前面的命令返回0,后面的命令才执行。(0表示正常)
commandA || commandB,逻辑或,短路性质,如果前面的命令返回非0,后面的命令才执行。(!0表示异常)
commandA && commandB || commandC,可以理解为?:三目运算符。
$? 环境变量表示上一次执行命令的结果。
unix设计哲学:every thing is a file
Linux启动时首先挂载根文件系统,然后在挂载点上自动或挂载其他文件系统。
根文件系统rootfs的一些常用文件夹:
/proc 系统信息
/home 用户目录
/root root专用目录
/var 共享信息
文件权限:-rwx r-x r-x,分别是属主权限,属组权限,他人权限。r表示可以读,w表示可以写,x表示可以执行,-表示不具有某权限。
权限管理
xxxxxxxxxxchmod u+rw file1 # 属主权限增加读写权限chmod g-rx file2 # 属组权限减少读、执行权限chmod og+w file3 # 属组和他人增加写权限chmod 610 file4 # r=4/w=2/x=1,赋权结果: rw- --x ---
压缩和打包
xxxxxxxxxx## 压缩gzip file1 file2 file3 # 压缩三个文件,形成三个gzip文件gzip -r hello # 目录下递归压缩,每个文件都被压缩成 gz,不是把目录整体压缩了!gzip -d file1.gz file2.gz # 解压缩文件## 打包 -v = verbose, -f = ARCHIEVE, tar -zcvf dir1.tar dir1 # -c,创建压缩包tar -zxvf dir1.tar # -x,解开压缩包
存储
xxxxxxxxxxdu #disk spacedf #disk usage进程
xxxxxxxxxxps #查看进程ps aux #查看所有进程ps aux | grep xx #查看xx所在的进程kill pid #杀死进程pidgedit & #启动gedit,后台运行,不阻塞命令行
xxxxxxxxxx#############################################跳转#############################################hjkl #方向键iI/aA #插入模式(当前光标/行首/光标后/行末)oO #在后/前插入新行e #跳到行尾3k #向上移动3行wb #向后/前跳单词nG/gg/G #移到第n行/第一行/最后一行ctrl+o #跳转到前一次光标位置0/^ $ #跳到行头/行尾F/f<Alpha> #向前/后搜索第一个出现的字母Alpha并跳转到此位置>> #缩进<< #反向缩进#############################################删除操作#############################################xX #删光标字符/光标前一个字符dd #剪切(删)行d^/d$(D) #删除到行首/行尾dw #删一个单词dG/d1G #删除到EOF/到开头d3w #delete 3 words#############################################复制粘贴操作#############################################yy #复制一行y2w/y1G/y$/y^ #都是不同的复制p/P #粘贴在光标后/前#############################################其他实用操作#############################################ctrl+r #redou3 #undo 3 times (default 1)U #undo all~ #光标处大小写反转r<Alp> #光标字符替换为AlpR #连续替换模式cw/b #删除一个向后/前搜索到的单词并进入插入模式cc #删除一行并进入插入模式C #删除到行尾 进入插入模式/<string> #快速查找string, ?<string>向上查找。查找状态按n/N找下一个/上一个\* \# #查找游标处的单词,分别是向上向下查找#############################################底线命令模式#############################################:set shiftwidth=8 #设置缩进:set number/nu #显示行号:set nonumber/nu #取消行号:set cursorline #设置行线:set nocursorline #取消行线:colorscheme [skin] #设置皮肤:ce/ri/le #设置行center/right/left(居中/左/右):q #退出:w [filename] #保存/另存为:x/wq #保存退出#############################################高级技巧#############################################1.vim [file1] [file2] 同时编辑两个文件,命令行 :n /:N 向前/后切换2.v 进入可视模式,用光标选取矩形区域执行操作(d/y等) V是行可视模式,只能一行一行全选3.视窗操作:sp/vsp 1.txt 打开一个水平/垂直视窗编辑1.txt4.vim -x file1 创建加密文档5.
How to execute a shell script?
xxxxxxxxxxchmod u+x hello;bash hello;./hellosh hello;点命令/非点命令的区别:点命令同一进程运行,非点命令不同进程运行。
xxxxxxxxxx# mycdecho helloworlda=$PATHPATH=a:$PATHmycdhelloworldPATH=amycdCommandNotFoundecho 参数传递与参数变量:
xxxxxxxxxx#parameterecho $1echo $2echo $3...echo $10echo ${11}# bashecho 1 2 3 4 5 6 7 8 9 10 11 12123...100($10)10(${11})
xxxxxxxxxx# 有空格expr 1 + 2expr 1 \* 2expr 1 "*" 2# 没空格let a=$a+1let c=$a*$b# 双括号形式((a=a+1))b = $((a+1))# bcecho "5*6" | wcecho "obase=2;1000" | bcecho "ibase=2;1010" | bc# Comparison= > < >= <= n z # Compare Stringeq ne lt le gt ge # Compare Integer-f(file) -r -w -x -d(directory) # Test File/Directory-a(and) -o(or) # Concat state exprecho test 5 -eq 5echo $? ==> 0echo test 5 -eq 6echo $? ==> 1b = 01test -z "$z"echo $? ==> 0
xxxxxxxxxxread if test 5 -eq $variableficase $variable in1) echo hello;;2) echo bye;;esacxxxxxxxxxx$? # Status of the last command. 0 - succ, 1 - fail, 2 - error$# # Parameter counts that is passed to the script$* # Show all parameters: a b c d$@ # Show all parameters with double quote: "a" "b" "c" "d"$$ # PID of a scriptxxxxxxxxxxfor i in 1 2 3 4 5do echo $idonefor i in *do echo $idonexxxxxxxxxxcount=10while [ $count -ge 0 ]do echo $count count = `expr $count - 1`donexxxxxxxxxxcount=10until [ $count -ge 0 ]do echo $count count = `expr $count - 1`donexxxxxxxxxxa=123;( a=321; )echo $a # 123{ a=321; }echo $a # 321xxxxxxxxxx# About redirectecho 'a' > a.txt # Overwriteecho 'a' >> a.txt # Appendecho 'a' &> a.txt # Error Stream to a.txtxxxxxxxxxx# About functionfunc1(){ echo 'Hello';}. ./func2 # Load functions from another file func2func2 1 2 r # Use function and pass valuexxxxxxxxxxmyprog : foo.o bar.o # Target depends on foo.o and bar.o gcc foo.o bar.o -o myprog # If foo.o and bar.o changed, execute this commandfoo.o : foo.c foo.o bar.h gcc -c foo.c -o foo.o如何根据上图编写makefile?
xxxxxxxxxxdiv.o : div.c gcc -c div.cmult.o : mutl.c gcc -c mult.cadd.o : add.c href.h gcc -c add.csub.o : sub.o href.h gcc -c sub.cprog : div.o mult.o add.o sub.o main.c gcc -o prog div.o mult.o add.o sub.o main.c默认规则:xxx.o 默认依赖 xxx.c ,因此改进:
xxxxxxxxxxprog : div.o mult.o add.o sub.o main.c gcc -o prog div.o mult.o add.o sub.o main.cadd.o sub.o : href.h # 2 --> 1clean: # Execute when make clean rm mult.o add.o sub.o add.o main.oxxxxxxxxxx# Enter GDBgcc -g hello.cgdb a.outr [params] # Start program with paramsshow args # Show args passed to rl 43 # Show code around line 43# Set breakpointb 2 # Set breakpoint at line 2b hello # Set breakpoint at function name hellob * x80400800 # Set breakpoint at certain addressdisable/enable # Enable/Disable one breakpontwatchdisp tmp # Show variable tmp when debugger pausesundisplay # Discard all displ variablep $eax # Show register $eaxp /x ($ebp + 8) # Show register address + 8 in hexadecimalp * x80400800 # Show memory at certain address. Show one byte,p *(int*)0xxx # Get value of a integer. Provide 1st address and get the rest.s # Step overn # Nextbt # Backtraceset X = 12 # Modify variable when debuggingdefine marcoName # Define a macroinfo b # Show all breakpointsd 2 # Delete breakpoint 2版本控制,分布式 git,集中式 svn。
xxxxxxxxxx# Core commandgit init # Init a git repogit add # Add changes to tmpgit rm # Remove changes to tmpgit commit # Commit to repogit push # Commit to remote repogit clone # Clone from remote repo (To empty local repo)git pull # Pull from remote repo (To already existing local repo)# Revert/Info commandgit status # Show git statusgit reflog # Log ALL git history regardless of current versiongit log --pretty=oneline # Log git history in one line, BEFORE current version.git reset --hard [gitVersion] # Revert to previous version.git reset --hard|mixed|softxxxxxxxxxx+----------+----------+----------+----------+| Method | Working | Modified | Commited |+----------+----------+----------+----------+| Soft | v1.1 | v1.1 | v1.0 |+----------+----------+----------+----------+| Mixed | v1.1 | v1.0 | v1.0 |+----------+----------+----------+----------+| Hard | v1.0 | v1.0 | v1.0 |+----------+----------+----------+----------+xxxxxxxxxx# Branch Opr.git branch -v # Check branch statusgit branch [branchName] # Create a new branchgit checkout [branchName] # Go to certain branch# Remote Commandgit remote add [Alias] [Url] # Give url an aliasgit remote -v # View remote infogit push [Alias|Url] [Branch] # Push local repo to [Branch] on [Alias|Url]
xxxxxxxxxxsystemctl start|restart|enable [Service]
作业 了解 /proc 中的内容并分析其中某个文件
进入 /proc 目录:

/proc 以文件系统的方式为访问系统内核数据的操作提供接口。
包含的内容:CPU信息、安装的加密方式、RAM信息、磁盘状况、网络信息、支持的文件系统、驱动设备信息、物理设备映射等,不一一列举了,可以参考文章:https://blog.csdn.net/zdwzzu2006/article/details/7747977,里面对每个文件的作用都有简略的介绍。
查看其中信息的方法:
以 cpuinfo 文件为例:

解读参考文章 https://blog.csdn.net/lgstudyvc/article/details/7889364
vendor_id :CPU制造商
cpu family :CPU产品系列代号
model :CPU属于其系列中的哪一代的代号
model name:CPU属于的名字及其编号、标称主频,这里是2.5GHZ
stepping :CPU属于制作更新版本
cpu MHz :CPU的实际使用主频
cache size :CPU二级缓存大小
physical id :单个CPU的标号
siblings :单个CPU逻辑核数
core id :当前物理核在其所处CPU中的编号,这个编号不一定连续
cpu cores :该逻辑核所处CPU的物理核数
apicid :用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续
fpu :是否具有浮点运算单元(Floating Point Unit)
fpu_exception :是否支持浮点计算异常
cpuid level :执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容
wp :表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection)
flags :当前CPU支持的功能,例如fpu表示有浮点运算器,acc表示自动时钟控制等。
bogomips :在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second)
clflush size :每次刷新缓存的大小单位
cache_alignment :缓存地址对齐单位
address sizes :可访问地址空间位数
power management :对能源管理的支持
作业 安装vim插件
以安装YouCompeleteMe为例。
首先安装 vim 插件管理器,这样安装插件会比较简单,选择 vim-plug 进行安装。
在home目录下,新建 .vim 文件夹,在里面新建 autoload 文件夹。然后执行以下命令:
xxxxxxxxxxcd autoloadwget https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim即可安装好 plug.vim 插件。
配置 .vimrc 文件。新建.vimrc文件,并写入以下内容:
xxxxxxxxxxcall plug#begin('~/.vim/plugged')Plug 'Valloric/YouCompleteMe'call plug#end()进入vim,输入 :PlugInstall ,安装过程自动进行。
安装完毕,输入:PlugStatus,显示YouCompleteMe:OK。
退出重新进入vim,发现虽然vim版本足够高,但仍报错版本不能达标,YCM不能启动。根据网上的解决方案,卸载vim,并通过 make 的方式安装了8.0+的 vim。
再次进入vim,下方提示 ycmd server SHUT DOWN,经过搜索,发现是没有正确执行安装过程。进入 '~/.vim/plugged/YouCompeteMe',执行 ./install.py 。安装完毕后,打开一个c文件,此时问题已经消失。
最后顺利显示了提示。
