首页 > 代码库 > 学习笔记之Linux发行版那点事

学习笔记之Linux发行版那点事

如果你是被标题骗进来第话,那么请受小弟一拜,给各位大神陪个不是,这就是典型第标题党作风。

天下武功出少林,这句话应用在Linux操作系统上也是如此,众多版本发行的基本原理基本一致,都是在互联网上下载Linux内核源码和vi,bash等工具源码在较为通用的计算机平台上进行编译,编译过程通过调整内核及众多应用程序的相关参数来制成可运行的二进制程序,来制作成镜像或者光盘的形式来向用户提供便携式的发行版。

一、发行商

 通过http://futurist.se/gldt/这个网站的linux时间线观察可以知道目前主流的三大Linux发行商是:slackware、debian和Readhat

 1、slackware其中最著名的分支就是S.u.S.E

 2、基于debian发行的最著名的分支就是目前很流行的Ubuntu

 3、redhat二次发行版是时下分布较为广泛的系统,有商业运作的Red Hat Enterprise也有很活跃的社区版Fedora(fedora更多的侧重于桌面版)更有已经被招安的干儿子CentOS。

二、共存共生

虽然各个发行商的名字不尽相同,但他们却有着一个共同的“初心”——Linux内核,以及所遵循的GPL开源协议。每个发行版都是各有所长,吸取天地之精华(其实就是汲取百家之言,取长补短),例如早期的redhat中程序管理rpm(red hat package manager)非常优秀,后来便被suse发行版也借鉴来使用此方式来管理软件应用,但此二者管理方式虽相同,彼此之间的应用程序却是无法跨版本使用的。后来rpm由于其出色的管理性能也被linux委员会认定为linux的工业标准,rpm则不仅限于red hat之中,现在被称为RPM is Package Manager。

技术分享

图片来源于网络

三、Linux系统命令使用格式

本人测试机是Centos7.1,后所有说Linux第环境都是在此版本中,将不再说明。下面来介绍下Linux中常用第系统命令使用格式。

1、ifconfig

该命令现在已接近于废弃状态,目前被ip命令取代,Centos7下默认是未安装的,如果需要安装则直接在终端运行:

~]# yum install net-tools -y

即可。

通过man ifconfig可以查看到,ifconfig命令是配置网卡接口第一款程序,他的使用格式为

  • ifconfig [-v][-a][-s] [interface]

  • ifconfig [-v] interface options |address ...

单独使用ifconfig命令是显示当前系统所有已启用的网卡的信息。

  • -v:可以显示一些额外的信息,例如网卡收发包和丢包的情况

  • -a:显示所有网卡接口第信息包括未启用第网卡。

  • -s:显示简要的网卡参数信息。

还有较常用的功能有

options:

up|down:启用网卡或关闭网卡功能;

例如:ifconfig eth0 up

mtu N:修改网卡第mtu参数;

netmask addr:修改网卡的子网掩码参数;

address addr:修改或者添加网卡IP;

例如:

~]# ifconfig eth0 address 192.168.0.3/24


2、echo

在命令行使用type echo 查看到该命令是内核内嵌的命令。

使用格式:

  • echo [SHORT-OPTION]...[STRING]...

  • echo LONG-OPTION

常用选项为

  • -n:默认echo输出第内容是自动换行第,使用-n选项则是取消自动换行功能;

  • -e:启用转译字符功能;

例如:将输出文字显示为红色。

~]# echo -e "\033[31m this is red line\033[0m";
  • -E:与-e功能相反,难怪长得像的人这么爱打架o(╯□╰)o;


3、tty

tty功能使用较为简单,他的作用就是打印服务器连接终端设备名称。


4、startx

抱歉服务器端木有安装图形界面,所以以下功能介绍采集自网络,如有雷同。。。且珍惜!

startx的功能很简单,就是启动X Window的服务这一项,没有其他的了。其实startx命令启动的是xinit,然后再由xinit来启动X Window。


5、export

使用type export命令知道,该命令是系统内嵌命令,要查看内嵌命令帮助使用help export命令;

export功能就是为shell变量设定导出属性,使用格式如下:

  • export [-fn] [NAME=[VALUE]...]或export -p

常用选项为:

  • -f:shell函数;

  • -n:删除每个NAME名称第属性;

  • -p:显示所有导出第变量和函数列表;

例如添加一个环境变量为系统IP地址:

~]# export IP="192.168.30.1"

删除IP变量则使用export -n IP即可;


6、pwd

pwd命令也是个内嵌命令,作用是显示当前所在的目录位置,常用即直接使用pwd命令即可。


7、history

显示用户操作使用历史列表,使用格式:

  • history

直接使用history查看用户系统操作历史;

  • history [options] [filename]

常用选项:

  • -c:删除所有条目从而清空历史列表;

  • -d offset:从制定位置删除历史列表;

  • -a:系统默认是用户登出系统之后才会将用户第历史记录写入到用户家目录的.bash_history文件中,使用-a命令则是将当前操作立即追加到文件中去;

  • -n:与-a选项功能相反,将文件中的内容追加到历史列表中去

  • -w:功能是与-a功能相同,目前还没发现有啥区别(手动抠鼻屎表情);


8、shutdown

这个是一个强大的工具,关机、重启、关闭电源无所不能!

使用格式:

  • shutdown [OPTIONS...][TIME][WALL...]

常用选项:

  • -H,--halt:关闭服务器;

  • -P,--poweroff:关闭服务器并切断电源(默认);

  • -r,--reboot:重启服务器;

  • -h:等同于--poweroff;

  • -k:对所有已登陆用户发送通知,但不对服务器进行其他操作;

  • -c:取消服务器关机,但如果关机时使用+0或者now参数则无法取消;

示例:

(1)设定五分钟之后关机,并发送一条消息给所有登陆用户:

~]# shutdown -h +5 -k "hello!"

(2)取消关机:

~]# shutdown -c

9、poweroff

系统关机命令,目前较长用的就是shutdown

使用格式:

  • poweroff [OPTIONS...]

常用选项:

  • -p,--poweroff:关闭系统并切断电源

  • --halt:关闭系统;

  • --reboot:重启系统;


10、reboot

其实这三个关机重启命令最后都是调用了halt命令来完成最后第操作,可以使用man reboot来看到打开第帮助手册就是halt。


11、hwclock

显示或设置硬件时钟的命令。

使用格式:

  • hwclock [function] [option]

常用方法有:

  • -s,--hctosys:将硬件时钟设置为系统时间;

  • -w,--systohc:将系统时间设置为硬件时钟;

示例:将硬件时钟时间修正为系统时间。

~]# hwclock -w

常用选项有:

  • --date=date_string:设置硬件时钟

示例:设置硬件时钟时间为“2016年11月28日 16点41分10秒”

~]# hwclock --set --date="2016-11-28 16:41:10"

注:一般很少使用此方法来设置硬件时钟,多数都会同步网络时钟第时间来作为硬件时间。


12、date

显示和设置系统时间

使用格式:

  • date [OPTION]...[+FORMAT]

  • date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

常用选项:

  • -d,--date=STRING:STRING后跟数字或字符串可以使用date命令将其转化为具体第日期,

示例:


1、显示3天后的日期

2、显示3天前的日期


~]# date --date="3 days"    #将会显示3天后第日期和时间;
~]# date --date="3 days ago"  #显示三天前的日期和时间;
  • -s,--set=STRING设置系统时间选项;

示例:

    (1)设置系统日期为2017年2月1日;

~]# date -s 20170201

    (2)设置系统时间为19点30分04秒;

~]# date -s 19:30:04

    (3)可以将上述两示例一次性完成:

~]# date -s "20170201 19:30:04"

四、获取命令帮助


(1)之前命令说明中也多少使用了一些帮助文档,通常帮助文档都存放地点都在/usr/share/man目录下,系统内置命令第帮助文档则可以使用help命令来获取,具体判定命令是否为内置命令,使用type COMMAND即可。

(2)获取帮助文档使用man COMMAND。man 文件通常根据文件描述内容功能不同,划分为8种,

  • man 1:是用户在shell环境中可以操作的命令或可执行程序;

  • man 2:系统内核可调用的函数与工具;

  • man 3:一些常用第函数与函数库,大部分为C的函数库(libc);

  • man 4:设备文件的说明通常在/dev下的文件;

  • man 5:配置文件或某些文件的格式;

  • man 6:游戏;

  • man 7:惯例与协议等;

  • man 8:系统管理员可用的命令;

  • man 9:跟kernel有关的文件;

如果一个命令的使用手册在多个章节中存在,则需要查看时使用man N COMMAND查看即可,其中N为章节数。

经常使用的也就是1、5、8手册,其他的略微看下就好。

补充一下在man下可以使用快捷键来帮助我们快速的翻页浏览内容。

  • 空格键,PageDown:向下翻一页;

  • PageUp:向上翻一页;

  • ↑向上: 向上走一行;

  • ↓向下: 向下走一行;

  • ←向左: 向左走一个字符;

  • →向右: 向右走一个字符;

(3)还有一种获取帮助第方法就是在线查阅,info命令,info命令使用较少此处不多做介绍(¬_¬)。

五、常用的文件管理命令


常用的文件管理命令有ls、cat、cp、mv、more、less、tac、head、tail、mkdir、rmdir、rm,下面逐个给出常用命令选项。

1、ls:查看文件列表命令,使用格式:

  • ls [OPTIONS] /PATH

常用选项:

  • -l:查询文件列表文件类型、字节大小、属主属组修改时间登详细信息;

  • -a:显示目录中以“.”号开头的隐藏文件;

  • -A:功能和a相同只是不会在显示“.”和“..”目录;

  • --color[=WHEN]:显示文件列表时可以根据文件类型标志不同的颜色,一般使用--color=auto;

  • -d:只显示要查询目录自身;

  • -h:与-l选项同时使用以易读的方式显示文件大小(K,M,G);

  • -i:显示文件inode号码;

  • -t:以文件修改时间倒序显示;

  • -S:以文件大小来倒序显示;

  • -r:将显示顺序反向显示;

示例:

(1) 查看/etc目录下的所有文件?

~]# ls /etc

(2) 查看/etc目录下文件的权限属主属组等信息?

~]# ls -l /etc

(3) 查看/etc目录下的文件列表,以文件大小排序?

~]# ls -lS /etc

(4) 查看/etc/目录下的文件列表,并以文件修改时间排序?

~]# ls -lt /etc

(5)查看/etc目录下文件inode号?

~]# ls -li /etc


2、cat:查看文件内容将其输出至屏幕,使用格式:

  • cat [OPTION]... [FILE]...

常用选项:

  • -n:对输出所有行进行编号;

  • -b:对非空输出行编号;

  • -s:对连续的空行忽略输出;

  • -E:在每行结束处显示$;

  • Linux系统默认换行符为LF($),windows下为CRLF(^M$);

  • -T:将制表符(键盘Tab键)显示为^I;

  • -A:等价于vET

3、more:相较于cat一泻千里似的全部“倒到”屏幕上输出,more命令则友好多了,可以分屏显示。

使用格式:

  • more [options] file [...]

more一般常用的就是后直接加文件名来使用,翻页的快捷键有:

  • SPACE:向下翻一页;

  • F:向下翻一屏;

  • b:向上翻一页;

  • /关键字:在文本中查找输入的内容;

  • ENTER:一行一行的翻;

需要注意的是,当文件翻到尾部的时候会直接退出。

4、less:less的用法基本与more一致,只是相关的快捷键会多一些,更重要的一点是在文件尾部时不会自动退出,这个其实很实用。

  • 格式:less file

快捷键:

  • PageDown,space:向下翻一页;

  • PageUp:向上翻一页;

  • /关键字:向下查找;

  • ?关键字:向上查找;

  • n:与查找的方向相同,查看下一个匹配内容;

  • N:与查找方向相反;

  • q:退出less模式;

5、tac:tac应该与cat放在一起解释比较好(排版太累就算了^_^),tac的功能与cat一致,只不过显示的内容顺序正好相反,原来cat的第一行在tac中显示为最后一行。


6、head:获取文件指定前多少行内容。

  • 格式:head [-n numbers] file

   常用选项:

  • -n:后面接数字,代表显示多少行内容;

注意:如果不加-n # ,head默认显示为10行。

示例:显示/etc/passwd前15行的用户信息?

~]# head -n 15 /etc/passwd。


7、tail:与head功能相反,是显示文件从尾部开始向前多少行的内容,默认显示后10行。

  • 格式:tail [-n numbers] file

   示例:显示/etc/passwd后15行的用户信息?

~]# tail -n 15 /etc/passwd

tail还有一个比较重要的用法就是,可以追踪指定的文本文件改动情况。

使用方法:tail -f file

示例:查看文件/tmp/tail.txt文件的内容修改情况?

~]# tail -f /tmp/tail.txt

这时如果在另一个终端向tail.txt文件中写入数据的时候,打开tail -f的那个终端就会显示文件的改动。

取消文件追踪使用Ctrl+c即可。


8、cp:对文件或目录进行拷贝命令。

格式:

  • cp [option] ... SOURCE DEST

  • cp [option] ... SOURCE... DIRECTORY

  • cp [option] ... -t DIRECTORY SOURCE...

常用选项:

  • -r,R:如果源文件是目录的话,需要通过-R选项来递归复制;

  • -v,--verbose:可以显示复制过程情况;

  • -p:等同于“--preserve=mode,ownership,timestamps”,复制源文件时保留其权限、属主属组、时间戳,如果源文件是链接则会把源文件所指向的文件内容一并复制到目标位置,不会生成链接;

示例:/tmp/link 文件是/tmp/script/test.sh的链接文件,将其复制到/tmp/test目录下:

~]# cp -p /tmp/link /tmp/test

此时test目录下生成的是一个与/tmp/script/test.sh拥有相同权限、属主属组和时间戳的普通文件,而不再是链接文件,这个就是-p选项的用处;

  • -P:等同于“--no-dereference”,复制源文件时,如果源文件是链接,则直接复制链接本身而不会去复制链接文件所指向的文件;

  • -i:复制到目标位置如果目标位置有内容,则会提示用户是否进行覆盖操作;

  • -d:等同于“--no-dereference --preserve=links”若源文件为链接文件的属性,则复制链接文件属性而非链接文件的源文件本身;

  • -f:忽略已存在文件直接强制覆盖(此功能慎用!!);

  • -a:等同于“-dR --preserve=all”,是一个归档类选项,可以将所有源文件的元数据、文件内容统统复制到目标文件当中,此选项常用!

注意:如果源文件是目录或者多个源文件的话,目标文件也必须是目录否则操作失败!

9、mv:移动文件命令;

格式:

  • mv [option] ... SOURCE DEST

  • mv [option] ... SOURCE... DIRECTORY

常用选项:

  • -f:强制覆盖移动,与cp命令-f相同;

  • -i:交互式操作,只在目标位置存在源文件时会提示;

  • -v:显示操作状态;


10、mkdir:创建文件夹命令。

格式:

  • mkdir [option]... DIRECTORY...

常用选项:

  • -m,--mode=MODE:创建目录时可以同时使用此选项来为此设定权限,而不使用默认目录权限,默认目录权限为755;

示例:创建/tmp/mktest目录,指定其权限为属主可读可写可执行,属组可读可执行,其他没有权限?

~]# mkdir -p -m 750 /tmp/mytest
  • -p,--parents:创建目录时如果上层目录不存在则使用此选项来逐级创建目录;

  • -v:显示创建目录状态;

示例:在/tmp目录下创建test/test_a目录?

~]# mkdir -pv /tmp/test/test_a


11、rmdir:删除目录命令,这个命令用的不多,较常用的下面的rm命令。

格式:

  • rmdir [option] ... DIRECTORY...


12、rm:删除文件或目录命令,用处非常广。

格式:

  • rm [optioon] ... FILE...

常用选项:

  • -f:强制删除操作(慎用!!除非你知道自己在干神马!);

  • -i:交互式操作选项,可以让你有思考人生的时间o(╯□╰)o;

  • -r,-R:递归删除操作,针对目录来操作,

  • -d:删除空目录的选项;

  • -v:显示详细信息;

示例:删除/tmp目录下的test目录,如果目录不为空强制删除?

~]# rm -rf /tmp/test

六、bash简单介绍

bash 是Linux系统的默认shell,那什么是shell呢?其实shell功能只是提供用户操作系统的一个接口,用户就是通过shell将我们输入的命令与内核来进行通信,好让内核可以控制硬件来正确无误的工作。

一般在bash中运行一些命令时,多数情况下会返回一些执行的情况,比如执行ls命令成功后会在屏幕上输出所查询到的文件列表。其实除了正常返回的一些信息之外,bash还会记录运行该命令时的一些状态信息,查询该状态的方法就是在终端输入“echo $?”来查看上一条命令成功与否。

例如:查看/tmp下有哪些文件,执行

~]# ls /tmp &>/dev/null && echo $?

与一般编程语言不同,bash中如果上一条命令运行成功则返回0,否则会返回1~127之间的数字来标记错误的信息,同样这个返回信息在用户自己写脚本时也是可以自定义的。

在Linux bash中可以使用命令行展开特性一步完成需要分开成多步完成的操作,达到事半功倍的效果。在Linux指令参数位置使用"{}" 将相应的参数括起来,括号中的参数以逗号分隔,然后bash在执行这一指令时会自动将括号中的内容进行展开。

示例:在/tmp下创建ac,ad,bc,bd四个目录?

~]# mkdir -p /tmp/{a,b}{c,d}

我是分割线   我是分割线    我是分割线    我是分割线    我是分割线   我是分割线


下面开始步入正题(其实。。。这是一篇作业博客 嘿嘿),前六个题在上边做了介绍!


作业第六题:

(1)创建/tmp目录下的:a_c,a_d,b_c,b_d

~]# mkdir -pv /tmp/{a,b}_{c,d}

技术分享

创建效果图

(2)创建/tmp/mylinux目录下的一系列目录。

~]# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var,lock,log,run}

技术分享创建效果图

作业第七题:

元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件属主属组以及文件数据块的分布信息(inode...)等等。

在终端下使用stat命令可以查看一个文件元数据的详细信息。

例如以/tmp/a这个文件为例

~]# stat /tmp/grub2.cfg
    文件:"grub2.cfg"
  大小:5141      块:16         IO 块:4096   普通文件
设备:fd00h/64768dInode:34991794    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2016-11-29 10:08:33.199573782 +0800
最近更改:2016-11-29 10:08:23.150074096 +0800
最近改动:2016-11-29 10:08:23.150074096 +0800
创建时间:-
  • 文件:表示文件名;

  • 大小:表示文件占用的空间;

  • 权限:

  • -:表示该文件为普通文件;

  • r:表示该文件可读;

  • w:表示该文件可写;

  • x:表示该文件可执行;

  • 当前grub2.cfg这个文件权限表示属主有可读写权限,而属组和其他用户只有读权限;

  • Uid:表示当前文件属主ID;

  • Gid:表示当前文件属组GID;

  • atime:表示最近访问时间;

  • mtime:表示最近修改时间;

  • ctime:这个时间比较特殊,一般情况下不管对文件内容还是元数据做修改,这个时间一定会发生改变,这个就表示最近文件改动时间;

如果要修改文件时间戳则使用touch +文件名 来执行操作。

示例:

(1)修改grub2.cfg文件的访问时间为当前时间?

~]# touch -a grub2.cfg

(2)修改grub2.cfg文件的修改时间为2016年1月10日 8点40分30秒?

~]# touch -m -t 201601100840.30 grub2.cfg

作业第八题:

~]# ls /var/ |grep "^l.*[0-9]\+.*[a-z]$"


作业第九题:

~]# ls /etc/ |grep "^[0-9].*[^[:digit:]]$"


作业第十题:

~]# ls /etc/ |grep "^[^[:alpha:]][[:alpha:]].*"

作业第十一题:

~]# touch /tmp/tifile-$(date +"%Y-%m-%d-%H-%M-%S")&& echo "file has created"

作业第十二题:

~]# cp -r /etc/*.d /tmp/mytest2


作业第十三题:

~]# [ -d /tmp/mytest2 ] || mkdir /tmp/mytest2&& cp /etc/{l,m,n}*.conf /tmp/mytest2


本文出自 “积小流,成江海” 博客,转载请与作者联系!

学习笔记之Linux发行版那点事