Linux操作系统基础及常用命令

时间:2022-09-22 17:01:11

计算机体系结构:

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

POST:BIOS 自举

程序:指令+数据

RAM,ROM

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

OS:Windows,Linux,Unix(HP-UX,Solaris,AIX,SCO UNIX,Unixware),OS/2

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

批处理系统

GE,Bell,MIT

汇编语言: Multics  Ken,Space Travel

DEC:PDP-11,PDP-7    VAX-->vms

Unics --> Unix 

B-->C

Bill Joy:BSRG

BSD:Berkeley System Distribution

System V     81,Microsoft,Xenix     CP/M-->DOS

Xerox:复印机 PARK

FreeBSD,OpenBSD,NetBSD

Sun MicroSystem    Sun OS --> Solaris   CSH

Windows NT Server     Andrew:Minix      Linus:Linux

80,Stallman,Freedom

GNU:GNU is Not Unix    GPL:General Public License    LGPL:Lesser   GPLv2    GPLv3    BSD,Apache

开源:开放源代码。  *:*获取,*修改,*学习。

Emacs: 文本编辑器  gcc:GNU C Complier    Linux:glibc,gcc    GNU/Linux

源代码:C-->编译成二进制(交叉编译)

ABI:Application Binary Interface

RedHat,SLS,Debian,  SUSE-->Novell(Netware),OpenSUSE

发行商:release

Debian, dpt    RedHat, rpm    Ubuntu: Mint    CentOS: Community ENTerprise OS     Fedora:      Mandriva

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

虚拟终端(terminal):Ctrl+Alt+F1-F6
GUI:Gnome: C     KDE: C++       XFace
CLI:sh,bash,csh,zsh,ksh,tcsh

密码复杂性规则:10^6,36^6,62^6,100^6
Linuxedu@126.com
1、使用4种类别字符中至少3种;
2、足够长,大于7位;
3、使用随机字符串;
4、定期更换;
5、循环周期足够大;

list: ls列出,列表
目录:文件,路径映射
路径:从指定起始点到目的地所经过位置
文件系统: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)显示

目录:working directory, current directory
pwd: Printing Working directory

cd: change directory
    家目录,主目录, home directory
    cd ~USERNAME: 进入指定用户的家目录
    cd -:在当前目录和前一次所在的目录之间来回切换

命令类型:
    内置命令(shell内置),内部,内建
    外部命令:在文件系统的某个路径下有一个与命令名称相应的可执行文件

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

date:时间管理
Linux: rtc  硬件时钟,系统时钟

获得命令的使用帮助:
内部命令:
    help COMMAND
外部命令:
    COMMAND --help
命令手册:manual
man COMMAND

whatis COMMAND

分章节:

1:用户命令(/bin, /usr/bin, /usr/local/bin)
2:系统调用
3:库用户
4:特殊文件(设备文件)
5:文件格式(配置文件的语法)
6:游戏
7:杂项(Miscellaneous)
8: 管理命令(/sbin, /usr/sbin, /usr/local/sbin)
<>:必选
[]:可选
...:可以出现多次
|:多选一
{}:分组

MAN:
    NAME:命令名称及功能简要说明
    SYNOPSIS:用法说明,包括可用的选项
    DESCRIPTION:命令功能的详尽说明,可能包括每一个选项的意义
    OPTIONS:说明每一个选项的意义
    FILES:此命令相关的配置文件
    BUGS:
    EXAMPLES:使用示例
    SEE ALSO:另外参照

翻屏:
    向后翻一屏:SPACE    向前翻一屏:b    向后翻一行:ENTER    向前翻一行:k

查找:
/KEYWORD: 向后    n: 下一个    N:前一个

?KEYWORD:向前    n: 下一个    N:前一个

hwclock:

-r, --show         读取并打印硬件时钟(read hardware clock and print result)
-s, --hctosys      将硬件时钟同步到系统时钟(set the system time from the hardware clock)
-w, --systohc     将系统时钟同步到硬件时钟(set the hardware clock to the current system time)

Linux操作系统基础及常用命令

Linux操作系统基础及常用命令

练习:
1、echo是内部命令还是外部命令?    2、其作用?    3、如何显示“The year is 2013. Today is 26.”为两行?

Linux操作系统基础及常用命令

练习:
1、printf是内部命令还是外部命令?    2、其作用?    3、如何显示“The year is 2013. Today is 26.”为两行?

Linux操作系统基础及常用命令

文件系统:
rootfs: 根文件系统
FHS:Linux
/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: 可执行文件, 用户命令
/sbin:管理命令
/usr:shared, read-only
    /usr/bin
    /usr/sbin
    /usr/lib
/usr/local:
    /usr/local/bin
    /usr/local/sbin
    /usr/local/lib
命名规则:
1、长度不能超过255个字符;
2、不能使用/当文件名
3、严格区分大小写

文件管理
目录管理
ls,cd,pwd
mkdir:创建空目录
    -p:若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
    -v: verbose

/root/x/y/z
/mnt/test/x/m,y
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
{a,d}_{b,c}

# tree:查看目录树
删除目录:rmdir (remove directory)    删除空目录    -p

Linux操作系统基础及常用命令

删除文件:rm

Linux操作系统基础及常用命令

复制:cp SRC DEST

-a:该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。
-d:拷贝时保留链接。
-f:删除已经存在的目标文件而不提示。
-i:和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。
-p:此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。
-l:不作拷贝,只是链接文件。

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

mv: move    移动文件    mv SRC DEST

1、创建目录/backup
# mkdir -v /backup
2、复制目录/etc至/backup目录中,并重命名为“etc-当前日期”,如etc-2013-02-26;要求保留文件原来的属性,保持链接文件;
# cp -a /etc /backup/etc-$(date +%y-%m-%d)
3、复制文件/etc/inittab为/tmp/inittab.new,并删除inittab.new文件的后两行;
# cp /etc/inittab  /tmp/inittab.new
# nano /tmp/inittab.new
Linux操作系统基础及常用命令

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

Linux操作系统基础及常用命令

Linux操作系统基础及常用命令

目录管理:
ls、cd、pwd、mkdir、rmdir、tree
文件管理:
touch、stat、file、rm、cp、mv、nano
日期时间:
date、clock、hwclock、cal
查看文本:
cat、tac、more、less、head、tail

文本处理:
cut、join、sed、awk

cut:
    -d: 指定字段分隔符,默认是空格
    -f: 指定要显示的字段
        -f 1,3
        -f 1-3

文本排序:sort
    -n:数值排序
    -r: 降序
    -t: 字段分隔符
    -k: 以哪个字段为关键字进行排序
    -u: 排序后相同的行只显示一次
    -f: 排序时忽略字符大小写

uniq:
    -c: 显示文件中行重复的次数
    -d: 只显示重复的行

文本统计:wc (word count)

-c 统计字节数。

-l 统计行数。

-m 统计字符数。这个标志不能与 -c 标志一起使用。

-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。

-L 打印最长行的长度。

-help 显示帮助信息

--version 显示版本信息

字符处理命令:tr —— 转换或删除字符
tr [OPTION]... SET1 [SET2]
    -d: 删除出现在字符集中的所有字符


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: 命令历史缓冲区大小

命令历史的使用技巧:
!n:执行命令历史中的第n条命令;
!-n:执行命令历史中的倒数第n条命令;
!!: 执行上一条命令;
!string:执行命令历史中最近一个以指定字符串开头的命令
!$:引用前一个命令的最后一个参数;
Esc, .
Alt+.    

命令补全:
    PATH:
路径补全:
文本相关的命令
查看:cat, tac, more, less, head, tail
统计:wc
处理:tr, cut, join
排序:sort
uniq
bash特性:
命令行编辑:
命令历史:
    history
        -c
        -w
        -d
    HISTSIZE
    ~/.bash_history
!n, !-n, !!, !string, !$
命令补全,路径补全
命令补全:搜索PATH环境变量所指定的每个路径下以我们给出的字符串开头的可执行文件,如果多于一个,两次tab,可以给出列表;否则将直接补全;
路径补全:搜索我们给出的起始路径下的每个文件名,并试图补全;
命令别名
alias CMDALIAS='COMMAND [options] [arguments]'
在shell中定义的别名仅在当前shell生命周期中有效;别名的有效范围仅为当前shell进程;
ualias CMDALIAS
\CMD
命令替换: $(COMMAND), 反引号:`COMMAND`
把命令中某个子命令替换为其执行结果的过程
file-2013-02-28-14-53-31.txt
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:]]*


用户、组、权限
安全上下文(secure context):
权限:r, w, x
文件:
r:可读,可以使用类似cat等命令查看文件内容;
w:可写,可以编辑或删除此文件;
x: 可执行,eXacutable,可以命令提示符下当作命令提交给内核运行;
目录:
r: 可以对此目录执行ls以列出内部的所有文件;
w: 可以在此目录创建文件;

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


用户:UID, /etc/passwd
组:GID, /etc/group

影子口令:
用户:/etc/shadow
组:/etc/gshadow

用户类别:
管理员:0
普通用户: 1-65535
    系统用户:1-499
    一般用户:500-60000

用户组类别:
管理员组:
普通组:
    系统组:
    一般组:

用户组类别:
    私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组
    基本组:用户的默认组
    附加组,额外组:默认组以外的其它组

/etc/passwd
account: 登录名
password: 密码
UID:
GID:基本组ID
comment: 注释
HOME DIR:家目录
SHELL:用户的默认shell

/etc/shadow
account: 登录名

encrypted password: 加密的密码

加密方法:
    对称加密:加密和解密使用同一个密码
    公钥加密:每个密码都成对儿出现,一个为私钥(secret key),一个为公钥(public key)
    单向加密,散列加密:提取数据特征码,常用于数据完整性校验
        1、雪崩效应
        2、定长输出
            MD5:Message Digest, 128位定长输出

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

用户管理:
    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  [options]  USERNAME
    -u UID
    -g GID(基本组)
    -G GID,...  (附加组)
    -c "COMMENT"
    -d /path/to/directory
    -s SHELL
    -m -k
    -M

    -r: 添加系统用户

/etc/shells:指定了当前系统可用的安全shell
userdel [option] USERNAME
    -r: 同时删除用户的家目录
id:查看用户的帐号属性信息
    -u,-g,-G,-n
finger: 查看用户帐号信息
finger USERNAME

修改用户帐号属性:
usermod
    -u UID
    -g GID
    -a -G GID:不使用-a选项,会覆盖此前的附加组;
    -c
    -d -m:
    -s
    -l
    -L:锁定帐号
    -U:解锁帐号
chsh: 修改用户的默认shell
chfn:修改注释信息

密码管理:
passwd [USERNAME]
    --stdin
    -l
    -u
    -d: 删除用户密码
pwck:检查用户帐号完整性

组管理:
创建组:groupadd
groupadd
    -g GID
    -r:添加为系统组
groupmod
    -g GID
    -n GRPNAME
groupdel
gpasswd:为组设定密码
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

chage
    -d: 最近一次的修改时间
    -E: 过期时间
    -I:非活动时间
    -m: 最短使用期限
    -M: 最长使用期限
    -W: 警告时间

chown: 改变文件属主(只有管理员可以使用此命令)
# chown USERNAME file,...
    -R: 修改目录及其内部文件的属主
    --reference=/path/to/somefile file,...
chown USERNAME:GRPNAME file,...
chown USERNAME.GRPNAME file,...
    
# chgrp GRPNAME file,...
    -R
    --reference=/path/to/somefile file,...

chmod: 修改文件的权限
修改三类用户的权限:
chmod MODE file,...
    -R
    --reference=/path/to/somefile file,...
rwxr-x---
修改某类用户或某些类用户权限:
u,g,o,a
chmod 用户类别=MODE file,...
修改某类用户的某位或某些位权限:
u,g,o,a
chmod 用户类别+|-MODE file,...

练习:
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

umask:遮罩码    666-umask    777-umask
# umask
# umask 022
文件默认不能具有执行权限,如果算得的结果中有执行权限,则将其权限加1;
umask: 023
文件:666-023=643 X
目录:777-023=754

站在用户登录的角度来说,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/basrc --> /etc/profile.d/*.sh

系统设定
    默认输出设备:标准输出,STDOUT, 1
    默认输入设备:标准输入, STDIN, 0
    标准错误输出:STDERR, 2
标准输入:键盘
标准输出和错误输出:显示器
I/O重定向:
Linux:
>: 覆盖输出
>>:追加输出
set -C: 禁止对已经存在文件使用覆盖重定向;
    强制覆盖输出,则使用 >|
set +C: 关闭上述功能

2>: 重定向错误输出
2>>: 追加方式
&>: 重定向标准输出或错误输出至同一个文件
<:输入重定向
<<:Here Document
管道:前一个命令的输出,作为后一个命令的输入
命令1 | 命令2 | 命令3 | ...

练习:
1、统计/usr/bin/目录下的文件个数;
# ls /usr/bin | wc -l
2、取出当前系统上所有用户的shell,要求,每种shell只显示一次,并且按顺序进行显示;
# cut -d: -f7 /etc/passwd | sort -u
3、思考:如何显示/var/log目录下每个文件的内容类型?
4、取出/etc/inittab文件的第6行;
# head -6 /etc/inittab | tail -1
5、取出/etc/passwd文件中倒数第9个用户的用户名和shell,显示到屏幕上并将其保存至/tmp/users文件中;
# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/users
6、显示/etc目录下所有以pa开头的文件,并统计其个数;
# ls -d /etc/pa* | wc -l
7、不使用文本编辑器,将alias cls=clear一行内容添加至当前用户的.bashrc文件中;
# echo "alias cls=clear" >> ~/.bashrc