文档章节

linux

captainliu
 captainliu
发布于 2016/07/23 13:03
字数 18202
阅读 19
收藏 0

 linux的基本原则:

     1、由目的单元的小程序组成:组合小程序完成复杂任务;

     2、一切皆文件;

     3、尽量避免捕获用户接口;

     4、配置文件保存为纯文本格式;

 

GUI接口

CLI接口:

          命令提示符:prompt     bash(shell)

                    #:root

                    $:普通用户

          命令:(任何程序要想执行,必须要有一个执行入口)

 

命令格式:

     命令     选项(修正命令的执行方式,可以同时使用多个,选项是可以带参数的)     参数(命令的作用对象,命令对谁生效)

 

     选项     :短选项     -charactor    

                              多个短选项可以组合起来使用     -a -b = -ab

                    长选项     --word     (长选项通常不能组合,必须分开使用)

 

     使用凭证:

 

root  redhat     

 

     虚拟终端(假的显示器:terminal)     :ctrl+alt+f1 --f6          startx  &    (启动图形化界面)

 

 

GUI :

          Gnome:C

          KDE     :C++

          XFace  :

 

CLI:

      sh

      bash

     csh     

      zsh

      ksh

      tcsh

     

切换用户

 su     : switch user 

     su      【-l】     用户名 

               su  用户名      (半切换)           su      -l      用户名     (完全切换)

exit     退回原来的选项

 

修改密码:

passwd

 

密码复杂性规则:足够复杂

 

 

GUI:Graphic User Interface

          Windows

          X-Window

                    Gnome

                    KDE

                    Xface

CLI:Command Line Interface

          sh

          bash

          csh

          ksh

          zsh

          tcsh

 

 

IDE:(集成开发环境)

 

dll :(windows 中 动态链接库)Dynamic     Link     Library

.so:(    linux 中  动态共享对象)     shared object

 

login:

          用户名:用户id

认证机制:Authentication(识别,鉴别某个人就是某个人)

授权:Authorization     (授予权利)

审计:Audition(日志)

 

prompt,命令提示符:

命令:

       一个程序必须要有一个执行入库,库是没有执行入口的, 二进制文件开头有一个独特的标识,称为程序的魔数

magic number:魔数,标识着二进制文件的执行格式,

 

 

list :ls     没有参数,缺省表示

列出,列表

 

文件夹:路径映射

目录::文件,路径映射

路径:从指定起始点到目的地所经过的位置,(层次化文件管理的机制)

这种层次化管理机制叫做文件系统,filesystem

 

linux 目录称为倒置的树状结构

 

目录:working directory     current directory

 

pwd:printing     working driectory     打印当前工作目录

 

蓝色:目录的属性,绿色:有执行权限,常用的颜色有六种

 

ls :

          -l :长格式,显示完整信息

 

               1、十位字母:第一位:文件类型(文件本身的属性)     

                    -:普通文件

                    d:目录文件

                    b:块设备文件

                    c:字符设备文件

                    l  :符号连接文件

                    p :     命令管道

                    s    : 套接字文件

                    

               后面九位:权限,每三位

               

               文件硬链接的次数

               文件的属主

               文件的属组

               文件的大小:默认单位是字节

               时间戳(timestamp):每一个文件都有三个时间戳,最近一次被访问的时间(access),最近一次被修改的时间(modify,文件内容发生了改变),最近一次被改变的时间(change),这里显示的是最近一次被修改的时间

               文件名

          -h :进行单位换算的

 

          -a :显示以  .  开头的隐藏文件

                    .  表示当前目录

                    .. 显示上一级目录

          -A :表示显示隐藏文件,但是不包含  .   和 . .

          -d     : 显示目录自身属性 

          

        -i     : index node     :inode(文件的缩影节点,相当于文件的名字)

         -r  :逆序显示文件

          -R :递归显示文件

 

cd     : change directory (切换目录)

          cd 后面不跟任何 参数,回到用户的家目录(主目录)

          cd     = cd ~

          cd  ~用户名 :到某个用户的家目录去,只有管理员可以进入别人家

          cd  - :在上一个目录和当前目录来回切换

 

命令类型:

     内置命令:(shell内置)

     外部命令:在文件系统的某个路径下有一个与命令相应的可执行文件

 

环境变量:通过内置环境变量,可以实现不用写路径来执行命令,命名的内存空间

               变量的赋值

                         

printenv :显示环境

               path 使用冒号分割的路径

 

hash     :记录 命令 和命令的命中次数  hash is king     hash is  O(1)

 

type :显示命令属于哪一种类型

          a shell builtin :内置命令

 

显示当前系统的时间:

date:不但可以显示时间,还可以修改时间

 

clock = hwclock 

 

获得命令的使用帮助(获取简要的帮助信息)

内部命令:help  + 命令名

外部命令:  命令   + --help

 

命令手册:manual(几乎所有的命令都有命令手册)

 

man +   命令名 

man +数字 +命令名  :显示第几个章节的命令

whatis  + 命令名  :显示命令出现在哪些章节中

 

man分章节:常见章节有八个

1:用户命令(所有用户都可以使用的命令,第一章节,文件所在位置:/bin /user/bin  /user/local/bin ):bash_builtins(1)

2:系统调用(第二章节)

3:库调用

4:特殊文件(设备文件)

5:文件格式(配置文件的语法)

6:游戏

7:杂项(不便归类的命令)

8:管理命令(/sbin            /user/sbin      /user/local/sbin )

 

 <> 必须给出的内容        [] 可省略内容        |  二选一,或多选一    ...可以出现多个       {} : 分组

man:

 

     name:命令名称及功能简要说明

     synopsts:用法说明,包括可用的选项

     description: 命令功能的详尽说明,可能包括每一个选项的意义

     options:说明每一个选项的意义

     files:此命令相关的配置文件

     bugs:报告bug给谁的

     examples:使用示例

     see also      :另外参照

 

翻屏:

     向后翻一屏:space

     向前翻一屏:b

     向后翻一行:enter

     向前翻一行:k

查找:

/keyword     :向后

n 下一个

N:前一个

 

?keyword     :向前

n 下一个

N:前一个

 

q:退出

 

date +%D:月日年

 

hwclock      -w     :将系统时间同步到硬件时间上()

hwclock     -s         :将硬件时间同步到系统时间上

 

 

在线手册:

info     COMMAND

 

文档:/usr/share/doc

 

google

 

cal     :     日历     

 

cal  获取当月日历

 

cal     年  :获取那一年的日历

 

cal     月  年 :获取某年某月的日历

 

echo  -n     省略换行符

 

echo  -e "dfsd  \n fsdf" :换行显示

 

 

printf     :格式化并显示数据

 

文件系统:

rootfs:根文件系统

FHS:LINUX

/boot     :启动系统相关的文件,如内核、initrd,以及grub(bootloader)

/dev     :设备文件

          设备文件:

                    块设备:随机访问

                    字符设备:线性访问,按字符为单位

                    设备号:主设备号(major)和次设备号(minor)

/etc     :配置文件     (都是纯文本文件)

/home     :用户的家目录,每一个用户的家目录通常默认为/home/username

/root        :root 的家目录

/lib          :库文件及内核模块文件

               /lib/modules     :内核模块文件

               静态库     .a

               动态库     .dll     .so(share object)

lost+found :系统突然断电,文件尚未保存,可以在这里找回

 

/media     :     挂载点目录 ,移动设备

/mnt        :     挂载点目录, 额外的临时文件系统()

 

/misc     : 杂项目录

/opt          :可选目录,(早期用于安装第三方程序)

/proc     :伪文件系统,(显示的文件是内核映射文件,内核的工作参数,工作的统计数据)

/sys       :伪文件系统,一般是和硬件设备相关的属性的映射文件夹,实现硬件管理的(修改磁盘调度队列)

/tmp     :临时文件系统,     /var/tmp

/var      :可变化的文件

/bin     :     可执行文件,用户命令

/sbin     :管理命令

 

/usr     :     shared      ,read-only     (全局的,共享的,只读的)

          /usr/bin     (系统运行以后,为了提供一些功能而提供的可执行程序)

          /usr/sbin

          /usr/lib         (如果额外的功能所依赖的不是公共的库文件,而是额外的库文件,就需要放在/usr/lib下了)

 

/usr/local :     第三方软件安装的路径

          /usr/local/bin

          /usr/local/sbin

          /usr/local/lib

 

文件名命名规则:

1、长度不能超过255个字符

2、不能使用 / 当文件名

3、严格区分大小写

 

相对路径:

绝对路径:

 

 

文件管理

 ls

cd

pwd

 

mkdir   目录名   :创建空目录  (创建目录时,父目录必须存在)

mkdir  -p  目录名:如果父目录不存在,先创建父目录

-v :详细过程

一次创建多个目录:/home/liuhaijing/test/x,y(/home/liuhaijing/test/x,/home/liuhaijing/test/y)

:mkdir     -pv     /home/liuhaijing/test/x   /home/liuhaijing/test/y

:mkdir      -pv     /home/liuhaijing/test/{x,y}(命令行展开)

mkdir -pv     {a,d}_{b,c}

删除目录:rmdir(remove directory)     删除空目录(非空的删除不了,一线单传的是可以删除的)

rmdir -p      目录名称

 

创建文件和删除:

     touch:创建文件(主要是用来修改文件的时间戳)

     touch      -c     不创建文件 

     touch       -a    文件     修改创建时间

     touch      -m     文件     修改修改时间

     touch      -m     -t   时间格式     文件     指定 修改时间为固定的时间          

      stat       :显示文件状态的

创建文件:可以使用文本编辑器(word不是文本编辑器)文本编辑器是用来将文件转化为ASCII的

 

ASCII:

 

标准:GB18030 GBK  GB3212  U你code(全球标准)

 

nano 文件名

^:ctrl

rm     : 删除文件(别名)

          -i :给提示

           -f:强项删除

           -r:删除目录的同时,递归删除目录下的文件

rm     -rf    /   :强行删除根目录及其下所有的文件

ctrl  c     :可以取消删除,但是要在3分钟内

 

 

\rm      :使用命令本身,不使用别名

 

复制和移动文件

cp:copy     只有一个目标

cp     SRCFILE     DEST     (复制一个文件到一个文件,复制多个文件到一个目录)

如果目标是一个目录,那么把源文件放在此目录下,并保持原文件的名字 ,如果不是目录那么就是新的文件的文件名,如果复制多个文件,那么目标就必须是目录,否则复制失败。

复制目录  :      cp     -r   /xxx/aaa/    /xxx/bbb  当aaa是目录时 ,bbb存在,将aaa及其下所有文件复制到bbb下,当bbb不存在时,将aaa改名为bbb,并其下文件都复制到bbb下(-r 递归复制)

      -a:归档复制,常用于复制

      -r:递归

     -i:交互式

     -f:强行

     -p:保留原来文件的属主,属组,权限时间戳(默认谁复制,属组属组就是谁,加 -p就不同)

     -a:保留文件的所有的属性,比-p的更强大

     -L:复制的链接,就复制文件

     -P:复制的是链接,就复制链接

cp     /xxx/{a,b,c}     /aa/

 

 

mv:move  用于移动文件

 

格式: mv   src     dest  

src是文件,dest是目录,直接放在下面,如果不存在,移动并重命名;

src是目录,dest必须是目录,如果不存在重命名为xxx

mv     -t   dest    src 

 

install     : 复制文件并制定属性

install  -d dest1      dest2  ...       :创建目录 

install  src      dest :复制文件

install  -t dest   src ...      

 

tree

目录管理

运行程序

设备管理

软件管理

进程管理

网络管理

 

描述GPL BSD     Apache 三个开源协定的大体联系及区别。

 

自由软件,版权描述

 

1、如何获取Linux当前最新的内核版本号

     www.kernel.com

2、列出你所了解的Linux发型版,并说明其跟Linux内核的关系

     Linux   GNU:GNU/Linux ,源代码

     

          发型版:Fedora,RedHat(CentOS),SUSE,Debian(Ubuntu,Mint),Gentoo     ,LFS(Linux From Scratch)(从零开始构建Linux)

 

 

 

 

软件和硬件是向下兼容的

 

文本处理命令:cat,more,less,head,tail,cut,sort,uniq,grep

     正则表达式

管道和重定向:><     >>     <<

用户、组、权限

bash的特性

 

 

 

 

3、Linux文件管理命令详解

 

目录管理:ls、cd、pwd、mkdir、rmdir、tree

文件管理:touch、stat、file、rm、cp、mv、nano

日期时间:date、clock、hwclock、cal

 

查看文本:cat、tac、more、head、tail

 

cat:连接并显示(通过给定的参数将给定的文件一个一个的显示出来)

          -n:显示行号

          -E:显示行结束符(Linux的行结束符是 $,Windows的行结束符是 $和换行符)

tac:将文本翻过来显示;

(终止当前命令 Ctrl +c)

 

分屏显示:

more、less

more:一屏一屏显示,支持向后翻,按enter

less:(和man打开文件的方式一样,他们的选项也是相同的)

head:显示文件的头部内容(默认10行)

tail:显示文件的尾部内容(默认10行)

 

head -n     numberline  xxx

head  -number   xxx

 

tail     -f   xxx     (follow,查看文件尾部,不退出,等待显示后续追加至此文件的新内容)

 

文本处理命令:

cut、jion、sed、awk(文本三大处理利器,grep(相对简单,都比较难),sed,awk)

 

database:数据库

表:二维表

 

cut  -d 标识符 -f 1(第几个字段,可以是多个,用逗号隔开) 文件 

 

          -d     :制定字段分隔符,默认是空格

          -f     :指定要显示的字段

               -f 1 ,3

               -  1-3

 

 

 

文本排序:sort  文件     :默认按照ASIIC排序(不会影响文件,只是影响显示效果)

               -n     :根据数值大小排序

               -r     :reverse 从小到大排序(按照ASIIC排序)

               -t     :字段分隔符

               -k     :以哪个字段为准排序

               -u     :unique 排序后去重

               -f     :排序时忽略字符大小写

uniq:(相邻并且完全一样)

uniq 文件  

               -d      :只显示重复的行

               -D      :重复的都显示出来

               -c       :将所有的行都打印出来,带上次数

文本统计:wc     (word count)     :行数,单词数,字节数   文件路径+文件名

               -l     :只显示行数

               -c     :字节数

               -w     :单词数

               -m     :字符数

               -L     :表示最长的一行包括多少个字符

 

字符处理命令:tr      用于转换或删除字符

               -d   只给定一个字符   删除该字符

               tr [OPTION]... SET1 [SET2]

               tr  字符集1  字符集2  将1替换为2

               tr   字符集1  字符集2  < 文件     :将文件中的1替换为2(<  输入重定向)

               tr      ‘a-z’'A-Z'

                         -d :删除字符集合中给定的字符

 

03_02_bash特性详解

 

bash及其特性: 对于操作系统整体而言 shell 是离用户最近的一个程序,也是实现用户能和计算机交互的程序,也是他们能被称为shell的原因 

shell:外壳  ,用户直接连接计算机的程序

GUI     :Gnome,KDE,     Xface

CLI     :sh      ,csh     ,ksh     ,bash,     tcsh,     zsh

shell什么时候被启动:当用户登录完成时,一个shell就会被启动。

root,student

程序:进程  当登录两个用户时,程序可能是一个,但是进程是两个,进程可以看成是程序执行的副本 (linux的另外一个特性,准许一个用户登录多次,多次打开多个shell的进程,彼此之间是各不相干的,因为他们之间是多个进程,每一个进程是不知道其他进程的存在,在当前进程看来,只存在内核和当前进程,只要进程号不同就可以的,进程之间的识别是根据进程号来区别的,进程是程序执行的实例,由内核管理)

 

进程:在每个进程看来,当前主机上只存在内核和当前进程。

进程是程序的副本,进程是程序执行实例

 

用户的工作环境,

bash:每个用户的工作环境设定不同,支持自我定义环境

         root:#

         other:$

shell,子shell  :在shell 中是有shell 和 子shell 的概念的  父子shell 之间也是感受不到之间的存在的

 

pstree:显示关系的

exit:退出当前shell  

 

 

 

bash:

1、命令历史、命令补全

2、管道、重定向

3、命令别名

4、命令行编辑

5、命令行展开

6、文件名统配

7、变量(重要)

8、编程(将多个要执行的命令以某种程序逻辑组合起来进行编程,这个程序叫脚本,即shell脚本,最重要的)

 

bash特性

1、命令行编辑:

命令光标跳转

ctrl     a     :光标到行首

ctrl     e     :光标到行尾

ctrl     u     :删除光标至命令行首的内容

ctrl     k     :删除光标至命令行尾的内容

ctrl     左右箭头:跳一个单词

ctrl     l        :实现清屏

 

2、命令历史

history     :打印使用过的命令,查看命令历史

               -c     :清空命令历史

               -d     行数:删除第几行命令

               -d     行数  个数:从行数往后删几个

               -w     :保存命令历史至历史文件(用户正常退出命令历史会追加到命令历史文件中,文件位于用户家目录下的隐藏文件  .bash_history 文件中 )

环境变量:

PATH:命令搜索路径

HISTSIZE 变量:命令历史大小,默认是1000个

 

命令历史的使用技巧

!n:执行命令历史的第n条命令

!-n:执行倒数第n条命令

!!:执行上一条命令

!string:执行命令历史中最近一个以制定的字符串开头的命令

!$:引用上一个命令的最后一个参数     

按esc,再按 .       :引用上一个命令的最后一个参数 

X `     `                                                                                                                             ``     `     `     `

命令补全:

在path环境变量下搜索补全的

 

几个字母  tab 

路径补全 在开头路径下搜索

 

03_03_bash特性详解

命令别名:

alias CMDALLAS=' COMMAND     [options]     【arguments】'    

在shell中定义的别名仅在当前shell生命周期中有效,别名的有效范围仅为当前的shell进程:

(写在bash的配置文件中就永久有效了 ,如果要定义的命令中间有空格,一定要用 ‘’ 或“”引用起来)

不带任何参数和选项的 alias 可以显示当前系统下所有的别名

 

unalias CMDALLAS  取消别名

\cmd 使用命令本身

 

命令替换:$(cmd) 或`cmd`

把命令中的某个子命令替换为其执行结果的过程

$(cmd) 或`cmd`

eg: touch file-$(date +%F-%H-%M-%S).txt

``     :命令替换

“”:弱引用,可以实现变量替换

''     :强引用,不完成变量替换

 

文件名统配   ,globbing

*     :任意长度的任意字符

?    :任意单个字符

[]    :匹配任意范围内的单个字符

          [abc] [0-9][a-zA-Z]

          [:space:]     空白字符

          [:punct:]     标点符号

          [:lower:]     小写字母

          [:upper:]     大写字母

          [:alpha:]     大小写字母

          [:digit:]        数字

          [:alnum:]     数字和大小写字母

 

     man      7     glob

[^]     :匹配制定范围外的任意单个字符

          [^0-9]

03_04   Linux用户及权限详解    

权限:

用户:

用户,容器,关联权限:用户组,能方便的指派权限          

 

进程:程序的执行过程,能够获得cpu时间和内存资源以及其他文件,并且能够运行起来的处于运行当中的程序。

共享库,谁调用谁去拿一个副本。

权限:资源的访问权限

逻辑容器,用户的容器,关联权限,这个容器称为组,是个逻辑概念,方便指派权限,

 

属主,属组,其他用户

进程也是有属主、属组

 

任何时候用户操作计算机,无非是发起进程,因此进程是用户操作计算机的代理, 所以进程在操作计算机的时候一定是以发起用户的身份在运行,所以这个进程在访问哪些文件,取决于进程自己的权限,和他访问的那个资源文件的权限,这个过程的判断是由我们系统资源管理属性自动完成的;是由内核的管理下完成的。

 

权限:

r、w、x

文件   

r     :可读     

w     :可写,可以编辑或删除文件,

x     :可执行,可以在命令提示符下当做命令提交给内核运行;

 

目录     

r     :可以对此目录执行ls以列出内部的所有文件

w     :可以在此目录下创建文件

x         :可以使用cd切换进此目录,也可以使用 ls     -l     查看内部文件的信息

 

0     000     ---     无权限

1     001     --x     执行

2     010     -w-     写

3     011     -wx     写和执行

4     100     r--       读

5     101     r-x     读和执行

6     110     rw-     读和写

7     111     rwx     读写执行

 

755     rwxr-xr-x

 

用户  :UID     : /etc/passwd

组     :GID     :/etc/group

解析:名称解析

 

影子口令:

用户:/etc/shadow

组     :/etc/gshadow

 

影子口令:

用户密码:/etc/shadow

组:/etc/gshadow

 

 

用户类别:

管理员:id:0

普通用户:1-65535

          系统用户:1-499

          普通用户:500-60000

 

用户组分组类别:

管理员组:

普通组:

          系统组:

          一般组:

 

 

用户组类别:

     私有组:创建用户时,如果没有为其制定所属的组,系统会自动为其创建一个与用户名同名的组。

     基本组:用户的默认组

     附加组:额外组:默认组以外的组

 

 

系统上的文件运行时,一定是以某个用户的身份去访问,因此用户去访问这个文件的时候,他就是以这个用户直接应用到这个文件

 

安全上下文:

 

/etc/passwd  文件是用冒号分割开的属性

1、account:     登陆名

2、password:     密码(x是占位符,真正的密码在/etc/shadow下)

3、UID:          用户id号

4、GID:          基本组id

5、comment:用户的注释信息

6、HOME  DIR     : 家目录(系统用户虽然指定了家目录,但是不准许登录的)

7、SHELL          :用户默认的shell(/sbin/nologin  : 不让登录,非法shell 不可以登录   /etc/shells文件下的shell 是安全的shell)

 

 

/etc/shadow

account:          登陆名

encrypted     password     :加密的密码  ($加密方法,1表示md5$盐 $密码)      密码前有 *  或!!表示此用户处于锁定状态

密码更改时间长:1970-01-01 到上一次被更改的时间天数

密码最短使用时间:0表示不做限定

密码最长使用时间:密码必须要更改的时间

密码过期警告时间:

宽限期,过期了,必须改密码的时间

明确指定过期时间:99999,永久不过期

保留字段

 

(which command   查找命令文件)

 

 

 

 

添加用户

     adduser  : 

     useradd   命令指定的属性在  /etc/default 下的useradd下

 

     useradd      用户名:添加用户

     passwd       用户名    密码 :为用户指定密码

 

 

 

/etc/group

1、组名

2、密码

3、组id

4、以这个组为附加组的用户列表

 

groupadd   组名  : 手动添加组

 

 

添加组:groupadd     groupname

 

用户管理命令:

          useradd,     userdel,     usermod,     passwd,     chsh,     chfn,     finger,     id,     chage(改变用户各种外围属性的命令)

组管理命令:

          groupadd,groupdel,groupmod,gpasswd 

权限管理:

          chown(更改属主),chgrp(更改属组),chmod,umask

 

 

加密方法:

          对称加密:加密和解密使用同一个密码

          公钥加密:每个密码都是成对出现的,一个为公钥(public key),一个为私钥(secret     key)

          单向加密:散列加密,提取数据特征码,常用于数据的完整性校验,

                         1、雪崩效应(蝴蝶效应)

                         2、定长输出

                                   MD5:message     digest     128定长输出(信息摘要, 5 是版本号,128位定长输出,麻省理工学院人工智能实验室研发的)

                                   SHA1:Secure     Hash     Algorithm,160位定长输出(美国国家标准委员会召集出来的通用算法,160位的定长输出)

                          md5sum 输出文件的特征码

 

密码前有 *  或!!表示此用户处于锁定状态

 

 

4.1、用户管理命令详解

 

添加用户

useradd     【options】     username     

               -u:手动指定uid(用户没有使用过的,大于500) useradd -u 1000 tom

               -g:gid(基本组)指定基本组,必须事先存在 (后面可以跟组id 或 组名)

               -G:附加组,可以有多个,彼此之间用逗号分隔开,必须事先存在

               -c:指定注释信息

               -d     /path/to/directory:指定家目录

               -s     /etc/shells/ :指定shell路径

               -m     -k:强行创建家目录,并负责配置文件    /etc/skel 文件在这个目录下

               -M     :不为用户创建家目录

               -r:  添加系统用户,系统用户没有家目录   /etc/login.defs   

 

 

删除用户:

userdel    用户名  :删除用户 如果没有跟选项,用户的家目录是不会被删除的

userdel     【option】     username

               -r:删除用户同时删除家目录(默认不会删除家目录)

id     :查看用户的账号属性信息

          -u

          -g

          -G

          -n

 

finger  username:查看用户账号相关信息

  

修改用户账号属性:

usermod(和useradd基本相同)

               -u:手动指定uid(用户没有使用过的,大于500) useradd -u 1000 tom

               -g:gid(基本组)指定基本组,必须事先存在

               -G:覆盖附加组,有副作用,会覆盖原来的附加组,如果不想覆盖使用 -aG

               -c:指定注释信息

               -d  -m    The user´s new login directory.

             If the -m option is given, the contents of the current home directory will be moved to the new home directory, which is created if it does not already exist.

                    即指定新的家目录,又移动此前的文件

               -s     /etc/shells/ :指定shell路径
               -l:更改登陆用户名

               -m     -k:强行创建家目录,并负责配置文件

               -M     :不为用户创建家目录

               -e:指定用户过期时间

               -f:过期了,还没有过期时间

               -L:锁定用户账号,类似禁用

               -U:解锁

 

chsh     username:更改用户的shell

chfn     username:更改用户信息

 

id :查看用户账号属性信息

     -u:

     -g:

     -G:

     -n:

finger  username:查看用户账号相关信息

/etc/login.defs     配置文件

环境变量

          PATH

          HISTSIZE

          SHELL:用于保存当前用户的shell

 

 

密码管理:

passwd     【username】

               --stdin:从标准输入来获取密码

               -l:锁定用户

               -u :解锁

               -d:删除用户密码(禁止空用户密码登录 )

 

pwck:检查用户账号的完整性

 

 

组管理:

创建组:groupadd

          -g:指定gid,不指定大于500,自上一个组加1

          -r:添加系统组

 

groupmod     :修改组

               -g:修改gid

               -n:修改grpname

groupdel:删除组

 

gpasswd  groupname:为组创建密码

 

newgrp  组  :将当前用户的基本组临时切换到另外一个组

 

chage: chage - change user password expiry information

          改变用户密码过期信息的。

chage 【option】     user

 

          -d:最近一次修改时间

          -E:过期时间

          -I:非活动时间

          -m:最短使用期限

          -M:最长使用期限

          -W:警告时间

 

把一个用户的基本组临时切换到其他组去:newgrp,如果将基本组切换到附加组去是不需要密码的

 

4.2、权限及权限管理

权限管理:

r:

w:

x:

 

三类用户:

u:属主

g:属组

o:其他用户

 

chown:改变文件属主(只有管理员可以使用此命令)

chown     username     file,...

          -R:递归改变目录及其目录下的文件和子目录的属主

          --reference=/filepath     file ,...      :参考某个文件的属主

chown  username:grpname     file,...     同时修改文件的属主属组名

chown  username.grpname     file,...     同时修改文件的属主属组名

 

chgrp:修改属组

chgrp     grpname     file,...

               -R:递归修改

               --reference

 

chmod     :修改文件的权限

修改三类用户的权限:

chmod     644     file,...

               -R

               --reference

修改某类用户或某些类用户的权限

u,g,o,a

chmod  用户类别 = mode   file, ...

 

修改某类用户的某位或某些位权限

comod     用户类别+mode file

 

练习:

1、新建一个没有家目录的用户openstack

2、复制/etc/skel为/home/openstack

3、改变/home/openstack及其内部文件的属主属组均为openstack

4、/home/openstack其内部的文件,属组和其他用户没有任何访问权限

 

手动添加用户hive,基本组为hive(5000),附加组为mygroup

 

umask:遮罩码

创建文件的权限:666-umask

创建目录的权限:777-umask

 

root umask:022

umask:002

 

文件默认是不能有执行权限,如果算得的结果中有执行权限,则将其权限加1:

 

站在用户登录的角度来说:SHELL的类型:

登录式shell:

          正常通过某终端登录

          su     - USERNAME

          su     -l     USERNAME

 

非登录式shell:

          su     USERNAME

          图形终端下打开命令窗口

          自动执行的shell脚本

 

bash的配置文件:

全局配置:

     /etc/profile,     /etc/profile.d/*.sh,     /etc/bashrc

个人配置:

     ~/.bash_profile,     ~/.bashrc

 

profile类的文件:

          设定环境变量

          运行命令或脚本

 

bashrc类的文件:

          设定本地变量

          设定命令别名

 

登录式shell如何读取配置文件?     

          /etc/profile     ---->/etc/profile.d/*.sh     --->~/.bash_profile     --->     ~/bashrc     --     /etc/bashrc

 

非登录式shell如何读取配置文件?

     ~/.bashrc     --->      /etc/bashxrc     --->     /etc/profile.d/*.sh

 

bash.     脚本解释器

 

 

04_03、管理及IO重定向

运算器、控制器:CPU

存储器:RAM(易失性存储器)

输入设备/输出设备

 

程序:指令和数据()

 

控制器:读取指令

运算器:

存储器:

 

地址总线:内存寻址
数据总线:传输数据

控制总线:控制指令

(总线是复用的,一根总线,三种功能)

 

寄存器:CPU暂时存储器

 

I/O:硬盘,键盘、鼠标

 

input设备:数据的来源

output设备:

 

系统设定:

          默认的输出设备:标准输出,STDOUT,1

          默认的输入设备:标准输入,STDIN,0

          标准错误输出:STDERR,     2

标准输入:键盘

标准输出和错误输出:显示器(廉价)

 

I/O重定向: 改变了数据的输出来源或输入来源,对于linux而言,从定向使用符号来表示

 

Linux:

>     :覆盖输出(原有内容会被覆盖掉)容易出现致命错误

>>     :追加输出(在文件尾部继续增加新内容)

>|     :强制使用覆盖重定向(当覆盖输出功能被关闭时,可以强制覆盖输出)

 

2>     :重定向错误输出

2.>> :重定向错误追加输出

eg:     ls  xxx  > abc  2> def   (重定向标准输出和错误输出)

             ls  xxx >abc    2>abc  = ls xxx &>abc

 

&>     : 重定向标准输出或错误输出

&>>   : 追加方式

 

set -C:禁止使用覆盖输出

set +C:开启覆盖输出

 

有些命令默认就包含输入重定向的功能   eg:cat   <  /etc/fstab 

 

tr  : 实现字符集转化或者删除字符的  (需要等待键盘输入)

<     :输入重定向      tr 'a-z'  'A-Z'  <  xxx

<<     :Here Document (此处生成文档)

<<end(文档结束标记) 

cat  >>aaaa<<EOF   : 将输入的内容 输出到 aaaa的文件中

 

eg:cat  >>aaaa<<EOF

dfdj;f

dfdjf

EOF

将输入的内容保存在aaaa文件中

 

管道:命令1 的输出 当做命令2的输入

 

命令1   |     命令2     |     命令3

 

 ls   xxx  |   tr 'a-z'   'A-Z' 

 

echo "hello world"|tr 'a-z' 'A-Z'

 

 

tee      :     read from standard input and write to standard output and files     (从标准输入读取数据,然后标准输出,和指定文件,即屏幕一份,文件中一份)

eg     :     echo "dfsdfsdf" | tee bbbb

               ls   | tee   bbbb

只显示文件的行数:     wc -l bbbb | cut -d ' ' -f1

 

练习题

1、统计/usr/bin/目录文件下的个数

2、取出当前系统下所有用户的shell,要求,每种shell只显示一次,并且按照顺序进行显示

3、思考:如何显示/var/log目录下每个文件的内容类型

4、取出/etc/inittab文件的第6行

5、取出/etc/passwd文件中倒数第9个用户名和shell,显示到屏幕上并将其保存至/tmp/users文件中;

6、显示/etc目录下所有以pa开头的文件并统计其个数

7、不使用文本编辑器,将alias  cls=clear  一行内容添加至当前用户的.bashrc文件

 

passwd     --stdin

 

4.4、gerp及正则表达式

文本查找的需求:

grep、egrep、fgrep

grep:Global     Research(根据模式,搜索文本,并将符合模式的文本行显示出来。)

Pattern:(模式)由文本字符和正则表达式的元字符组合而成的匹配条件

               grep [OPTIONS] PATTERN [FILE...]

               grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]     

               -i:忽略大小写

               --color  

               -v:反向查找,被匹配到的不显示,没有被匹配到的显示

               -o:只显示被模式匹配到的字符串本身

正则表达式:Regular     EXPression     REGEXP(正则表达式默认是贪婪模式)

元字符:

.     :任意单个字符

*     :匹配其前面的字符任意次

.*     :任意长度的任意字符

[]     :匹配制定范围内的任意单个字符

[^]     :匹配任意范围外的单个字符

     字符集合     :     [:digit:]     数字、[:lower:] 小写字母、[:upper:]  大写字母、[:punct:] 标点符号、[:space:] 空格、[:alpha:] 所有字母、[:alnum:] 所有数字字母

 

\?     :匹配其前面的字符一次或零次

\{m,n\}     :匹配其前面的字符m到n次

位置锚定

^     :锚定行首,次字符后面的任意内容必须出现在行首

$     :锚定行尾,次字符后面的任意内容必须出现在行尾

^$     :空白行

\<  或\b   :其后面的任意字符必须作为单词的首部出现

\>  或\b     :其前面的任意字符必须作为单词的尾部出现 

 

分组:

\(\)     :

          eg:\(ab\)*

          反向引用

          \1:第一个左括号引用的内容

          \2:第二个左括号引用的内容

          \3:第三个左括号引用的内容

 

5.1、egrep及扩展正则表达式

 

正则表达式:

     Basic     REGEXP     基本正则表达式

     Extended     REGEXP     扩展正则表达式

 

grep:使用基本正则表达式定义的模式来过滤文本的命令;

          -E     : 使用扩展的正则表达式

          -A    number :匹配到的行的下面的number个行都显示

          -B     :

          -C     :

 

扩展正则表达式:

字符匹配

.

[]

[^]

 

次数匹配

*     : 任意次

?     : 0到1次

+     :1到正无穷次

{m,n}

 

位置锚定:都相同

 

分组:

()     :分组

\1    \2     \3

 

或者

|

a|b     表示or的意思,表示前面的整体或者后面的整体

 

IPV4:

 

5类:A      B     C     D     E

A     :1-127

B     :128-191

C     :192-223

 

5.2、bash脚本编程之一   变量     变量类型等

fgrep     :fast     grep     不支持正则表达式,

 

shell编程:

编译器,解释器

 

编程语言:机器语言、汇编语言、高级语言

静态语言:编译型语言

          强类型(变量)

          事先转换成可执行格式

          C     C++     JAVA     C#

          关键字:

动态语言:解释型语言,on the  fly

          弱类型

          asp     asp.net     php      SHELL       python(如虎添翼)     perl     

          边解释边执行

编程语言:

          脚本编程

 

面向过程:就是把编程着眼点立足、点主要在于问题解决过程本身,shell脚本是面向过程的

面向对象:就是要把我们实现的项目抽象成一个一个的对象,并且定义对象之间的动作,就是可发出的操作来完成的,所有面向对象的这种开发风格更适合开发大型应用程序

linux的内核是面向过程的C语言开发的。

 

面向过程:Shell     、C

面向对象:JAVA     、Python、perl     、C++

 

变量:内存空间,命名的内存空间

 

内存:编址的存储单元

 

进程:

 

变量类型:事先确定数据的存储格式和长度(你所存储数据的存储格式,变量类型决定了数据的存储格式)

          字符

          数值

                    整型

                    浮点型:11.23(小数点之前作为一个单位存放,小数点之后作为一个单位存放,之后存储一下小数点的位置)

                                 1.123*10^1     或者  0.1123*10^2

         时间     2013/10/10     64bit

                    99999               24bit

 

整型:8bit     :256

          0-255     ,溢出     (缓冲区溢出)

 逻辑运算:与、或、非、异或 

计算机的数字逻辑和电逻辑有重复。

 

shell:若类型编程语言

强:变量在使用前,必须要先声明,甚至还要初始化;

弱:变量随用随声明,甚至不区分类型,一般默认为字符串。

 

变量赋值:     VAR_NAME=VALUE

 

bash变量类型:

     环境变量

     本地变量(局部变量)

     位置变量

     特殊变量

 

本地变量:(进程的变量)  VAR_NAME=VALUE  作用域为整个bash进程:

局部变量:

local     VAR_NAME=VALUE     :作用域为当前代码段:

环境变量:作用域为当前shell进程及其子进程,

     export     VAR_NAME=VALUE     (导出)

     或  VAR_NAME=VALUE

           exprot VAR_NAME

位置变量:

$1,$2...

 

特殊变量:保存特殊数据的

$?     :保存上一个命令执行状态返回值

 

例子:

[root@localhost bin]# echo $?
0
[root@localhost bin]# ls dfdsf
ls: cannot access dfdsf: No such file or directory
[root@localhost bin]# echo $?
2
[root@localhost bin]# 

 

 

程序执行,可能有两类返回值:

          程序执行结果

          程序状态返回代码(0-255)

                    0     : 正确执行

                    1-255     : 错误执行     ,     1,2,127     系统预留

 

输出重定向:

>

>>

2>

2>>

&>

 

/dev/null     : 软件模拟设备,bit     bucket     ,数据黑洞

          

撤销变量:

unset      VARNAME  (操作变量本身不能加$,如果是操作其值需要加$)

 

查看当前shell中的变量:

set

查看当前shell环境变量:

printenv

env

export     

 

对应变量的值得更改

 

例子:

[root@localhost bin]# echo $anamial
pig
[root@localhost bin]# anamial=$anamial:sheep
[root@localhost bin]# echo $anamial
pig:sheep
[root@localhost bin]# 

 

 

脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序(ELF:可执行的可连接的程序)

shebang:魔数

#!/bin/bash  -->指定脚本解析器来执行

#     :注释,不执行

 

脚本:增加魔数,使其找到执行的shell,修改文件的权限,使其可执行,明确指定其目录或将其配置到PATH中

或者     增加魔数,使其找到执行的shell,没有执行权限,明确指定其目录或将其配置到PATH中  使用命令 bash  /root/aaa.sh 执行(作为别人的参数运行)

 

练习:

1、添加五个用户   user1  。。。user2

2、每个用户的密码同用户名,而且要求,添加密码完成后不显示passwd命令的执行结果信息;

3、每个用户添加完成后,都要显示某某用户添加成功;

 

使用一个变量保存一个用户名;

删除此变量中的用户,且一并删除其家目录;

显示用户删除完成类的信息;

 

 

脚本在执行时会启动一个子shell进程:

          命令行中启动的脚本会继承当前shell的环境变量

          系统自动执行的脚本(非命令行启动)就需要自我定义需要各个环境变量:

 

引用变量:${VAR_NAME}               {}  在大多数情况下都可以省略

 

例子

[root@localhost bin]# anamial=pig
[root@localhost bin]# echo "there are some $anamials"
there are some
[root@localhost bin]# echo "there are some ${anamial}s"
there are some pigs
[root@localhost bin]# 

[root@localhost bin]# echo 'there are some ${anamial}s'                     (双引号是弱引用,内部变量要做替换,单引号是强引用,内部变量不做替换)
there are some ${anamial}s

 

 

 

 

5.3、bash脚本编程之二,条件判断

 

条件判断

     如果用户不存在

               添加用户,给密码并显示添加成功:

     否则

               显示如果已经存在,没有添加

 

bash中如何实现条件判断?

条件测试类型

          整数测试

          字符测试

          文件测试

 

条件测试的表达式:

               [     expression     ]

               [[     expression     ]]

               test      expression

 

整数比较:

          -eq     :测试两个整数是否相等     $A     -eq     $B

          -ne      :  测试两个整数是否不等     不等为真,相等为假

          -gt     :测试一个数是否大于另一个数

          -lt        :测试一个数是否效应另一个数

          -ge     :大于或等于

          -le         :小于或等于

 

命令之间的逻辑关系

          逻辑与:     &&          id rodfdfot &> /dev/null  && echo "hello "

          逻辑或:     ||

 

如果用户不存在就添加用户

!  id user1 && useradd     user1

id user1     ||     useradd user1

 

如果/etc/inittab文件的行数大于100,就显示好大的文件

[ `wc l /etc/inittab |cut -d ' ' -f1 ` -gt 100  ] && echo "Large file" || echo "small file"

 

如果用户存在就显示用户已存在,否则就添加用户

id user1 && echo "user1 exits" || adduser user1

 

如果用户不存在就添加用户,否则显示其已存在

! id user1 && adduser user1 ||  echo "user1 exits"

 

如果用户不存在,就添加用户并给其密码,否则,显示其已存在

! id user1 && adduser user1 &&  echo "user1" | passwd --stdin || echo "user1 exits"

 

练习

1、添加3个用户user1 ,user2,user3;但是要先判断用户是否存在,不存在后再添加;

2、添加完成后,显示一共添加了几个用户,当然,不能包括因事先存在而没有添加的;

3、最后显示当前系统上共有多少个用户;

#!/bin/bash
USERS=`wc -l /etc/passwd | cut -d: -f1`
echo "users number is $USERS"
! id user8 &> /dev/null && useradd  user8 && echo "user8" | passwd --stdin user8 &> /dev/null || echo "user8 exits"
! id user9 &> /dev/null     && useradd  user9 && echo "user9" | passwd --stdin user9 &> /dev/null || echo "user9 exits"
! id user11 &> /dev/null && useradd  user11 && echo "user11" | passwd --stdin user11 &> /dev/null || echo "user11 exits"
echo "users number is $USERS"

 

练习:写一个脚本,完成以下任务

给定一个用户

     1、如果其uid为0,就显示此为管理员;

     2、否则就显示其为普通用户。

 

#!/bin/bash
MYUSER=root
MYUSERID=`id -u $MYUSER`
echo $MYUSERID
[ $MYUSERID -eq  0 ] && echo  "$MYUSER  is guanliyuan user" || echo "$MYUSER is putong user"

 

 

条件判断,控制结构:

单分支if语句

if     判断条件;then

     statememt1

     statement2

          。。。

fi

 

双分支if语句

if  判断条件;then     (if 和then可以在一行,也可以不在一行,如果在一行,判断条件后必须有分号,then一行后面必须什么都没有)

     statement1

     statement2

     。。。

else

     ...

fi

 

*******       ` id -u user`     使用的是命令的执行结果   id user      使用的是命令的执行状态 

$A=3

$B=9

let  C=$A+$B

 

05_04_bash脚本编程三 条件判断及算数运算

 

练习:写一个脚本

判断当前系统上是否有用户的默认shell为bash

          如果有就显示有多少个这类用户,否则就显示没有这类用户

 #!/bin/bash

bashnum=`cat /etc/passwd | grep bash | wc -l`
if [ ${bashnum} -eq 0 ]; then
     echo "no such user"
else
     echo "have ${bashnum} users"
fi

 

 

06_02_sed命令

grep ,sed(流编辑器),awk 

 

sed基本用法:

sed:stream editor

          行编辑器(全屏编辑器 : vi)

sed是行编辑器,但是编辑特性是并不处理文本文件本身,每当处理一个文件的时候,逐行读取,每一次将一行读取到内存中,而在内置中进行编辑,并把编辑的内容输出到屏幕上来,而这段内存空间叫做模式空间,为什么叫模式空间呢,因为sed处理文本的时候并不是每一行都处理的,或者是指定处理某些行,符合模式条件的处理,不符合模式条件的一律不处理,因此这段内存空间叫做sed的模式空间;将符合模式的行读取到内存中,然后对符合条件的行进行编辑;是删除还是修改取决于sed命令,因此sed是有子命令;sed默认不编辑源文件,只对模式空间中的行进行处理;

 

sed  【option】 ‘AddressCommand’file ...   : 对这个文件或这些文件中指定地址或范围内的行执行编辑命令

          

option

     -n:静默模式,不显示模式空间中的内容,不再显示模式空间中的内容;

 

Address的指定:

1、startline  ,Endline  比如 1,100

2、/regexp/        使用模式   比如  /^root/

3 、 /pattern1/  ,  /pattern2/     : 第一次被pattern1匹配的行到第一次被pattern2匹配的所有的行

4、linenumber    : 只指定某行,叫做精确指定某行

     $:表示最后一行

     $-1:倒数第二行;

5、startline  , +n   :从指定行起向后n行

 

command:

          d:表示删除符合条件的行

sed '1,3d' /etc/fstab 

sed '/etc/d' /etc/fstab

 sed '1,+2d' /etc/fstab  :删除第一行,和后面的两行

          p:显示符合条件的行 ,符合条件的行会显示两遍,不符合的显示一遍

          

          a  \string   :在指定的行后面追加新行,内容为  string  字符串内有空格要加引号

          sed  '/^#/ a \liuhaijing' /etc/fstab 

          i  \string      : 在指定的行的前面追加新行,   \n :可以用于换行

 

7.1、vim编辑器详解

文本编辑器:编辑纯ASCII码的文档,没有任何多余的处理字符

字处理器:word  wps 基本的文本外还有附加信息,都是修饰符,和文件内容无关,文档数据的重要组成部分

(linux的哲学思想:使用纯文本文件来保存软件的配置信息)

nano     sed 

 

vi     : Visual  Interface  

vim     :     VI     IMproved 

全屏编辑器,模式化编辑器

 

vim的模式:

编辑模式(命令模式 )

输入模式

 

(模式之间的转换都要通过编辑模式转换)

 

模式转换:

编辑--》输入

          i     :在当前光标所在的字符前面,转换为输入模式;

          a     :在当前光标所在的字符后面,转换为输入模式;

          o     :在当前光标所在行的下方,新建一行,并转换为输入模式;

          I        :在当前光标所在的行首,转换为输入模式;

          A      :在当前光标所在的行尾,转换为输入模式;

          O     :在当前光标所在的行的上方,新建一行,并转换为输入模式;

输入---》编辑

          ESC 

编辑----》末行

          :               (set nu : 显示行号)

末行---》编辑

          ESC    ESC           

 

一、打开文件

vim     /path/to/somefile

vim  +#  file  :打开文件让他直接处在第#行

vim  + file      :打开文件,光标处在最后一行

vim  +/PATTERN  FILE  :打开文件,光标处在第一次被模式匹配的行首

 

     默认处于编辑模式

 

二、关闭文件

1、末行模式下关闭文件

     q     :退出(如果编辑了,是退出不了的)

     wq   :保存并退出

     q!     :不保存并退出

     w     :保存(只读是保存不了的,但是只读对管理员是不生效的)

     w!     :强行保存

     wq --》x  

2、在编辑模式下关闭文件

ZZ :保存退出

 

三、移动光标(编辑模式)

1、逐字符移动光标:

     h     : 左移

     j     :下移

     k     :上移

     l     :右移

     #h     :移动#个字符

 

2、以单词为单位移动

     w     : 移至下一个单词的词首

     e     :跳至当前或下一个单词的词尾

     b     :跳至当前或前一个单词的词首

     

     #w     :跳#个单词

3、行内跳转

     0     :跳至绝对行首

     ^     :跳至行首的第一个非空白字符

     $     :绝对行尾

 

4、行间跳转

     #G     :  跳转至第#行

     G        :    跳转至最后一行

 

     末行模式下,直接给出行号即可

 

四、翻屏(编辑模式下)

ctrl + f  :向下翻一屏

ctrl  + b    :向上翻一屏

 

ctrl   + d     :向下翻半屏

ctrl   +  u     :向上翻半屏

 

五、删除单个字符(编辑模式下)

x     : 删除光标所在处的单个字符

#x     :删除光标所在处的#个字符

 

六、删除命令 : d

d命令跟跳转命令组合使用

#d跳转符:删除跳转符所指定范围的#个

#dw  #de  #db

dd   :删除光标所在行

#dd:删除#行

 

末行模式下:

startADD,endADDd

.     : 表示当前行

$     :表示最后一行

+#     :向下的#行

$-#     :倒数#行

 

七、粘贴命令     p

p: 如果删除或复制的为整行的内容,则粘贴至光标所在行的下方,如果复制或删除的内容为非正好,则粘贴至光标所在字符的后面;

P: 如果删除或复制的为整行的内容,则粘贴至光标所在行的上方,如果复制或删除的内容为非正好,则粘贴至光标所在字符的前面;

 

八、复制命令 y

     用法同d命令

 

九、先删除内容,再转换为输入模式

          c     :用法同d命令

十、替换、r

R:替换模式(可以替换多个字符

 

十一、撤销编辑操作     u

u     :撤销前一次操作(连续u可以连续撤销操作,内存中保存50次操作)

#u     :直接撤销最近#次操作

     

撤销最近一次撤销操作:ctrl  + r

 

十二、重复前一次编辑操作

.

 

十三、可视化操作

v     :按字符选取

V     :按矩形选取

 

十四、查找替换

/PATTERN

?PATTERN

n

N

 

十五、查找并替换

在末行模式下使用s命令

ADDR1,ADDR2s@PATTERN@string@gi

eg:  . , $-3s/df/DF/gi

 

07-02   bash  脚本编程之六 使用脚本选项及组合条件测试

 

十六、使用vim编辑多个文件

vim     file1   file2  file3  (默认至打开第一个文件)

:next    切换至下一个文件

:prev    切换至前一个文件

:last     切换至最后一个文件

:first     切换至第一个文件

 

退出:

:q    退出当前文件

:qa   退出所有文件

 

十七、分屏显示一个文件

 

ctrl  +  w   ,  s     :水平拆分窗口

ctrl   +  w  ,v     :垂直拆分窗口

在窗口间切换光标:

ctrl   +  w   ,  上下左右箭头

:qa     关闭所有窗口

 

十八、分窗口显示多个文件

vim   -o   file1   file2   :水平分割显示

vim   -O   file1   file2  :垂直分割显示

在窗口间切换同十七

 

十九、将当前文件中部分内容另存为另外一个内容

末行模式下使用w命令

:w

:addr1  ,addr2  w  /path/to/somwhere 

 

二十、将另外一个文件中的内容填充到当前文件中

:  r   /path/to/somwhere            (光标在哪个位置就在哪个位置所在的行的下方插入文件)

 

二十一、跟shell交互

:  !   command

 

二十二、高级话题

1、显示或取消行号

:  set  number    =  set  nu

:  set  nonumber  = set nonu 

 

2、显示忽略或区分字符大小写

:  set  ignorecase

:  set  ic

 

:  set  noignorecase

:  set  noic

3、设置自动缩进

:set  autoindent

:set  ai 

:set  noai

 

4、查找到的文本高亮显示或取消

:set hlsearch

:set  nohlsearch

 

5、语法高亮

:syntax   on

:syntax   off

 

二十三、配置文件

/etc/vimrc      (全局配置文件,对所有用户有效)

~/.vimrc         (对当前登录用户有效,如果没有可以新建)

 

vimtutor  学习vim

 

.swp 文件的存在说明上一次编辑文件是非法退出的,修改的内容没有得到保存,如果修改的内容没有用可以直接删除.swp 文件。

 

vim  -r    xxx   :  打开上次修改还未保存的文件 进行保存  

 

添加用户脚本内容  adduser.sh

#!/bin/bash

for I in {1..10}; do 
    if id user$I &>/dev/null ; then
        echo "user$I  exits !"
    else
        useradd user$I
        echo user$I | passwd --stdin user$I &> /dev/null
        echo "Add user user$I  success"
    fi 
done

 

给脚本赋权限   chmod  +x   adduser.sh

执行脚本    ./adduser.sh

 

删除用户脚本内容  vim  delusers.sh  

 

#!/bin/bash

for I in {1..10}; do
   if id user$I &> /dev/null; then
        userdel -r user$I &> /dev/null
        echo "delluser  user$I success ."
   else
        echo "user$I not exists ."
   fi 
done

 

给脚本赋权限    chmod  +x   delusers.sh

执行脚本    ./deluser.sh

 

扩展:

接受一个参数:

add:添加用户user1...user10

del:删除用户user1...user10

其他退出

文本内容:(vim  adminuser.sh)

 

#!/bin/bash
if [ $# -lt 1 ] ;then
   echo "Usage : adminuser  ARG"
   exit 7
fi

if [ $1 == "--add" ] ; then
   for I in {1..10}; do
      if id user$I  &> /dev/null ; then
          echo "user$I exists ."
      else
          useradd user$I
          echo user$I  |  passwd --stdin user$I &> /dev/null
          echo  "Add  user$I successful ."
      fi 
   done
elif [ $1 == "--del" ] ;then
   for I in {1..10} ; do 
      if  id user$I &>  /dev/null ; then
          userdel -r user$I  &> /dev/null
          echo  "Delete user$I successful"

      else
          echo "user$I not exists ."
      fi
   done 

elif [ $1 == '--help' ]; then

     echo "Usage : adminuser2.sh --add USER1,USER2...  | adminuser2.sh --del USER1,USER2... | adminuser2.sh --help "
else
   echo "Unknown  ARG ."
   exit  8
fi

 

 

chmod +x  adminuser.sh

./adminuser.sh   add

 

 

加强版:

 

 


#!/bin/bash

if [ $1 == '--add' ] ; then
    for I in `echo $2 | sed 's/,/ /g'`; do
       if id $I &> /dev/null ; then
          echo "$I exists ."
       else
          adduser $I 
          echo $I | passwd --stdin $I   &> /dev/null
          echo "$I add successful ."
       fi 
    done
elif [ $1 == '--del' ] ; then
   for I in `echo $2 | sed 's/,/ /g'` ; do
       if id $I &> /dev/null ; then
          userdel  -r $I
          echo "$I delete successful ."
       else
          echo "$I not exists ."
       fi 
   done

else
   echo "Unknown  options ."
fi

 

测试:

整数测试

-le

-lt 

-ge

-ge

-eq

-ne

字符测试

==

!=

>

<

-n

-z

文件测试

-e

-f

-d

-r

-w

-x

 

如何实现组合测试条件:

-a:与关系

-o:或关系

!:非关系

 

if [  $#  -gt   1  -a   $#  -le   3   ]      (给出的参数的个数 大于1  小于 3)

if [  $#   -gt  1  ]   && [   $#   -le  3  ]

 

#!/bin/bash

f [ $1 == "q" -o  $1 == "Q" -o $1 == "Quit" -o $1 == "quit" ]; then
    echo "quiting ..."
    exit 0
else
    echo "Unknown  ARG"
    exit 1
fi

 

 

07_03   Linux 文件查找详解

 

let

I=10

let  I=$[ $I + 1 ]       相当于     let I++

let  sum=$[ $sum + $I ]    相当于  let  sum+=I

 

-=

*=

/=

%=

 

计算100以内  奇数和偶数的和

 

#!/bin/bash

declare -i EVENSUM=0
declare -i ODDSUM=0

for I in {1..100}; do
   if [ $[$I%2] -eq 0 ]; then
        let EVENSUM+=$I
   else
        let ODDSUM+=$I
   fi 
done

echo "evensum is $EVENSUM  "
echo "oddsum  is $ODDSUM   "

 

 

grep       egrep      fgrep      :   文本查找

文件查找:

locate     :

               非实时,模糊匹配,查找是根据全系统文件数据库进行的;

#          updatedb    , 手动生成文件数据库

速度快

find          :

                    实时查找

                    精确

                    支持众多查找条件

                    遍历指定目录中的所有文件完成查找,速度慢;

find 查找路径     查找标准     查找到以后的处理动作

查找路径:可以省略,默认为当前目录

查找标准:可以省略,默认为指定路径下的所有文件

处理运作:可以省略,默认为显示

 

匹配标准:

               -name    'FILENAME' (属于查找标准)  :  对文件名作精确匹配

                    eg:find   /etc    -name   'passwd'

                               支持文件名通配:

                                   *     :   任意长度的任意字符

                                   ?     :   

                                   []

                   eg   :  find  /etc    -name    'passwd*'

              -iname   'FILENAME'   :  文件名匹配不区分大小写

              -regex    PATTERN   :基于正则表达式进行文件名匹配

               -user     USERNAME  :根据属主查找

               eg:  find  /tmp  -user  root

               -group    GROUPNAME   :根据属组查找

               -uid    UID  :根据UID查找

               -gid    GID  :根据GID查找

               

               -nouser  : 查找没有属组的文件(没有属主的文件可能其他用户可以获取到其控制权)

          -nogroup : 查找没有属组的文件

               

               -type :根据文件类型进行查找

                         f: 普通文件

                         d

                          c

                         b

                         l

                         p

                         s

               eg:find  /tmp    -type   d

               -size  

                         [+|-]#k  :  大于或小于  多少k ,如果没有  加减号 ,那么为精确多少k   ,所有,采用进一法

                         #M

                         #G

                         (如果没有跟单位,默认是字节)

组合条件:

          -a  :与

          -o    :或

          -not :非

   默认为与条件

eg:  find  /tmp   -user  root  -a   -type   d  :  查找 tmp目录下属主是root 并且  文件类型是目录的文件

        find  /tmp  -not  -type d   

/tmp/test  目录下,属组既不是user1  也不是user2的文件

        eg: find  /tmp  -not   -user user1   -a   -not   -user    user2 

              find  /tmp  -not  \( -user  user1  -o  -user2 \)

 

根据文件的时间戳来查找

          -mtime:修改时间

          -ctime  :改变时间

          -atime  :访问时间        

        [+|-]#天数

          -mmin

          -cmin

          -amin 

          eg:  find  /tmp   -amin   +5 

根据文件权限查找:

               -perm  mode   :  精确匹配

               -perm  /mode  :   模糊匹配,只要有一个权限位相同就可以匹配上

               -perm  -mode  : 文件全乡能王权包含此mode时才行

eg:   find   /tmp  -perm  644   

处理运作:

          -print  : 显示

          -ls      :类似ls  -l  的形式显示每一个文件的详细

          -ok     COMMAND  {}  \;      : 查找出文件,并对其进行相应的command命令操作    {}  为当前文件的占位符     ,  \;  不可省略

                                                         -ok  的每一个操作都需要用户去确认;

          -exec   COMMAND   {}  \;      :   同-ok 命令    ,不需要用户去确认;

 

07_04_特殊权限SUID等详解

          xargs  :  build and execute command lines from standard input  (从标准输出中获取 建立并执行命令)

          eg: find /etc  -size  +1M   -exec  echo {}  >>  /tmp/etc.largefiles   \;  

               = find /etc -size  +1M   |  xargs   echo  >>  /tmp/etc.largfiles  

(不需要使用占位符,也不需要使用  \;  但是需要使用管道命令)

 

练习题:

1、查找/var 目录下属主为root  并且属组为mail的所有文件:

find   /var  -user  root   -group  mail

2、 查找 /usr目录下不属于root,bin,或student的文件:

find  /usr  -not  -user  root   -a  -not -user  bin  -a  -user  student  

find  /usr  -not  \( -user  root  -o  -user bin -o  -user  student \)

3、查找/etc 目录下最近一周内内容修改过且不属于root及student用户的文件:

find  /etc -mtime  -7  -not \( -user root  -o  -user student \)  

find /etc  -mtime  -7   -not -user  root  -a  -not -user student  

4、查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,并且将其属主属组均修改为root

find  /etc  \( -nouser - nogroup \)  -a  -atime  -1  -exec  chown  root:root  {}  \;  

5、查找/etc  目录下大于1M的文件,并且将其文件名写入/tmp/etc.largefiles文件中;

find   /etc  -size   +1M >>  /tmp/etc.largefiles

6、查找/etc 目录下所有用户都没有写权限的文件,显示出其详细信息:

find   /etc    -not  -perm  /222   -l  

 

 

特殊权限

passwd  : s

 

SUID:运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者;

          chmod  u+s  FILE 

          chmod  u- s  FILE

          如果FILE     本身原来就有执行权限,则SUID显示为s;否则显示为S;

SGID:运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者的基本组;

          chmod  g+s  FILE

          chmod  g-s   FILE

Sticky:在一个公共目录,每一个都可以创建文件,删除自己的文件,但不能删除别人的文件(通常对目录而言);

          chmod  o+t  DIR

          chmod  o-t   DIR

 

08_01_facl及用户及Linux终端

文件系统访问控制列表:

tom:

          tom,tom基本组

jerry :  other  : r--

 

chown  (普通用户是不能改变文件的属主属组的)

FACL:   Filesystem  Access  Control  List  

利用文件扩展保存额外的访问控制权限

jerry  : rw-

 

setfacl

          -m:设定

                 u:uid:perm     (u 表示用户,uid 用户名  perm  权限)

                 g:gid:perm
                 d:u:uid:perm     为某个目录设定访问控制列表,这就意味着任何用户在此目录内创建文件,都会继承此目录的控制列表权限,使用的不多

                 d:g:gid:perm

eg:   setfacl  -m  u:user1:rw   test1   (用户user1 原来对test1 文件没有w权限 ,设置之后就有了对test1的写权限)

eg:   setfacl  -m  g:mygroup:rw  test1   

setfacl -m  u:hadoop:rw  inittab

          -x:取消

               u:uid

               g:gid 

eg:  setfacl  -x u:user1   test1    (取消权限设置)

(有特殊权限的文件  查看时,权限符后有一个+ 号  ,如果复制文件归档等操作  这个属性不会被复制,要使用特定的选项或命令)

getfacl

            

getfacl   file    :查看访问控制列表

 

用户访问文件的使用身份顺序:

Owner  --》Group  --》Other

Owner  --》 facl,user  --》Group  --》facl,group   --》Other

whoami

 

几个命令:

w  : 显示当前都有谁登录了,都在干啥

who

每隔5秒钟,就来查看hadoop是否已经登录,如登录,显示其已经登录,并退出;

sleep  命令  睡

 

whami

last  : 显示/var/log/wtmp 文件,显示用户登录历史及系统重启历史

          -n  #    :  只显示最近几次的登录信息    # 代表次数     eg:last   -n   3  

lastb :  显示/var/log/btmp  文件,显示用户的错误的登录尝试

          -n  #     :只显示最近几次的登录信息

lastlog:显示每一个用户最近成功登录的信息

          -u  USERNAME

basename:输出全路径文件名下的基名

          $0:执行脚本时的脚本路径及名称

mail:查看邮件 ,输入编号 查看邮件,q  :退出

          也可用于发送邮件

          eg:   echo "my name is liuhaijing ,hi " | mail -s 'name mail' root  

               格式:  mail  -s   MAILNAME   USERNAME     MAILBODY  

          eg2:    mail  -s  "how  are you  ?"  root  <  /etc/fstab

 

hostname : 显示当前主机名  ,实时主机名 

hostname  xxx  : s设置当前主机名

$HOSTNAME 

练习:

如果当前主机的主机名不是www.magedu.com ,就将其改为www.magedu.com

如果当前的主机名是  localhost  ,就将其改为  www.magedu.com

如果当前的主机的主机名为空,或者为(none),或者为localhost,就将其改为www.magedu.com

 

who  :显示数据含义,1、用户名,2、从哪个终端登录的,3  登录时间

 

终端类型:

               console:控制台,直接连接主机的物理设备(显示器,键盘等)

               pty:物理终端(通常情况下物理终端就是控制台,控制台就是物理终端)(VGA)

               tty#:虚拟控制台(附加在在物理控制台上,并结合软件的方式模拟实现的(VGA  显卡)  #代表数字(当前系统安装的显示)

               ttyS#:串行终端

               pts/# : 伪终端

 

08_02_bash脚本编程之七 case语句及脚本选项进阶

                 

生成随机数

RANDOM:0-32768  之间的随机数

 

随机数生成器:熵池  ,熵池中的随机数是通过敲击键盘等的行为生成的,熵池中的随机数是可以取空的,当以random方式取随机数时,如果熵池取空了,那么会阻塞用户进程,提示你做一些其他操作取将熵池填满,如果使用urandom方式取随机数,也是从熵池中取随机数,如果熵池中没有了随机数,那么他不会阻塞用户进程,会使用软件的方式模拟出随机说,这个随机数不安全,容易被破解。

/dev/random:

/dev/urandom

 

联系

写一共脚本 ,利用RANDOM生成十个随机数,并找出其中的最大值,和最小值

#!/bin/bash
declare  -i  MAX=0
declare  -i  MIN=0

for I in {1..10} ; do 
   MYRAND=$RANDOM
   [ $I -eq 1 ] && MIN=$MYRAND
   if [ $I -le 9 ]; then
       echo -n "$MYRAND , "
   else
       echo -n "$MYRAND"
   fi 
  if [ $MYRAND -gt $MAX ];then
       MAX=$MYRAND
  fi 
  if [ $MYRAND -lt $MIN ];then
       MIN=$MYRAND
  fi 
done
   echo "  MAXRANDOM IS $MAX"
   echo "  MINRANDOM IS $MIN"

 

面向过程

          控制结构

                   顺序结构

                    选择结构

                    循环结构

选择结构

          if:  单分支、双分支、多分支

if   CONDITION   ; then

          statement

          ...

fi

 

if     CONDITION  ; then

          statement

          ...

else

          statement

          ...

fi

 

if     CONDITION  ; then

          statement

          ...

elif

          statement

          ...

else 

          statement

          ...

fi

 

 

case  语句  : 选择结构

case  switch  in

value1)

          statement

          ...

          ;;

value2)

          statement

          ...

          ;;

*)

          statement

          ...

          ;;

esac

 

eg:

 

 #!/bin/bash


case $1 in
[0-9])
   echo  "A digit"  ;;
[a-z])
   echo  "Lower"  ;;
[A-Z])
   echo  "Upper"  ;;
*)
   echo  "Special character" ;;
esac

 

 

写一个脚本,只接受参数  start,stop , restart,status 其中之一

eg:

     #!/bin/bash

#

case $1  in 
'start')
     echo "start service ..."
     ;; 
'stop')
     echo "stop service ..." ;;
'restart')
     echo "restarting service ..." ;;
'status')
     echo "running service ..." ;;
*)
     echo "`basename $0`  {start|stop|restart|status}" ;;
esac

 

 

写一个脚本,可以接受选项及参数,而后能获取每一个选项,及选项的参数;并能根据选项及参数作出特定的调整: 

(这个练习没有练,有时间练,很重要)

(bash  -n    ./xxx.sh   验证是否有语法错误)

shift:把刚刚引用的变量去掉

 

08_03_磁盘及文件系统管理详解之一

 

练习:写一个脚本  showlogged.sh   ,   其用法格式为:

showlogged.sh  -v  -c   -h|--help

其中,-h 选项只能单独使用,用于显示帮助信息:-c选项时,显示当前系统上登录的所有用户数:如果同时使用了 -v选项,则即显示同时登录的用户数,又显示登录的用户的相关信息:

eg:

 

#!/bin/bash

declare -i SHOWNUM=0
declare -i SHOWUSERS=0

for I in `seq 1 $#` ; do
   if [ $# -gt 0 ] ; then
       case $1 in 
       -h|--help)
           echo "Usage : `basename $0` -h|--help  -c|--count  -v|--verbose"
           exit 0 ;;
       -v|--verbose)
           let  SHOWUSERS=1
           shift ;;
       -c|--count)
           let  SHOWNUM=1
           shift ;;
       *) 
           echo "Usage : `basename $0` -h|--help  -c|--count  -v|--verbose"
           exit 8
       esac

  fi
done

if [ $SHOWNUM -eq 1 ] ;then
      echo "Logged  users : `who | wc -l`"
      if  [ $SHOWUSERS -eq 1 ]; then
          echo "they are :"
          who
      fi
fi

 

 

磁盘管理:

 

一般来说外侧磁道 读写数据块 ,每一个扇区一般而言是512个字节

 

分区是磁盘的逻辑边界,每一个分区可以有单独的文件系统,

 

机械式硬盘:

          U盘(国人研发的)、光盘、软盘、硬盘、磁带

低级格式化:磁盘厂商做的,给磁盘划分磁道,扇面等

分区:实现创建独立的文件系统  (partition)

MBR:(主引导记录  512byte)

Master  Boot  Record ( 在第0盘面,0磁道,0扇区,不属于任何操作系统,操作系统无法访问)

Main   Boot  Record  

          446byte:BootLoader  ,程序(引导加载器)

             64byte:

                    每16byte:标识一个分区(只能标识4个分区,所有硬盘上只能划分四个主分区)

              2byte:Magic  Number

                    标记MBR是否有效

扩展分区只能有一个

磁盘分区是按照柱面分区的 ,柱面的排序从外向内  一次递增的 0,1,2,3...

磁盘的读写延迟

衡量磁盘的性能和指标:平均寻道时间,笔记本的一般是5400转  台式7200转

磁道越靠外,读写速度越快,C盘是最外侧的磁道组成的。

文件系统是一个管理软件:可以将一个分区划分成两片,第一片,元数据存储区,第二片,数据存储区  数据存储区又分存储块

MBR是启动操作系统的重中之重,当我们的电脑开机时,内存中的数据是空的,而我们cup中的数据都是来自于内存的,所以当我们的电脑刚刚开机的时候 bios中的数据(bios是存储在rom中的一段程序代码,这段代码可以完成自身健康状况的检查 ,bios ,设置了如何检查自身状况的,bios是一段程序)   ,这段程序在开机以后会直接把rom芯片中的内容映射到内存中的最开始最开始的那段空间中来,所以我们一开机cpu就开始试图加载内存中最低端的代码,这个代码刚好是我们的bios指令,bios自检完成没有问题之后,接下来去根据bios中设定的启动次序挨个去找启动设备的mbr  ,然后将BootLoader加载到内存中,然后bios就退出了,把控制器交给bootloader,bootloader就会去分区中找操作系统中的内核,然后内核启动自身,接着找到文件系统的位置,和每个程序的位置,最终操作系统启动完成)      没有分区表是无法读取数据的

文件系统是一个管理软件可以将分区划分为两片,
     缩影节点(indexnode):其中的信息有  inode号,属主属组扩展属性权限时间戳大小,但没有文件名
     根是自引用的,系统是可以自己寻找到的。
     文件名是放在目录上的, 目录也需要占用磁盘块,在目录的磁盘块上分两块,1是inode号码,2是文件名。
     块位图(bitmap)
     缓存条目(为了解决寻找磁盘块浪费时间而设定的)

     全局描述信息

     什么是链接文件
     链接分为:硬链接和符号连接
     硬链接:多个文件路径指向同一个inode;
     软连接(符号连接):存储磁盘块存储的是另外一个文件的路径名(文件大小是字符个数,文件的权限是777是为了实现所有的用户都能找到这个路径,但是不一定可以访问这个文件,因为文件的访问权限取决于源文件)

     ln  [-s  -v]  src  desc  创建连接文件
     -s:     创建软连接

     -v:     显示过程的

     不带任何选项,表示创建硬链接

 

 

 

硬链接:

               1、只能对文件创建,不能应用于目录(避免循环引用),目录的硬链接次数始终是2,  .  和当前目录的引用

               2、不能夸文件系统

               3、创建硬链接会增加文件被连接的次数(九位权限后的数字就是文件被连接的次数)

符号连接:

               1、可应用于目录;

               2、可以跨文件系统;

               3、不会增加被连接文件的连接次数;

               4、其大小为指定的路径所包含的字符个数;

du   directory:显示目录下所有文件占有的磁盘空间大小

du  

     -s    :只显示目录文件大小

     -h  :单位换算

df:显示整个磁盘分区使用情况

     -h     :单位换算

     -i     : 磁盘块使用情况

     -P  :不换行

 

08_04_磁盘及文件系统管理详解之二

 

设备文件:

               b:按块为单位,随机访问的设备;块设备

               c:按字符为单位,线性设备;字符设备

 

               b:硬盘

               c:键盘

/dev

               主设备号(major  number)

                         标识设备类型

               次设备号(minor number)

                         标识同一种类型中不同设备

 

mknod     :创建设备文件(make  block  or  character  special  files)

mknod  [OPTION] ... NAME  TYPE  [ MAJOR  MINOR]

                    -m  MODE  :  指定设备文件的权限  

 eg:    mknod   mydev   c   66   0    (创建字符设备文件   主设备号:66 ,次设备号0,默认权限和文件权限相同  644)

 eg:  mknod   -m  640  mydev2  c  66   1  

设备文件的主要目的是作为设备的访问入库的,因此一定要保证主设备号一定跟某类设备关联起来的,设备号默认是被内核识别的,所以当前系统上插入某个硬件上来,这个硬件设备号被内核识别为66 ,那么我们通过这个文件访问的数据内容,都自动发送到设备上去了,(我们发往某个设备文件上的内容就到某个设备上去了)

不要轻易向某个设备文件发送数据,有可能会损坏你的硬盘

 

系统是如何标识硬盘的?

硬盘设备的设备文件名:()

IDE,ATA:hd

SATA:sd

SCSI:sd

USB:sd

          a,b,c,...   来区别同一种类型下的不同设备

IDE:

          第一个IDE 口:主,从

               /dev/hda     ,     /dev/hdb

          第二个IDE口:主,从

               /dev/hdc     ,     /dev/hdd

hda     :

          hda1: 第一个主分区

          hda2:

          hda3:

          hda4:

          hda5:第一个逻辑分区

 

查看当前系统识别了几块硬盘:

fdisk   -l  [/dev/to/some_device_file]

 

管理磁盘分区:

/

 

 

 

 

 

 

 

 

 

 

文件系统是一个管理软件可以将分区划分为两片,
     缩影节点(indexnode):其中的信息有  inode号,属主属组扩展属性权限时间戳大小,但没有文件名
     根是自引用的,系统是可以自己寻找到的。
     文件名是放在目录上的, 目录也需要占用磁盘块,在目录的磁盘块上分两块,1是inode号码,2是文件名。
     块位图(bitmap)
     缓存条目(为了解决寻找磁盘块浪费时间而设定的)

     全局描述信息

     什么是链接文件
     链接分为:硬链接和符号连接
     硬链接:多个文件路径指向同一个inode;
     软连接(符号连接):存储磁盘块存储的是另外一个文件的路径名(文件大小是字符个数,文件的权限是777是为了实现所有的用户都能找到这个路径,但是不一定可以访问这个文件,因为文件的访问权限取决于源文件)

     ln  [-s  -v]  src  desc  创建连接文件
     -s:     创建软连接

46.01     Tomcat系列之java技术详解

 

 

=============================================================================

=============================================================================

which          :which - shows the full path of (shell) commands.

exprot     lang=en

 

 

yum install lrzsz  上传软件

 

ps     aux               查看进程

kill     pid               结束进程

lsof     -i:port     查看端口占用

 

 

ssh [user@]host [port]   命令行登陆

 

对自己狠一点,不能自怜

 

 

vim 命令

 

 

vi的基本操作 a) 进入vi   在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:    $ vi myfile   不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command mode)」,您要切换到「插入模式(Insert mode)」才能够输入文字。初次使用vi的人都会想先用上下左右键移动光标,结果电脑一直哔哔叫,把自己气个半死,所以进入vi后,先不要乱动,转换到「插入模式(Insert mode)」再说吧! b) 切换至插入模式(Insert mode)编辑文件   在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。 c) Insert 的切换   您目前处于「插入模式(Insert mode)」,您就只能一直输入文字,如果您发现输...

 

 

 

 

 

插入文本类命令 
i :在光标前 
I :在当前行首 
a:光标后 
A:在当前行尾 
o:在当前行之下新开一行 
O:在当前行之上新开一行 
r:替换当前字符 
R:替换当前字符及其后的字符,直至按ESC键 
s:从当前光标位置处开始,以输入的文本替代指定数目的字符 
S:删除指定数目的行,并以所输入文本代替之 
ncw或nCW:修改指定数目的字 
nCC:修改指定数目的行 


:w :保存当前文件 

:x:保存当前文件并退出 

:q!:不保存文件并退出vi 

 

│0     │移到行首 

│nG    │到第n行    

│G     │到最后一行   

 

 

wc   文件 

:数据含有 : 行数  单词数   字符数   文件全路径名

-l  :仅列出行;
-w  :仅列出多少字(英文单字);
-m  :多少字符;

 

取出当前用户下的所有的shell

cut -d : -f7 /etc/passwd |sort -u

 

如何实现显示/var/log 下每个文件的内容类型

file /var/log/*              通配符

[root@localhost log]# file `ls /var/log`  命令替换

 

取出  /etc/inittab 文件的第六行

head -6  /etc/inittab | tail -1 

 

取出 /etc/passwd 下倒数第九个用户的用户名和shell 保存在/tmp/users文件下并显示在屏幕上 

tail -9 /etc/passwd | head -1 | cut -d : -f1,7 | tee /tmp/users

 

显示/etc 下以pa开头的文件 并统计其个数

ls -d /etc/pa*  | wc -l

 

不使用文本编辑器将 alias cls=clear 一行内容添加至当前用户的.bashrc  文件中

echo "alias cls=clear" >> ~/.bashrc

stat   file   查看文件的属主属组等信息

 

请问 $# -lt 1   这一句shell是什么意思啊?

参数的个数小于1

 

 

 

 

ROM:外置存储,如硬盘
RAM:内置存储,如内存
Cache:缓存,如CPU一级缓存,二级缓存
一个基本系统里面,没有ROM可以运行,没有RAM就不行。
CPU处理数据,优先级依次为Cache=》RAM=》ROM,而且就算RAM中没有所需的数据,也要先从ROM中读取到RAM中然后再进行数据交换处理。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

上一篇: Spark Streaming
下一篇: Spark Sql 安装
captainliu
粉丝 11
博文 106
码字总数 83678
作品 0
昌平
程序员
私信 提问

暂无文章

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

import java.util.Arrays; public class Solution { public int MoreThanHalfNum_Solution(int [] array) { Arrays.sort(array); int count=0; for(int i=0;i<array.le......

南桥北木
27分钟前
1
0
关于FLAG_ACTIVITY_NEW_TASK的使用

参考文章: https://blog.csdn.net/u010389391/article/details/78558475 Context调用startActivity, 有部分情况会报出如下错误: Caused by: android.util.AndroidRuntimeException: Calli......

Gemini-Lin
42分钟前
0
0
Python开发工具:Webware for Python

原文来之:https://www.oschina.net/p/webware+for+python 前言 Webware for Python 是一组 Python 包和工具用来开发面向对象的 Web 应用。良好的设计模式,包含一个快速的应用服务器、Servl...

A_裙232550246
51分钟前
1
0
高并发场景下的缓存有哪些常见的问题?

一、缓存一致性问题 当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象。 这就比较依赖缓存的过期和更新...

别打我会飞
今天
3
0
List list = new ArrayList()为何父类引用指向子类对象(多态)

态:要有继承,方法的重写,父类引用指向子类对象 疑问一:父类引用指向子类对象 与指向父类对象 Animal cat = new Cat(); //向上转型。 父类引用指向子类对象,该引用不能再访问子类新增加的...

architect刘源源
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部