linux基础知识

1:基本知识

微内核:是一种提供必要服务的操作系统内核,大部分内核都作为单独的进程在特权模式先运行,他们通过消息传递进行通讯
单内核:单内核是个很大的进程,他的内部又悲愤为若干个模块,是个单独的二进制但印象,其模块间的通讯是通过直接调用其他模块中的函数实现的,而不是消息传递。
这里写图片描述

linux分几种应用程序级别
Ring 0 特权模式 一般是系统底层运行级别
Ring3 应用程序级别 一般的级别
有时候应用进程为了调用系统底层的模块,可能会在用户空间和内核空间之间进行来回的切换,这是很耗时间的,平时工作中应注意避免

2:linux中的库

linux中库分为两种,一种是静态库,另一种是动态库
   通常情况下,对函数库的连接时放在编译使其完成的,所有的相关对象文件与牵扯到的函数库被连接合成一个可执行的文件,程序在运行的时候,与函数库再无瓜葛,因为所有需要的函数已拷贝至自己相应的目录下,所以这些函数库被称为静态库。由此可以看出,如果每个应用函数都加载一份这样的相同的函数库到自己的应用文件目录中,则在程序运行时,内存中会有大量重复的库文件,耗CPU,耗内存

动态库,则是在程序运行时在函数运行时再载入(类似于懒加载机制吧)

两者区别:
1:静态库的使用需要
1:包含一个对应的头文件告知lib文件里面的具体内容
2:设置lib文件允许编译器去查找已经编译好的二进制代码
2:动态库的使用
1:程序使用时需要动态的加载动态库,对动态库有依赖性,需要手动的加载动态库

动态库的优点:
    1:可是实现进程间的资源共享
    当某个程序需要调用某个动态库中的函数时,操作系统会首先检查内存中是否已经存在(可能是之前运行的程序要需要这个函数库,会加载函数库到内存中),如意存在就共享同一个函数库,这样以来节省了额外的开销,尽管共享同一份资源,但是进程的数据还是属于各个进程私有
  2:将一些程序的升级变得简单,用户只需升级动态库=连接库,而无须重新编译链接其他原有的代码,就可以完成整个程序的升级,window就是这样的例子
在linux中  后缀为 .so代表共享对象 
window中则为.dll 例如orcal中的oci.dll

3:linux的基本原则

  • 一切皆文件
  • 配置文件保存为纯文本格式(如果需要对linux进程修改,使用命令只是进行了临时的修改,如果想要进行长久的使用,需要大配置文件中修改)
  • 由单一的小程序组成,组合的小程序却可以完成复杂任务
  • 尽量避免捕获用户接口

4:linux的系统目录

-  /boot:系统启动相关文件,例如内核,initrd
-  /dev:设备文件
    -  设备文件:
        - 块设备:随机访问,数据块
        -  设备文件:线性访问,按字符为单位
        -  设备号:分为主设备号和次设备号
- /etc:配置文件 一般系统的配置文件都在这个目录中
-  /home:用户 的家目录,每一个普通用户通常默认的家目录是/home/username; 用户在自己的家目录下面拥有该目录的全部权限
-  /root:管理员的家目录
-  /lib :库文件
    - .a 静态库
    - .dll, .so【share Object】 动态库
-   /media :挂在点目录,移动设备,我们可以挂载硬盘,光盘到这个目录下面
-  /mnt 挂载点目录,额外的临时文件系统
-   /opt 可选目录,第三方程序的安装目录
-   /proc :伪文件系统,内核映射文件
-   /tmp 临时文件 ,/var/tmp
-   /bin 可执行的文件纸文件,用户命令
-  /sbin 系统管理命令,只用root用户可以执行 ,例如 reboot命令

5:linux的命令分为内置命令和外部命令

1:内置命令 shell内部自己提供的 常驻内存 
    例如我们常见的cd pwd等命令就是内置命令,可以使用【type 命令】 进行查看,例如 type cat 结果为“cd is a shell builtin”表示shell内建的命令 

2:外部命令 shell自己内部不加载
    例如 man命令 type man 

6:linux的文件类型

  • d 目录文件
  • c 块设备文件
  • p 命令管道文件
  • l 链接文件
    • 普通文件
  • s 套接字文件

  • 使用【ls -l 】命令就可以 详细的列出当前目录下的所有文件
 [root@node01 /]# ls -l ./
total 102
dr-xr-xr-x.   2 root  root   4096 Jul 21 03:42 bin
dr-xr-xr-x.   5 root  root   1024 Jul 21 03:44 boot
drwxr-xr-x.   4 nginx nginx  4096 Jul 22 15:56 data
...
...

以上内容按空格大概可以分为八组

  • 第一组:代表了文件的类型以及权限
    例如 d 代表了该文件是目录类型的文件
    后面的共有9位 每三位一个 分别代表宿主的权限,宿组的权限,一起其他用户的权限,例如:r-x|r-x|r-x 代表了宿主具有可读可执行的权限,素组可读可执行,其他用户也具有可读可执行的权限
  • 第二组代表了文件硬链接次数
  • 第三组,四组代表宿主,宿组是谁例如 【dr-xr-xr-x. 2 root root 4096 Jul 21 03:42 bin】,则代表了宿主是root宿组是root,而【drwxr-xr-x. 4 nginx nginx 4096 Jul 22 15:56 data】则代表了宿主宿组都是nginx
  • 第五组代表了文件大小,以字节为单位
  • 六七八组则是最后一次修改的时间
  • 九组 代表了文件名

6:linux的系统时间

linux的系统时间是一个容易忽略但却非常重要的知识点
linux的系统时间分为硬件时间和系统时间
#:硬件时间是指主板上的时钟设备,也就是通常可以在BIOS中设置的时钟,这个时间有 
   主板上的电池供电维持
#:系统时间是指操作系统中的时钟,所有linux相关指令与函数都是读取系统时钟的设定
linux中有几个命令
【date】:时间管理  可以获得当前的系统时间也可以设置系统时间

通过该命令设置系统时间 【date -s “2016-07-22-21:24:00”】
硬件时间
hwclock ,clock[软连接实际指向hwclock命令]
【hwclock】有两个比较总要的命令参数
【-s】 – hctosys 参考硬件时间设置系统时间
【-w】 –systohc 参考系统时间设置硬件时间
例如:
[root@node01 /]# hwclock -s
但是在生产环境中我们一般不这样设置,一般企业中会有一台中心服务器连接带外网来更新时间,更新资源,其他的服务器通过内网连接到这台中心服务器来更新自己的系统时间

6.1配置ntp服务

ntp服务:网络时间协议NTP(Network Time Protocol)是用于互联网中时间同步的标准互联网协议。NTP的用途是把计算机的时间同步到某些时间标准。目前采用的时间标准是世界协调时UTC(Universal Time Coordinat
配置自己的ntp服务需要如下步骤:
1:安装ntpdate服务
【yum install ntpdate】安装完成后需要查看是否安转成功 ,如下图则代表安装成功

2:修改 /etc/ntp.conf 文件【不是必须需要修改的】 在文件的25行可以通过 vim +25 /etc/ntp.conf 直接打开文件

 20 # Use public servers from the pool.ntp.org project.
 21 # Please consider joining the pool (http://www.pool.ntp.org/join.html).
 22 #server 0.centos.pool.ntp.org iburst
 23 #server 1.centos.pool.ntp.org iburst
 24 #server 2.centos.pool.ntp.org iburst
 25 #server 3.centos.pool.ntp.org iburst
 26 server 0.uk.pool.ntp.org

从22 - 25 行代表的是centos官网自己提供的ntp服务器,
这里我把原来文件自己提供的ntp服务地址注释了,添加了一个新的ntp服务器的地址,如果在生产环境中,公司内部配置了ntp服务器,那么这个地址就是配置了ntp服务的那台主机地址
3:chkconfig ntpd on 设置ntpd服务开机自启动,这样ntpd服务就会每隔一段时间就去更新一下自己的时间,始终保持准确的时间
4:由于是第一次设置ntpd服务,虽然设置了开机自启动,但是需要重新启动主机才能自启动服务,为了不重启主机,在这里手动的开启一下服务,service ntpd start

进入/var/run/ 目录下使用ls命令,你会看到有一个叫做ntpd.pid文件,就代表你的ntpd服务正常启动了

几个常用的命令
chkconfig –list | grep ntp 查看ntp服务是否安装起来
chkconfig ntpd on 设置ntp服务开机自启动
service ntpd [start | restart] 手动启动ntpd服务

ntpd 和ntpdate的区别
ntpd:服务
ntpdate:命令,我们可以使用ntpdate命令达到以上同时的效果例如执行
[ntpdate 0.uk.pool.ntp.org] 就会修改本地的时间和远程互联网上的ntp服务器上的时间同步(前提是能连接到外网去)
ntpdate坏处:如果和实际时间差别较大,ntpdate会直接跨过去,而ntpd有缩短或缓略增长策略(算法) 会缓慢增加

暂时没写全,仅仅是一些零碎的内容,以后会慢慢补全

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
1. 概述 嵌入式系统由硬件环境、嵌入式操作系统和应用程序组成,硬件环境是操作系统和应用程序运行的硬件平台,它随应用的不同而有不同的要求。硬件平台的多样性是嵌入式系统的主要特点,如何使嵌入式操作系统在不同的硬件平台上有效地运行,是嵌入式系统开发中需要解决的关键问题。解决的方法是在硬件平台和操作系统之间提供硬件相关层来屏蔽这些硬件的差异,给操作系统提供统一的运行环境,这种硬件相关层就是嵌入式系统中的板级支持包BSP(Board Support Package,简称BSP)。 2. BSP及其作用 BSP是嵌
一.什么是装箱?什么是拆箱? 在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料。在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:   1 Integer i = new   Integer( 10 ); 而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了:   1 Integer i = 10 ;

Redis与Java - 数据结构 - 2016-07-24 14:07:41

Redis与Java 标签 : Java与NoSQL Redis( REmote DIctionary Server ) is an open source (BSD licensed), in-memory data structure store, used as database , cache and message broker . It supports data structures such as strings , hashes , lists , sets , sorted sets
0x00 实验背景 Server:选用腾讯云的云主机  Ubuntu Server 14.04.1 LTS 64位 Client-1:Acer笔记本 Win7 x64系统 Client-2:安卓机小米4  Android 6.0系统(MIUI8)   0x01  OpenVPN的背景知识 **** **** 以下内容摘自维基百科**** **** OpenVPN是一个用于创建虚拟专用网络加密通道的软件包,最早由James Yonan编写。OpenVPN允许创建的VPN使用公开密钥、电子证书、或者用户名/密

逐步深入TCP/IP协议栈 - 2016-07-24 14:07:36

一、关于应用层用户数据的历程,见下图:                                                                             TCP/IP数据包的封装 过程: 应用层将数据通过协议栈逐层向下传递,其下的每层接到来自上层的数据时,根据每层的协议都要在其数据 的前端添加首部信息进行封装。不同的协议层对数据包有不同 的称谓,在传输层叫做数据段,在网络层叫做数据报, 在链路层叫做数据帧。在经过链路层时,数据已经封装成帧并递交给物理层的传输介质上,到

Java事务--JTA原理 - 2016-07-23 19:07:54

        上一篇文章介绍了JDBC事务,JDBC可以处理单数据源的事务,满足大部分事务处理的需求,但是JDBC事务不能解决多数据源和分布式事务问题,Java平台给我们提供了解决方案--JTA。本文将探讨JTA的一些细节。          一 分布式事务          通常把一个数据库内部的事务处理,如对多个表的操作,作为本地事务看待。数据库和JDBC的事务处理对象是本地事务,而分布式事务处理的对象是全局事务。          所谓全局事务,是指分布式事务处理环境中,多个数据库可能需要共同完成
LINUX下SVN安装,配置,web目录同步 注: 各服务器运行环境可能有所不同,操作过程中可能出现其他问题,自行查阅资料解决 SVN的具体使用方法很多,本文档只是使用了SVN最简单的用法,感兴趣的同学可以查阅相关资料。 一、 安装subversion 首先输入rpm -qa | grep subversion 查看SVN是否已经安装过 如果输出类似如下结果,则说明已经安装:subversion-1.6.11-7.el6.x86_64 执行 yum -y install subversion 安装SVN
一、目录结构 首先是目录结构如图: 二、pom.xml文件 project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" modelVersion4.0.0/modelVe

Linux内核之进程管理 - 2016-07-23 19:07:13

进程: 进程就是处于执行期的程序以及它包含的资源总和。 线程是进程中的活动对象,每个线程拥有一个独立的程序计数器、进程栈和一组进程寄存器。 内核调度的是线程,而不是进程。 进程描述符: 内核的进程描述符为 task_struct 结构体,定义在linux/sched.h,进程描述符包含了一个进程的所有信息。包括:进程标识符、进程当前状态、栈地址空间、内存地址空间、文件系统、打开的文件、信号量等。 内核把进程的列表存放在叫做 任务列表(task list) 的双向循环链表,链表中每一项都是类型为task_s

SSH权限管理控制到按钮 - 2016-07-23 19:07:11

数据库设计 我的设计如下: 用户:fu_admin 角色:sys_role 权限:sys_purview 用户-角色:sys_user_role 角色-权限:sys_role_purview 标准的权限管理系统设计为以上5张表。 注:用户、用户-角色我就不做说明了,这两个是很简单的两块,用户的crud,以及为用户分配角色(多对多的关系)稍微琢磨一下就清楚了, 下面都是针对为角色分配权限的实现 后台实现 展示层采用ztree树 roleList.jsp !DOCTYPE html PUBLIC "-//W3