锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

马哥学习笔记

时间:2023-05-04 11:07:00 ge在线ph变送器

第一章,操作系统基础

01_03_操作系统基础

计算机系统结构包括以下部分:

运算器
控制器
存储器、内存、编址
输出设备
输入设备

北桥 - 高速总线控制器

南桥 - 低速总线总线控制器



硬件架构:
ARM
x86
x64
安腾
alpha
UltraSparc
Power
M68000,M68K
PowerPC

OS:
Windows
Linux
Unix
HP-UX
Solaris
AIX
SCOUNIX
Unixware
OS/2

内核功能:
进程管理
内存管理
文件系统
网络功能
硬件驱动
安全机制

批处理系统
jobs1$$$$$$$jobs2$$$$$$$$

下面是一个关于操作系统的故事。

1965年时,贝尔实验室(Bell Labs)通用电气加一个(General Electric)麻省理工学院(MIT)合作该计划应建立多用户、多任务、多层次的计划(multi-user、multi-processor、multi-level)的MULTICS操作系统。直到1969年,因MULTICS工作进度太慢,计划停止了。当时,Ken Thompson(后被称为UNIX已经有一个叫做之父)"星际旅行"的程序在GE-635在机器上跑,但反应很慢,他碰巧发现了一个闲置的PDP-7(Digital的主机),Ken Thompson和Dernis Ritchie就将"星际旅行"移植程序PDP-7上。



MULTICS其实是"Multiplexed Information and Computing Service"1970年的缩写,那部PDP-7当时只能支持两个用户,Brian Kernighan他们的系统实际上是:"UNiplexed Information and Computing Service",缩写为"UNICS",后来大家拿它的谐音,叫它"UNIX"了。1970年可称为"UNIX元年"。



1971年,Ken Thompson写了很长的申请报告,申请了一个PDP-11/24的机器。于是Unix第一版出来了。在一台PDP-机器完成11/24。这台电脑只有24台KB物理内存和500K磁盘空间。Unix占用了12KB剩下的一半内存可以支持两个用户Space Travel的游戏。而着名的fork()此时出现了系统调用。



1973年,Ken Thompson 与Dennis Ritchie我觉得用汇编语言移植太头疼了。他们想用高级语言完成第三版。对于当时完全用汇编语言开发程序的时代他们的想法相当疯狂。一开始他们想试试Fortran,但失败了。后来他们用一个叫BCPL(Basic Combined Programming Language)他们整合了语言开发BCPL后来形成B语言Dennis Ritchie我认为B语言仍然不能满足要求,所以我改进了B语言,这是今天著名的C语言。于是,Ken Thompson 与Dennis Ritchie成功地使用C语言写了Unix的第三版内核。至此,Unix修改和移植操作系统相当方便Unix未来的普及奠定了坚实的基础。而Unix与C完美结合,统一,C与Unix迅速成为世界的主导地位。



Unix第一篇文章 “The UNIX Time Sharing System”由Ken Thompson和Dennis Ritchie于1974年7月的 The Communications of the ACM发表。这是UNIX第一次接触外界。因此,它在学术界引起了广泛的兴趣,并要求其源代码,Unix第五版以仅用于教育目的的协议为各大学提供教学用途,成为当时操作系统课程中的示范教材。各大学公司开始通过Unix源码对Unix各种改进和扩展。于是,Unix开始广泛流行。



其中,Berkeley成立的由Bill Joy 领导的Unix研究小组取得了明显的成就。



然而,20世纪70年代,AT&T公司开始注意到Unix商业价值。公司的律师开始寻找保护他们的手段Unix,让它成为商业秘密。从1979年Unix的版本V7开始,Unix禁止大学使用许可证Unix源代码,包括在教学中学习。(之前由于AT&T该公司受到美国法院的限制,不得销售电话以外的其他产品,甚至不得向他人销售AT&T在贝尔实验室独立出来之前,公司不能拒绝要求。



1980年,主要有两个Unix版本线,一条是Berkeley的BSD UNIX,另一个是AT&T的Unix,这时,很明显,竞争最终导致了Unix的战争。在这场战争中,好的是软件开发人员还能得到Unix根据自己的需要和兴趣切割源代码。不好的是,Unix开始不可控的开发,不断出现各种变种。



1982年,Joy创建了Sun Microsystems并提供了工作站–Sun-1,运行SunOS(Solaris接下来的十年)。而AT&T在接下来的几年里发布Unix System V第一版,影响力强的操作系统,最终创造了IBM的AIX和HP的HP-UX。

正值Unix战争期间,微软公司Bill Gates依靠母亲在IBM董事会副主席的关系取得了新的成就PC编写关键操作系统软件的合作。由于时间紧迫,程序复杂,微软以5万美元的价格从西雅图的一个程序编制者那里得到了Tim Paterson(帕特森)手里买了一个操作系统QDOS部分重写后提供的使用权IBM,并命名它Microsoft DOS(Disk Operating System,磁盘操作系统)。

苹果,另一家著名的计算机公司,从施乐购买了一个结合鼠标的图形操作系统,被认为会侵犯施乐的复印机业务。



微软利用与苹果的合作,微软抄袭了该操作系统并发行了该操作系统windows 1.但还是基于DOS,很容易崩溃。DEC雇佣了一批人员使用DEC开发了新一代系统的操作系统框架Window NT。



Unix收费后,Andrew开发的 Minix(基于微内核结构的类别UNIX计算机操作系统)开始流行,Minix最著名的学生用户是Linus Torvalds,他在芬兰赫尔辛基大学使用Minix操作平台建立了新的操作系统核心,他把它叫做Linux。

80年代,Stallman 发起了GNU计划,GNU是“GNU's Not Unix递归缩写。加入GUN所有软件都是自由开源和接受的GNU一般公共许可证(GNU General Public License,GPL)。但发布的软件都依赖于Unix,这和GUN is Not Unix的定义严重不符。Linux出生时就是在GPL条款下发布。1992年Linux与其他GNU完全自由的操作系统正式诞生。GPL规定使用了GPL软件之后,你自己的软件也必须开源,这限制了GPL普及,后来LGPL这种情况的出现改变了(LGPL:Lesser General Public License),GNU的软件有:
Emacs:文本编辑器
gcc:GNUCComplier
bash:
Linux:glibc,gcc,
GNU/Linux

自由软件中的自由是指:
自由获取,自由修改,自由学习



Linux发行版
GNU/Linux都是以源的形式发布的,需要自己编译,使用起来很复杂,门槛太高。然后就有了Linux发行商。
RedHat
SLS
Debian
SUSE-->Novell(Netware),OpenSUSE

Ubuntu: Mint
CentOS:CommunityENTerpriseOS, 社区版红帽
Fedora: 个人版红帽,RedHat公司已将个人版红帽交给公司Fedora社区



两大软件包管理软件
Debian, dpt
RedHat, rpm


RedHat开机配置
linux ip=172.16.X.1 netmask=255.255.0.0 gateway=172.16.0.1 dns=172.16.0.1 ks=http://172.16.0.1/class.cfg

Linux内核版本和RHEL版本号可不一样

Linux: 0.1, 1.0, 2.0, 2.2, 2.4, 2.6, 3.0, 3.7
RHEL 3.0, 4.0, 5.0, 6.0

第二章、Linux操作系统及常用命令



02_01_Linux操作系统及常用命令



Linux的基本原则:
1、由目的单一的小程序组成;组合小程序完成复杂任务;
2、一切皆文件;
3、尽量避免捕获用户接口;
4、配置文件保存为纯文本格式;

GUI接口:Graphical User Interface
CLI接口:command-line interface


命令提示符,prompt, bash(shell)
#: root
$: 普通用户


命令格式: 命令  选项  参数

# command  options...  arguments...
选项:
    短选项: -
        多个选项可以组合:-a -b = -ab
    长选项: --


参数:命令的作用对象

虚拟终端(terminal):Ctrl+Alt+F1-F6
模拟终端:GUI图形界面中的终端

GUI:
    X-Window Gnome: C    KDE: C++    XFace

CLI:
    sh    bash    csh    zsh    ksh    tcsh


root, student, vistor

1. su: switch user
# su [-l] 用户名 完全切换
# passwd

密码复杂性规则:
10^6
36^6
62^6
100^6


Linuxedu@126.com
1、使用4种类别字符中至少3种;
2、足够长,大于7位;
3、使用随机字符串;
4、定期更换;
5、循环周期足够大;

以后的课程大概包括:
RHCE+RHCA+shell编程+MySQL+Web集群+NoSQL+Hadoop+Hbase+Openstack

内部FTP:
172.16.100.177
192.168.0.1

google hack:
linux filetype:pdf
linux site:ibm.com

IDE:


login:
    用户名:用户ID

认证机制:Authentication
授权:Authorization
审计:Audition (日志)

prompt,命令提示符:

magic number: 魔数,标记可执行文件的格式,exe,elf

#!/bin/bash就是脚本的魔数,又称shebang

2. ls: list
列出,列表

目录:文件,路径映射
路径:从指定起始点到目的地所经过位置
文件系统:file system

 

ls

         -l:长格式

                   文件类型:

                      

                             -:普通文件 (f)

                            d: 目录文件

                            b: 块设备文件 (block)

                            c: 字符设备文件 (character)

                            l: 符号链接文件(symbolic link file)

                            p: 命令管道文件(pipe)

                            s: 套接字文件(socket)

                   文件权限:9位,每3位一组,每一组:rwx(读,写,执行), r--

                   文件硬链接的次数

                   文件的属主(owner)

                   文件的属组(group)

                   文件大小(size),单位是字节

                   时间戳(timestamp):最近一次被修改的时间

                            访问:access

                            修改:modify,文件内容发生了改变

                            改变:change,metadata,元数据

         -h:做单位转换

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

                   . 表示当前目录

                   .. 表示父目录

         -A

         -d: 显示目录自身属性

         -i: index node, inode

         -r: 逆序显示

         -R: 递归(recursive)显示

3. pwd: Printing Working directory     

目录:working directory, current directory

 

 

4. cd: change directory

         家目录,主目录, home directory

         cd ~USERNAME: 进入指定用户的家目录

         cd -:在当前目录和前一次所在的目录之间来回切换



5. type: 显示指定属于哪种类型

Linux命令类型:

         内置命令(shell内置),内部,内建

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

        

环境变量:命名的内存空间

         变量赋值       NAME=Jerry

         PATH: 使用冒号分隔的路径

 

6. hash: 查看命令缓存

       时间复杂度:O(1)

缓存为王,cache is king

  

02_02_Linux操作系统及常用命令

     

7. date:时间管理,查看系统时钟

Linux:  开机时读取硬件时钟,软件模拟生成系统时钟。

    date  [MMDDhhmm[[CC]YY][.ss]]  //月 日 小时 分钟 年 . 秒

    修改系统时间,如:date 1228235912.30 或 date 122823592012.30



    date [OPTION]... [+FORMAT]

    date +%D  ---- 月/日/年

    date +"This year is %Y, %n Today is %d"



8. clock/hwclock: 查看硬件时钟

clock和hwclock用法相近,只不过clock命 令除了支持x86硬件体系外,还支持Alpha硬件。

         -w: 系统时钟写入硬件时钟

         -s: 硬件时钟写入系统时钟

 

 

9. man: 显示命令manual pages

获得命令的使用帮助方式:

(1)内部命令:

         help COMMAND (提示:man + 内部命令 查看到的是shell的帮助)

(2)外部命令:

         COMMAND --help  

(3)命令手册:manual

        man COMMAND

(4)在线文档:

        info COMMAND

(5)文档:/usr/share/doc

(6)google



MAN pages中各个小章节:

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

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

                使用格式说明中的符号:

                    <>:必选

                    []:可选

                    ...:可以出现多次

                    |:多选一

                    {}:分组

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

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

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

         BUGS:

         EXAMPLES:使用示例

         SEE ALSO:另外参照

 

man pages中操作:

翻屏:

         向后翻一屏:f / SPACE

         向前翻一屏:b

         向后翻一行:j / ENTER

         向前翻一行:k

 

查找:

/KEYWORD: 向后

n: 下一个, N:前一个

 

?KEYWORD:向前

n: 下一个, N:前一个

 

退出:q

 

 

 

10. whatis COMMAND: 查看该命令属于那些章节

 

man分章节:

1:用户命令(/bin, /usr/bin, /usr/local/bin)

2:系统调用

3:库用户

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

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

6:游戏

7:杂项(Miscellaneous)

8:管理命令(/sbin, /usr/sbin, /usr/local/sbin)

 

练习:

         使用date单独获取系统当前的年份、月份、日、小时、分钟、秒

        date +%Y, date +%m, date +%d, date +%H, date +%M, date +%S



11. cal: calendar

     cal 2013: 查看2013年日历

     cal 12 2013: 查看2013年12月日历

 

练习:

1、echo是内部命令还是外部命令?

2、其作用?

3、如何显示“The year is 2013. Today is 26.”为两行?

 

1、type echo

2.、man type

3、echo -e "The year is 2013. \nToday is 26." 

 

12. echo: 回声

    -n 不换行

    -e 开启转义字符

 

练习:

1、printf是内部命令还是外部命令?

2、其作用?

3、如何显示“The year is 2013. Today is 26.”为两行?

 

1、type printf

2、man printf

3、printf "The year is 2013. \nToday is 26.\n"



13. printf: 打印

类似printf 函数用法

printf "The year is %d. \nToday is %d.\n" `date +%Y` `date +%d`



14. file:确定文件格式

Windows: PE

Linux: ELF

 第三章、Linux根文件系统及文件管理命令详解



02_03_Linux根文件系统详解



文件系统:

rootfs: 根文件系统

 

FHS:Filesystem Hierarchy Standard(文件系统目录标准)的缩写,多数Linux版本采用这种文件组织形式,类似于Windows操作系统中c盘的文件目录,FHS采用树形结构组织文件。FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理。



根目录下的目录:

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

/dev: 设备文件

         设备文件:

                   块设备:随机访问,数据块

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

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

/etc:配置文件

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

/root:管理员的家目录;

/lib:库文件

         静态库,  .a

         动态库, .dll, .so (shared object)

         /lib/modules:内核模块文件

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

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

/opt:可选目录,第三方程序的安装目录

/proc:伪文件系统,内核映射文件

/sys:伪文件系统,跟硬件设备相关的属性映射文件

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

/var:可变化的文件

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

/sbin:管理命令

 

/usr:universal shared read-only 

    有的说全称为:User System Resources, 见 http://www.ansen.org/2011/11/means-of-usr.html

         /usr/bin

         /usr/sbin

         /usr/lib

        

/usr/local:

         /usr/local/bin

         /usr/local/sbin

         /usr/local/lib

 

文件命名规则:

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

2、不能使用/当文件名

3、严格区分大小写

 

相对路径:以"./"开头的路径,默认

绝对路径: 以"/"开头的路径

 

使用一个操作系统主要工作:

文件管理

目录管理

运行程序

设备管理

软件管理

网络管理

        

目录管理

前面介绍过的:ls、cd、pwd

 

1. mkdir:创建空目录

         -p:

         -v: verbose

 

mkdir -pv /mnt/test/x/m /mnt/test/y

mkdir -pv /mnt/test/{x/m,y}

 

波浪线展开:~USERNAME



命令行展开:

在/mnt/test2/下创建a_b, a_c, d_b, d_c 四个目录

(a+d)(b+c)=ab+ac+db+dc

mkdir /mnt/test2/{a,d}_{b,c}  #作为一个参数中间不可有空格

 

2. tree:查看目录树

 

3. rmdir (remove directory) 删除目录

         删除空目录

         -p 如果父目录为空,同样删除

        

文件创建和删除

4. touch修改文件时间戳

         -a 仅修改访问时间

         -m 仅修改修改时间

         -t  指定时间为 [[CC]YY]MMDDhhmm[.ss]

         -c 不创建文件



5. stat:显示文件状态

    包括: 访问,修改,改变时间



创建文件,可以使用文件编辑器 nano

 

6. rm:删除文件

         -i interactive 交互式

         -f force 强制

         -r recursive 递归

        

练习:

1、创建目录

(1)在/mnt下创建boot和sysroot;

(2)在/mnt/boot下创建grub;

(3)在/mnt/sysroot下创建proc, sys, bin, sbin, lib, usr, var, etc, dev, home, root, tmp

         a)在/mnt/sysroot/usr下创建bin, sbin, lib

         b)在/mnt/sysroot/lib下创建modules

         c)在/mnt/sysroot/var下创建run, log, lock

         d)在/mnt/sysroot/etc下创建init.d

        

(1) mkdir /mnt/{boot,sysroot}

(2) mkdir /mnt/boot/grub

(3) mkdir -p /mnt/sysroot/{proc,sys,bin,sbin,lib/modules,usr/{bin,sbin,lib},var{run,log,lock},etc/init.d,dev,home,root,tmp} 

 

02_04_Linux文件管理命令详解

 

复制和移动文件

7. cp: copy

cp SRC DEST

         -R, -r, --recursive 递归

         -i,--interactive 交互

         -f --force 强制

         -p   same as --preserve=mode,ownership,timestamps

         -P,--no-dereference      never follow symbolic links in SOURCE

         -L, --dereference            always follow symbolic links in SOURCE

         -d  same as --no-dereference --preserve=links 

         -a,--archive  same as -dR --preserve=all 归档复制,常用于备份

        

cp file1 file2 file3

一个文件到一个文件

多个文件到一个目录

cp /etc/{passwd,inittab,rc.d/rc.sysinit} /tmp/

 

复制文件时如果目标存在。1. 目标为文件,提示覆盖。2. 目标为目录,复制的文件放到目录下。

复制目录时如果目标存在。1.目标为文件,无法覆盖。2. 目标为目录,复制源目录下所有文件到新目录下,如果文件重复,提示覆盖。



8. mv: move 移动文件

 

mv SRC DEST

mv -t DEST SRC

 

9. install: 复制文件并设置属性

         -d DIRECOTRY ... :创建目录

         SRC DEST

          -t 指定目录

          -m 设置权限

install -t DIRECTORY SRC...



install 不能复制目录。 



作业1:

1、创建目录/backup

# mkdir -v /backup

2、复制目录/etc至/backup目录中,并重命名为“etc-当前日期”,如etc-2013-02-26;要求保留文件原来的属性,保持链接文件;

# cp -a /etc /backup/etc-2013-02-28  

3、复制文件/etc/inittab为/tmp/inittab.new,并删除inittab.new文件的后两行;

# cp /etc/inittab  /tmp/inittab.new

# nano /tmp/inittab.new

 

作业2:

1、思考:ls命令是否可以显示某目录的整体大小,即包括其内部的所有文件的整体大小?

2、通过帮助手册,学习使用du命令;

3、通过帮助,学习read命令;

 

1、不能,du可以

2、du -s -h

3、read var

 

03_01_Linux文件管理类命令详解



作业3:

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

 

自由软件

开源协定,版权描述

 

作业4:

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

         www.kernel.org

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

         Linux, GNU: GNU/Linux, 源代码

        

         发行版:Fedora, RedHat(CentOS), SUSE, Debian(Ubuntu, Mint), Gentoo, LFS(Linux From Scratch)

        

RedHat: 通用格式,为了能支持大多数的CPU,编译出来的二进制可执行程序在较低平台上编译。为了发挥硬件最大性能,自己编译一个针对自己平台的Linux,Gento和LFS提供了这种方式。

 

复习:

运行程序

设备管理

软件管理

进程管理

网络管理

 

目录管理:

ls、cd、pwd、mkdir、rmdir、tree

 

文件管理:

touch、stat、file、rm、cp、mv、nano

 

日期时间:

date、clock、hwclock、cal

 

查看文本:

cat、tac、more、less、head、tail

 

10. cat:连接并显示

         -n 显示行号

         -E Show end, 行尾显示$

        

shift + pageup/pagedown 在终端缓存中翻页

分屏显示:

more、less

 

11. more: 向后翻

12. less:

 man命令就是在用less命令查看文档。

 

13. head:查看前n行

    n 默认为10

head -n 2 == head -2



14. tail:查看后n行

         -n 默认为10    

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

 

文本处理:

cut、join、sed、awk

 

文本文件:

Tom:23:male:2013/05/06

 

15. cut:

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

         -f: 指定要显示的字段

                   -f 1,3

                   -f 1-3

 

16. sort : 文本排序

         -n:数值排序

         -r: 降序

         -t, --field-separator=SEP: 字段分隔符

         -k, --key=POS1[,POS2]: 以哪个字段为关键字进行排序

         -u: 排序后相同的行只显示一次

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

        

17. uniq: 去掉重复的行(必须相邻)

         -c, --count: 显示文件中行重复的次数

         -d, --repeated:  only print duplicate lines 只显示重复的行

        

18. wc: (word count) 文本统计

         -l, --lines 只显示行数

         -w, --words 

         -c, --bytes

         -L, --max-line-length 

 

不使用参数,默认显示:行,单词,字节数



19. tr:字符处理命令 —— 转换或删除字符

tr [OPTION]... SET1 [SET2]

         -d: 删除出现在字符集中的所有字符(只能有SET1)

 把SET1中字符转换成SET2中字符,SET1 和SET2一对应, 如:tr ab AB, 会把a 换成A,b换成B

第四章、bash特性详解



03_02_base特性详解 



bash及其特性:

shell: 外壳

GUI:Gnome, KDE, Xfce

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

 

Linux允许同一个用户登录多次

root, student

程序:进程

 

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

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

 

用户工作环境:

bash:

         #

         $

        

shell,子shell

bash--bash

 

bash:

1、命令历史、命令补全

2、管道、重定向

3、命令别名

4、命令行编辑

5、命令行展开

6、文件名通配

7、变量

8、编程

 

命令行编辑:

光标跳转:

         Ctrl+a:跳到命令行首

         Ctrl+e:跳到命令行尾

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

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

         Ctrl+l: 清屏

        

命令历史:

查看命令历史:history

         -c:清空命令历史

         -d OFFSET [n]: 删除指定位置的命令

         -w:保存命令历史至历史文件中

        

环境变量

PATH:命令搜索路径

HISTSIZE: 命令历史缓冲区大小

 

命令历史的使用技巧:推荐一篇文章《让效率翻倍的Bash技巧》

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

!-n:执行命令历史中的倒数第n条命令;

!!: 执行上一条命令;

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

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

Esc, .:引用前一个命令的最后一个参数;

Alt+.

 

命令补全: tab

         搜索环境变量PATH记录的路径。

路径补全:tab

 

文本相关的命令

查看:cat, tac, more, less, head, tail

统计:wc

处理:tr, cut, join

排序:sort

uniq





03_03_base特性详解 

 

复习:

bash特性:

命令行编辑:

命令历史:

         history           -c         -w          -d

         HISTSIZE

         ~/.bash_history

 

!n, !-n, !!, !string, !$

 

命令补全,路径补全

命令补全:搜索PATH环境变量所指定的每个路径下以我们给出的字符串开头的可执行文件,如果多于一个,两次tab,可以给出列表;否则将直接补全;

路径补全:搜索我们给出的起始路径下的每个文件名,并试图补全;

 

命令别名

定义:alias CMDALIAS='COMMAND [options] [arguments]'

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

 

取消:unalias CMDALIAS

 

使用命令本身: \CMD

 

命令替换: $(COMMAND), 反引号:`COMMAND`

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

eg:

1. echo "The current directory is $(pwd)."

2. echo "file-$(date +%F-%H-%M-%S)"   -------------  file-2013-02-28-14-53-31.txt

    %F     full date; same as %Y-%m-%d

    %H     hour (00..23)

    %M     minute (00..59)

    %S     second (00..60)

    %T     time; same as %H:%M:%S

 

bash支持的引号

``: 反引号,命令替换

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

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

 

文件名通配, globbing

*: 任意长度的任意字符

?:任意单个字符

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

         [abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]

         [:space:]:空白字符

         [:punct:]:标点符号

         [:lower:]:小写字母

         [:upper:]: 大写字母

         [:alpha:]: 大小写字母

         [:digit:]: 数字

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

        

# man 7 glob 查看这些内置特殊字符表示



[^]: (脱字符) 匹配指定范围之外的任意单个字符

 

[[:alpha:]]*[[:space:]]*[[:alpha:]] : 字母开头,字母结尾,中间有空格

 

练习:

1、创建a123, cd6, c78m, c1 my, m.z, k 67, 8yu, 789等文件;注意,以上文件是以逗号隔开的,其它符号都是文件名的组成部分;

2、显示所有以a或m开头的文件;

ls [am]*

3、显示所有文件名中包含了数字的文件;

ls *[0-9]*

ls *[[:digit:]]*

4、显示所有以数字结尾且文件名中不包含空白的文件;

ls *[^[:space:]]*[0-9]   ?????????    --  正则表达式可以解决

5、显示文件名中包含了非字母或数字的特殊符号的文件;

ls *[^[:alnum:]]*

ls *[^a-zA-Z0-9]*

 第五章、Linux用户及权限详解



03_04_Linux用户及权限详解

 

今天内容:

用户、组、权限

 

用户,用户组: 都只是标识符

 

安全上下文(secure context):

 

权限:

r, w, x

 

文件:

r:可读,可以使用类似cat等命令查看文件内容;

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

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

 

目录:

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

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

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

 

rwx:

         r--:只读

         r-x:读和执行

         ---:无权限

        

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:属主 属组 其他

 

rw-r-----: 640

 

660: rw-rw----

rwxrwxr-x: 775

 

用户:UID, /etc/passwd

:GID, /etc/group

 

影子口令

用户:/etc/shadow

组:/etc/gshadow

 

用户类别:

管理员:0

普通用户: 1-65535

         系统用户:1-499, 不需要登录系统,只用来运行某些后台服务

         一般用户:500-60000

 

用户组类别:

管理员组:

普通组:

         系统组:

         一般组:

        

用户组类别:

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

         基本组:用户的默认组

         附加组,额外组:默认组以外的其它组

    

e.g:    

进程:tom tom

对象:rwxrw-r--  jerry tom a.txt

 

tom执行ls命令

rwxr-xr-x root root /bin/ls, 文件属主各属组



ls 运行时,进程的属主是运行的用户

 

man 5 passwd

/etc/passwd

account: 登录名

password: 密码

UID:

GID:基本组ID

comment: 注释

HOME DIR:家目录

SHELL:用户的默认shell, cat /etc/shells查看合法shell

 

man 5 shadow: 查看/etc/shadow文件格式

/etc/shadow

account: 登录名

encrypted password: 加密的密码,两个!号表示定,不允许登录。格式: $1位$8位$密码

 

1位段: 加密方法

8位段:杂质(随机生成)



加密方法:

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

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

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

                  特性: 1、雪崩效应  2、定长输出

                  MD5:Message Digest, 128位定长输出

                  SHA1:Secure Hash Algorithm, 160位定长输出

 

非对称加密更长,速度慢,慢3个数量级(1000倍以上) 



用户,组添加

useradd USERNAME

groupadd GRPNAME

 

用户管理:

         useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage

 

组管理:

         groupadd, groupdel, groupmod, gpasswd

        

权限管理:

         chown, chgrp, chmod, umask

 

 

/etc/passwd:

用户名:密码:UID:GID:注释:家目录:默认SHELL

 

/etc/group:

组名:密码:GID:以此组为其附加组的用户列表

 

/etc/shadow:

用户名:密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告时间:非活动时间:过期时间:

 

用户管理:

         useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage

 



 04_01_Linux用户管理命令详解



1. useradd  [options]  USERNAME

         -u UID

         -g GID(基本组)

         -G GID,...  (附加组) 一个用户可以属于多个附加组

         -c "COMMENT"

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

         -s SHELL ; /etc/shells:指定了当前系统可用的安全shell

         -m  -k  创建家目录,并复制SKEL_DIR(default: /etc/skel) 下的文件到家目录

         -M 不创建用户主目录,即使系统在 /etc/login.defs 中的设置 (CREATE_HOME) 为 yes。

         -r: 添加系统用户

        

/etc/login.defs  用户操作的一些选项

 

环境变量:

         PATH

         HISTSIZE

         SHELL



 

2. userdel:

userdel [option] USERNAME

         -r: 同时删除用户的家目录

 

3. id:查看用户的帐号属性信息

         -u 显示uid

         -g 显示基本组id

         -G 显示附加组id

         -n 显示名称,而非ID号,结合其它选项

 

4. finger: 查看用户帐号信息

finger USERNAME

 

5. usermod: 修改用户帐号属性

         -u UID

         -g GID

         -a -G GID:不使用-a选项,会覆盖此前的附加组;

         -c "COMMENT"

         -d -m:修改家目录,并复制原家目录下文件到新家目录下

         -s :  shell

         -l : 修改用户名

         -L:锁定帐号

         -U:解锁帐号

        

6. chsh: 修改用户的默认shell

 

7. chfn:change finger 修改更改真名和信息,注释信息

 

8. passwd [USERNAME]: 密码管理

         --stdin  从标准输入接收密码, echo "redhat" | passwd --stdin root

         -l  lock

         -u unlock

         -d: 删除用户密码

 

9. pwck:检查用户帐号完整性

 

组管理:

10. groupadd创建组

         -g GID

         -r:添加为系统组

        

11. groupmod

         -g GID

         -n GRPNAME

 

12. groupdel

 

13. gpasswd:为组设定密码

 

14. newgrp GRPNAME <--> exit(退出临时组): 临时切换为其他基本组,这时候需要用到组密码(切换到自己的附加组不需要)

        

 

练习:

1、创建一个用户mandriva,其ID号为2002,基本组为distro(组ID为3003),附加组为linux;

# groupadd -g 3003 distro

# groupadd linux

# useradd -u 2002 -g distro -G linux mandriva

2、创建一个用户fedora,其全名为Fedora Community,默认shell为tcsh;

# useradd -c "Fedora Community" -s /bin/tcsh fedora

3、修改mandriva的ID号为4004,基本组为linux,附加组为distro和fedora;

# usermod -u 4004 -g linux -G distro,fedora mandriva

4、给fedora加密码,并设定其密码最短使用期限为2天,最长为50天;

# passwd -n 2 -x 50 fedora

 

5、将mandriva的默认shell改为/bin/bash;

usermod -s /bin/bash mandirva

6、添加系统用户hbase,且不允许其登录系统;

# useradd -r -s /sbin/nologin hbase

7、

 

chage:修改用户密码过期时间

         -d: 最近一次的修改时间

         -E: 过期时间

         -I:非活动时间

         -m: 最短使用期限

         -M: 最长使用期限

         -W: 警告时间

 

04_02_权限及权限管理



复习:

权限管理:

r:

w:

x:

 

三类用户:

u: 属主

g: 属组

o: 其它用户

 

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

# chown USERNAME file,...

         -R: 修改目录及其内部文件的属主

         --reference=/path/to/somefile file,...

 

chown USERNAME:GRPNAME file,...

chown USERNAME.GRPNAME file,...

        

2. chgrp: 改变文件属组

# chgrp GRPNAME file,...

         -R:recursive

         --reference=/path/to/somefile file,...

        

3. chmod: 修改文件的权限

修改三类用户的权限:

chmod MODE file,...

         -R:recursive

         --reference=/path/to/somefile file:参考某个文件设定权限

 

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

u,g,o,a

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



e.g: chmod go=rw,u=r /tmp/abc



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

u,g,o,a

chmod 用户类别+|-MODE file,...

chmod u-x /tmp/abc

chmod u+x,g-x /tmp/abc

chmod u-rx /tmp/abc



 

练习:

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

# useradd -M openstack

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

# cp -r /etc/skel /home/openstack

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

# chown -R openstack:openstack /home/openstack

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

# chmod -R go= /home/openstack

 

&n

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章