linux的基本原则
1、由目的单一的小程序组成,组合小程序完成复杂任务;
2、一切皆为文件;
3、尽量避免捕获用户接口;
4、配置文件保存为纯文本格式
linux系统组成
计算机硬件:cpu、硬盘等。
kernel:使得系统可以同时近似运行多个程序,仅仅是一个平台,将硬件的计算能力抽象出来以系统调用的方式(system call)交给其他上层软件;
window上有DLL
(dynamic link library,动态链接库)
linux上是.so
(shared object)
library_API:由于系统调用过于底层,库的作用就是将一个或者多个系统调用封装起来做成更高级的接口,无法独立执行,只有在被调用的时候才执行(共享库)。
开发环境:独特的用户界面,
图形化界面GUI,例如 Gnome_C、KED_C++、XFace;
CLI接口(命令行):Commond Line Interface,类别有shell、bash、csh、zsh、ksh、tcsh
bashell
一般在用户登录后会打开bash等应用。
进程:在每个进程看来,当前主机上只存在内核和当前进程,其实就是分区的概念。进程是程序的副本,是程序执行的实例,即为用户的工作环境不一样。
shell内也可打开shell,多层,多次启动shell命令,利用exit逐个退出当前shell,pstree
可以查看层次。
命令历史
history
:查看命令历史;
清空命令历史:-c
-d n offset
:偏移量,从指定位置删除历史列表。
ls -a
先显示隐藏文件,命令历史是保存在文件.bash_history
中。
-w
:保存命令历史至历史文件中。可以设置大小。环境变量HISTZISE
,默认是1000条,echo $HISTSIZE
可以查看。
使用技巧:
!n
:显示并执行第n条命令;
!-n
:显示并执行倒数第n条命令;
!!
:显示上一条命令, esc加.
;
!s
:显示并执行最近一次以s开头的命令;
命令别名:
alias cls=clear
:修改clear命令为cls;
在shell中定义的别名仅在当前shell生命周期(进程)中有效;
alias
:显示当前系统的所有别名;
撤销指定的别名:unalias cls
\原命令
:使用原来
命令替换:
""
:弱应用,可以实现变量替换;
‘‘
:强引用,不完成变量替换;
`:命令替换;
$(COMMAND),也可以使用反引号``COMMAND``:把命令中某个子命令替换成其执行结果的过程。
echo "asdsad is $(pwd)":将pwd的执行结果显示在字符串中,注意字符串内容必须是双引号; 例如新建以当前时间命名的文件:
touch file-$(date +%F-%H-%S).txt`
命令行编辑:
光标跳转:ctrl+a
跳到行首,ctrl+e
跳到行尾,ctrl+u
删除光标至行首,ctrl+k
删除光标至行首,ctrl+l
实现清屏;
文件名通配符globbing
:
*
:任意长度的任意字符,例如ls a*3
查找以a开头以3结尾的文件;
?
:匹配任意单个字符;
[]
:匹配指定范围内的任意单个字符,[a-zA-Z]
、[A-Z]
、[0-9]
,例如[0-9]*[0-9]
匹配文件名以数字开头和结尾的文件;
[^]
:非,例如[^0-9]
以非数字开头的文件;
空白字符:[[:space:]]
,[:space:]
表示空白字符集;
[:lower:]
:小写字符;
[:upper:]
:大写字符;
[:alpha:]
:大小写字符;
[:digit:]
:数字;
[:alnum:]
:数字和大小写;
[:punct:]
:标点字符;
以上可以用man 7 glob
查看;
管道,支持重定向:
命令行展开:
变量:
编程:
补全功能:
命令补全和路径补全。
安全相关
用户名:使用标识。严格区分大小写,用户ID;
认证机制(Authentication):密码,指纹,虹膜等;
密码复杂性规则:例如6位密码:
数字:10^6
数字加字母:36^6
数字加大小写字母:62^6
再加上特殊字符:100^6;
密码使用规则:
1、使用4种类别字符种至少三种;
2、足够长,大于7位;
3、使用随机字符串;
4、定期更换;
5、循环周期足够大;
用户权限管理
授权:Authorization
权限:root,student,visitor
用户切换:su
即switch user
,例如su root
切换到管理员模式。
审计:Audition
命令提示符:prompt,bash(shell)
#
:root用户
$
:普通用户;
命令
格式:命令(command)+选项(option)+参数(argument)。
选项:修改命令的执行特性:
短选项,-char
,多个选项可以组合使用:-b -a
== ‘-ab‘ ==‘--ba‘;用空格隔开;
长选项:--...
不能使用空格。
参数:命令的作用对象,例如ls /root /bin
也可以指定多个目录,显示两个目录下的内容。
命令类型:
内置命令(shell内置):type 命令
显示built in
外部命令:在文件系统中的某个路径下有一个命令名相同的可执行文件,例如type ls
;
环境变量:定义当前用户的工作环境:
printenv
:显示当前工作环境;
path
:显示工作路径,在其中查找命令,首次会在path中查找,随后会缓存起来。
hash
:命令会存储起来,下次使用命令会优先在缓存中查找。内部是键值对格式,O(1)
,查找速度与数量无关!
变量:命名的内存空间,指向内存空间;
栈;
堆;
echo
:显示行文本相关,默认结尾带换行符;
printf
:必须手动指定换行符\n
;
Manual命令帮助
查看内置命令:help Command
;
查看外部命令:Command --help
;
利用man查看命令:man chap_num command
:
查看命令手册,但是有很多章节,可以指定章节,通常章节有一下规则:
1:用户命令;
2:系统调用(/bin,/usr/bin,/usr/local/bin);
3:库调用;
4:特殊文件(设备文件);
5:文件格式
6:游戏
7:杂项(Miscellanceous)
8:管理命令(/sbin,/usr/sbin,/usr/local/sbin)。
例如:man 2 command
:数字2显示章节的内容。
whatis command
:查看read命令相关的章节。
man命令特点:在文件手册,以[]
标识的内容可省略,以|
表示多选一,<>
必选内容,...
可以出现多次。
MAN结构:
NAME:命令名称以及功能简要说明;
SYNOPSIS:用法说明,包括可用的选项;
DESCRIPTION:命令功能的详尽说明;
翻屏快捷键:
向后翻屏:space
向后翻一行:enter
向前翻屏:b
向前翻一行:k
查找命令:
/keyword
:向后搜索;
? keyword
:向前搜索;
n
:前一个
N
:后一个
退出:q
在线手册:info command
,主要是对man的补充,主要是历史事件之类的。
命令说明文件地址:/usr/share/doc
。
google自己思考解决方案。
文件系统
rootfs
:根文件系统。
根目录介绍
/boot
:系统启动先关文件,如内核、initrd,以及grub(bootloader);
/dev
:device,设备相关文件,提供设备访问入口,例如/dev/cdrom
仅仅提供设备入口文件,不能cd访问,也不能直接执行,只能采取后面的挂载,关联media文件。
块设备:随机访问,数据块;
字符设备:线性访问,按照字符为单位。例如:显示屏、鼠标。
设备号:有主设备号(major)和次设备(minor),不同于一般文件,没有大小,显示为两个数字,逗号隔开;
/etc
:配置文件主要存放路径;
/home
:用户的家目录,默认为/home/USERNAME
;
/root
:管理员的家目录;
/lib
:库文件:
静态库文件:.a
;
动态库共享库:库文件加载到内存中可以被其他应用调动,只存在一份,例如.dll
、.so
、/lib/modules
:内核模块文件。
/media
:挂载点目录,例如将光盘放进光驱,那么就要将其关联到文件系统的某个树节点上,media就是起到关联文件的作用。一般用于移动设备;
/mnt
:挂载点,挂在临时的文件系统。
/opt
:可选目录;
/pro
:伪文件系统,大多数都是内核的映射文件;
与系统相关:
/sys
:pro,只在系统启动后才有文件,跟硬件设备相关的属性映射文件;
/temp
:临时文件,会在一定时间内被系统清除,所有用户都有权限访问,但是只能删除自己创建的文件;
/var
:可变文件,例如/var/run/
内部就存储了一些.pid
文件保存进程ID等信息的;
/bin
:可执行文件,用户命令;
/sbin
:管理命令,与bin都是系统启动相关的程序和命令;
/usr
:universal_shared_read-only,只读文件,是系统启动后提供功能的文件夹,有/usr/bin,/usr/sbin/;
/usr/local/[bin|sbin|lib]
,第三方相关的程序与命令,与系统启动无关;
路径:从指定起始点到目的地所经位置;层级管理文件能简化查找,树状目录结构:
绝对路径:从根节点开始查找;
相对路径:相对于某个位置的路径。
FHS:文件系统层级规准,file system;
magic number:魔数,例如在文件开头指定#!/bin/bash
,指定程序执行入口或者格式。
目录管理
目录命名规则:
1、长度不能超过255个字符;
2、注意不能使用/
当文件名,它只能用当路径分隔符;
3、严格区分大小写;
ls cd pwd mkdir rmdir tree
目录是文件的路径映射;
目录相关命令
1、列出目录,ls、cd、pwd;
ls
:list,列出指定路径下的文件,选项如下:
-l
,显示完整信息,从上到下内容如下
结果解析:
第1位:
-
:普通文件(f)
d
:目录文件
b
:块设备文件(block)
c
:字条设备文件(character)
l
:符号链接文件(symbolic link file)
p
:命令管道文件(pipe)
s
:套接字文件(socket)
后9位:
文件权限:后九位,每三位一组,rwx分别为 读,写,执行权限;
文件硬链接次数;
文件的属主(owner);
文件的属组(group);
文件大小(size),默认单位bytes;
时间戳(timestamp);
访问:access;
改变:change,metadata元数据,文件属性;
修改:modify,文件内容发生改变;
-h
: human readable,做单位换算
-a
:显示以.
开头的隐藏文件
.
:当前目录
..
:父目录
-A
:显示不以.
开头的隐藏文件
-d
:显示目录自身属性
-i
:index node,inode,文件的索引节点号
-r
:逆序显示文件
-R
:递归显示
pwd
:Printing Working Derectory,格式:/根目录/分级目录/file
cd
: 切换到指定的目录;
cd
用户主目录,home derectory;
cd ~username
切换到用户主目录;
cd -
在当前目录和前一次所在的目录之间来回切换;
2、创建目录:
mkdir x
:创建x目录
mkdir x/y
;在x目录下创建目录y
mkdir -p a/b/c
:先创建c,发现没有父目录b,准备创建b,再找b的父目录,发现没有a目录,则创建a目录,即会创建三个目录;
mkdir -pv /mnt/test/{x/y,m}
:同事创建两个目录;
mkdir -pv {a,b}-{c,d}
:创建a_c、a_d、b_c、b_d四个文件夹;
3、删除目录:
rmdir a
:只能删除空目录a;
rmdir -p a/b/c
:只有当a、b、c目录都为空时才删除;
rm -rf a
:不管a是否为空,都会删除a目录,其中-r
为递归删除,-f
删除时不提示;
rm -rf /
:删除当前目录的所有文件,注意不到万不得已,不要用管理员权限!
文件管理
touch stat file rm cp mv nano vim
1、创建文件:
touch file
:创建文件file
stat
:查看文件所有属性,主要是文件名称,大小,访问、修改以及改变时间等信息。
touch -a file
:只改变access时间
-m
:只改变modify时间;change会时间跟随硬件时间改变;
只修改access时间:touch -a -t 1612121111 a
只修改modify时间:touch -m -t 1212121111 a
,将文件a的modify时间
2、编辑文件:
nano a
:文件编辑器,类似vim
编辑器;
vim a
:创建并编辑文件a;
3、删除文件:rm a
:注意此处rm
是软连接,其实等价于rm -i
,即删除时会提示。
4、复制:
cp src dest
:不仅可以复制一个文件到一个文件,还可以复制任意多个文件到指定的目录;
例如:mv a/b/1.txt x/y/
复制文件1.txt到y目录下;
mv -r a/ x/
:复制a目录到x目录下,此处指定-r
,采用递归复制;
-a
:archive,归档复制,常用于备份;
-p
:保留源文件权限、ownership以及访问等时间,没定指定则会修改成当前的用户权限,若文件为链接文件,则只是复制链接指向的文件;
-P
:若目标文件为链接,则会复制链接,若没有指定的话是只会文件,不会复制链接;
cp /ect/{a,b,c}/x
:指的是复制三个文件;
5、移动:
mv src dest
,
移动文件或者整个目录到目标目录;
修改文件或者目录名称:当目标目录或文件不存在;
6、install:
-d
: drectory,可以创建一个或多个目录;
install -t directoy src
:移动源文件到目标目录,只能移动文件,没有-r
选项;
7、file
:查看文件内容类型;
日期相关
date、clock、hwclock、cal;
date
:查看系统的时间,默认为当前硬件时间或者相差不大;
设定系统时间:date -s 1211021212
格式为:年月日分秒,随后再修改硬件时间;
clock
/hwclock
:硬件时间(主板内置石英计时器),ntp网络时间协议,rtc(real time count);
-w
:将硬件时间设定为系统时间;
-s
:将系统时间设定为硬件时间;
cal
:日历,cal 2018
;
文本管理
文本查看
1、cat
;连接并显示文本文件;
-n
:显示行号
-E
:在每行结尾显示$
,对于linux而言,行结束符为$
;
直接cat
,退出按ctrl+c
可以终端当前命令;
若文件过大,可以ctrl + pageup/down
上下翻屏,但是若超过了最大缓存屏数,那就会丢失!
2、more
:分屏幕查看,只支持向后翻,翻到最后就退出,类似man
的命令;
3、less
:支持前(p)后翻(sapce),翻到最后不会退出;
4、head
:只查看前n行,默认是10。
head -n 3 file
:指定n,查看前3行;
5、tail
:查看后n行,默认是10。
-f
:查看文件尾部,不退出,等待显示后续追加至此文件的新内容;
文本处理
行记录进行处理。
1、cut
:
-d
:指定分隔符,默认是空格;
-f
:指定显示的字段; -f 1,3
表示显示第1和3两个字段,-f 1-3
显示1到3的所有字段;
2、join
:拼接;
3、sort
:按照ascii对每行首个字符排序,升序;
-n
:按照数值大小排序;
-r
:降序排序;
-t
:指定分隔符,-k
:索引位置(从1开始),例如sort -t : -k 3
-u
:unique,相同内容只显示一次,仅仅针对相邻并且安全相同的行系统才认为他们相同;
4、uniq
-d
:显示重复的行(一次),相邻且相同
-D
:只要是重复的就显示;
-c
:显示行重复次数;
文本统计:
wc file
:行,单词数,字节数;
wc -l
:行数
wc -c
:字节数;
wc -w
:单词数;
wc -L
:最长的一行的长度(字节数)
字符处理:
tr
:转换或删除字符,单纯的屏幕输入输出,及时显示;
tr ‘ab‘ ‘AB‘ < file
:运用重定向,将文件中的某些字符替换;
tr ‘a-z‘ ‘A-Z‘
:将小写转换成大写;
-d
:删除出现的所有字符,逐个字符处理;
权限管理
为了合理地分配计算资源,通常要设定权限,即标识符:
用户:设置用户,例如admin,student;
用户组:用户的容器,关联权限,在其中的用户具备容器的权限。
安全上下文(security context):进程是有ownerships(属主和属组)。
权限有r、w、x三种:
对于文件:
r
:表示可读,可以查看;
w
:可写,可以编辑或删除此文件;
x
:可执行,excutable,可以当做命令提交给内核运行;
对于文件:
r
:可以查看目录,利用ls列出目录下的所有文件;
w
:可以在此目录创建文件;
x
:可以使用cd切换进此目录,也可以使用ls -l
查看内部文件的详细信息。
rwx八进制意义:
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
文件中)。
解析:名称解析,根据数据库查询对于的信息。
影子口令:
用户:/ect/shadow
;
组:/ect/gshadow
。
用户类别
管理员,id=0,可以访问任何文件。
普通用户,id=【1-65535】
系统用户,id=1-499,专门用户运行后台进程,不需要登录系统;
一般用户,id=500-60000
用户组类别
私有组:若在创建用户时候,若没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组;
基本组:用户默认的组;
附加组和额外组:默认组以外的其他组。
passwd文件格式
man 5 passwd
例如:root:x:0:0:root:/root:/bin/bash
account:登录名;
password:指向shadow文件
UID
GID
comment:注释
HOME DIR:家目录
SHELL:用户默认的shell
shadow文件
cat /etc/shadow
:进行查看文件,格式:root:$6$3g9wQ8ZnMgSDhVY6$a1OFPBdZMM8P.hDWp4RU5FQg.CcFerDnSCYYQLs/J6j1bOdHGZyML81SyWVchunsJEvc
。
man 5 /etc/shadow
:查看格式
account:用户名
password:加密密码
加密方法
对称加密:加密和解密都是使用同一个密码。
公钥加密:每个密码都成对出现,一个为私钥(secret key),另一个为公钥(publick key)。速度相对于对称加密慢上三个数量级,但是更为安全。
单向加密:散列加密,提取数据特征码,每个数字都有一个唯一的特征码(指纹加密),可实现数据校验的作用。
运行程序
设备管理
进程管理
网络管理
其他
关注官网: www.kernel.org
GNU(提供各种应用和库文件)+Linux(提供内核)
发行版:将以上内容编译进光盘中并提供安装借口!例如:Fedora、readhat(centos)、SUSE、Debian(发行版本Ubuntu 二次开发Mint)
编译:将源代码转换成可以在对应平台上执行的程序;
Gentoo系统:针对当前版本在安装时编译软件,非常耗时;
LSF(Linux From Scrach):指导手动创建linux系统(拼凑软件);
只能向上兼容,不能向下兼容;
原文地址:https://www.cnblogs.com/fqh202/p/9156270.html