Linux相关知识

文件系统

磁盘由许多盘片和一组磁头组成,盘片被划分出同心圆磁道,多个盘片的同磁道构成柱面,磁道上每512字节划分为扇区,数据存储在扇区上。

文件系统格式

FIle System Hierarchy:linux文件系统

目录说明
/根目录
/boot启动相关文件
/bin二进制命令
/sbin系统二进制命令
/etc系统配置
/lib共享库、内核模块
/usr用户数据
/usr/local第三方软件
/usr/bin用户的命令
/usr/sbin用户的命令
/rootroot用户家目录
/home普通用户家目录
/opt第三方软件和配置
/tmp临时文件
/var可变文件
/var/run运行时文件
/var/log日志
/dev设备目录
/mnt文件系统挂载点
/media可移动设备挂载点

在windows下,需要把分区映射称为逻辑驱动器(就是盘符),每个盘符都有自己的根。win系统可以使用\表示根,路径分隔符默认是\。但windows也可以识别/。

Linux必须把所有分区挂载mount到文件系统的根目录上,其实就是分区和目录建立映射。

软件安装

早期,软件分发都是源代码,需要使用者针对不同平台自行在当前操作系统上编译。

但是编译不是一件容易的事,能不能提供直接编译好的可执行文件呢?这就是二进制分发版。这种二进制分发版,往往只需解压后,稍作配置就可使用。但需要下载针对当前平台的分发版。

后来软件越来越多,越来越大,红帽推出了RPM,即RedHat Package Manager,目前已经成为Linux工业标准。它提供打包,安装,查询,升级,卸载、数据库管理等功能。但它没有解决软件依赖问题,很可能出现软件安装时报错。

rpm -ivh xxx.rpm
rpm -ql xxx

-i 安装
-v 详情
-h #显示进度
-q 查询包是否安装
-ql 列出安装的包的文件列表
-qa 列出已经安装的包

YUM

YUM(Yellow Dog UPdater, Modified),在RPM包管理之上增强的包管理器,能自动查询下载包 ,并自动处理依赖关系。YUM使用Python2.x编写。YUM必须配置源,要从源服务器下载包。

配置

主配置文件/etc/yum.conf

自定义配置文件必须扩展名为repo,并放在/etc/yum.repos.d目录下

连接阿里云镜像,使用网络的yum源。

centos 7# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

epel源
# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

# yum repolist

# yum install -y vim

命令

  • 内部命令:随shell启动,常驻内存

  • 外部命令:需要找到文件加载进程,查找路径就是$PATH

    • hash,外部命令路径可以保存在一个hash表中
  • # type cd
    cd is a shell builtion
    # type cat
    cat is hashed(/usr/bin/cat)
    # type vim
    vim is /usr/bin/vim
    # type -t cd
    builtin
    # type -t vim
    file
    # type -t cat
    file
    

命令格式

命令本身可以接受选项和参数,而选项可以有自己的参数

  • 短选项:-h 使用-加一个字母,短选项可以合并,但是短选项需要提供参数,必须放后面。短选项往往都是最常用的选项,为了简化而提供
  • 长选项:–all 使用–加单词,长选项不可以合并写
  • Ctrl + c 可以结束正在运行的命令
  • \命令续行符
  • ;一行多个命令使用分号分隔
  • 使用tab键补全,tab 2次可以提示补全的候选

命令扩展

bash具有的功能

$ echo a/b/x a/c/x a/d/e/x 可以写成 $ echo a/{b,c,d/e}/x

$ echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z

$ echo {a..z..2}
a c e g i k m o q s u w y

$ echo {1..20..2}
1 3 5 7 9 11 13 15 17 19

$ echo {a,b}{1,2}
a1 a2 b1 b2

常用命令

  • 查帮助

    • help 内部命令
    • man 查看Man文档
    • 命令-h 或 命令–help
  • 命令

    • type 命令类型

    • hostname 主机名

    • who 登录信息,who am i 或 whoami,w

    • whatis 命令有什么功能

    • which 命令在哪里

    • whereis 命令进程二进制文件、man文档

    • uname -a 查看操作系统信息,比如内核版本-r

    • alias 别名

    • echo 回显

      • -n 取消自动符加最后的换行符
      • -e 使用解释功能,$ echo -e 'a/tb/nc’使用转义符
    • date日期

      • date + ‘%Y%m%d %H:%M:%S’

      • date [MMDDhhmm[[CC]YY][.ss]]修改时间
        
  • 开关机

    • halt,poweroff
    • reboot重启
    • shutdown[option]…TIME
      • -r 重启
      • -h 关机
      • TIME:now立即关机;+3 几分钟后执行;hh:mm几点几分开始执行
      • -c 未执行前,还可以取消
  • 网络

    • ping -c 20 -w 5 www.baidu.com
    • ip a
    • ss -tanlp

绝对路径和相对路径

  • 相对路径,不以/开始的路径

  • 绝对路径,以/开始的路径

  • 因为常常当前工作路径会变化,有时候从当前路径为参照,找其他路径中的文件会出错,往往就从根开始写绝对路径,减少路径错误

  • 相对路径用在相对于当前路径的某个文件,相对关系不变的情况

  • basename基名和dirname目录名

  • # dirname /etc/sysconfig/network-scripts/ifcfg-ens33
    /etc/sysconfig/network-scripts
    
    # basename /etc/sysconfig/network-scripts/ifcfg-ens33
    ifcfg-ens33
    

文件类型

  • -或f 普通文件
  • d 目录directory
  • l 符号链接或软链接symbolic link,相当于快捷方式
  • b 块设备block device,随机访问,磁盘
  • c 字符设备character device,线性访问,键盘
  • p 管道 pipe
  • s socket文件1

权限

属主:文件的拥有者

属组:文件的分组,组内用户对该文件由一定的权限

如果有该权限,则显示对应字母;如果没有该权限,则显示-。注意,root用户不受权限限制。

rwx是3个字符,如果看作二进制就是3位,每一位都可以用0或1表示,由此可以用一个8进制数表示。例如rw-rw----用8进制表示就是660

通配符wildcard

  • *匹配0个或多个字符

  • ?匹配一个字符

  • [a-z]、[A-Z]、[0-9]、[acdf]匹配一个字符;[^a-z]匹配a-z之外的任意一个字符
    
  • [:space]空白字符;[digit:]表示0-9;[:lower:]小写;[:upper:]大写;[:alpha:]字母;[:alnum:]字母和数字等。

    • 当一个字符用,所以test[[:alnum:]]

文件系统命令

  • ls 列出目录内容

    • -a 显示所有文件,包括隐藏文件,即以.开头的文件
    • -l 长格式显示。别名ll即ls -l。显示了stat的部分内容
    • -h,–human-readable 配合-l,人可以阅读的,size显示为K,M,G等
    • -R 递归目录
    • -i 显示inode号
  • stat 显示文件的信息(元数据metadata)

    • access time,atime,读取文件内容则设置
    • modify time,mtime,改变文件自身内容则设置。ls -l 显示的时间就是mtime
    • change time,ctime,元数据发生变化则设置
  • cd 切换目录change directory

    • cd 或cd ~ 回家
    • cd - 最后两次目录切换
  • pwd 显示当前工作路径;basename基名,路径中最后一部分;dirname目录名

  • file 显示文件格式

  • cat 读取文件或stdin到stdout;tac每个文件倒着读取行

  • more,less比more功能更强

    • 回车向后一行,y向前一行
    • 空格向后一页,b向前一页
    • d向后半页,u向前半页
    • g首行,G末行
    • u向前
    • /或?搜索
    • q退出
  • head -n 20 /etc/passwd

  • tail -n10 /etc/passwd;tail -f /var/log/messages

  • touch 没有文件创建空文件,如果文件存在,改变时间戳

    • -a 改变atime、ctime
    • -m 改变mtime、ctime
    • -c 如果文件不存在,则不创建
  • mkdir 创建目录

    • -p 创建父目录
    • -v 详情
  • tree 递归显示目录树(需安装tree命令)

    • -d 只显示目录
    • -L n 显示的 最大层数
  • rmdir 删除空目录

  • rm 慎用!!!

    • -i 交互式提醒;-f强制不提醒
    • -r 递归删除
    • rm -rf / (cent os7 不可以删根,但可以递归删根下的目录)
  • ln 创建链接文件

    • -s 创建符号链接
    • -v 详情
  • cp 复制目录或文件,从源复制到目标。默认不递归

    • 如果源是文件
      • 目标是文件,目标不存在,直接创建指定名称文件。如果目标存在,覆盖
      • 目标是路径,复制到指定的路径下,不存在新建,存在则覆盖
    • 如果源是目录
      • 目标是文件,不可以
      • 目标是目录
        • 如果目标目录存在,就在该目标目录下复制源目录内容
        • 如果不存在,创建目标目录,复制源的内容
    • 如果有多个源,目标只能是目录了,且目标必须存在
    • -i 交互式提醒,-f 强制覆盖不提示
    • -R -r 递归复制
    • –perserv 保留指定的元数据信息,all保留所有即包含权限、属主、属组等
    • -d 表示–no-dereference --preserv=links 不复制源文件,只复制链接名
    • -a 归档,相当于-dR --preserv-all,递归复制所有文件包括软连接,但不跟踪软连接
  • mv 移动或重命名

    • 和cp很像
  • find [指定目录][指定条件][指定动作]
    	find /-name *.py
    

inode

格式化后的文件系统中留有区域存放元数据,这个区域称为inode table

每一个文件包括目录,都有一个唯一的inode号

目录也是文件,在目录文件本身的数据上存储着其下的文件名到inode的映射信息

block bitmap记录着那些block空闲或已使用

inode bitmap记录着哪些inode空闲空闲或已使用

inode不跨分区

查看inode使用 ls -l

硬链接:如果两个文件没有跨分区,且2个文件指向同一个inode,这就是硬链接,即文件的引用计数。ln test test1 来创建文件test1,硬链接数加1。如果硬链接数为0,则文件才被清除了。

文件描述符

一切皆文件,每一个打开的文件分配一个文件描述符(File Descriptor),非负整数。

文件描述符名称常用缩写默认值
0标准输入stdin键盘
1标准输出stdout屏幕
2标准错误输出stderr屏幕

管道

使用|,上一个程序的标准输出通过管道送给下一个命令的标准输入。

重定向

重定向就是改变程序的输入或输出。

> 输出重定向
>> 追加输出重定向
< 输入重定向
<< Here Document

输出重定向和输出追加重定向

# echo abc > test
# cat test
abc

# echo 123 >> test
# cat test
abc
123

# echo xyz > /dev/null

# ls > $2

# ls -l > files 2 > $1

# id aabb
# id aabb > files
# cat files
# id aabb > files 2 > $1
# cat files

# id aabb 2 > $1 > files
# cat files

----------------------------
> files 2 > $1 表示1先指向文件,2指向1,也就指向该文件
2 > $1 files 表示2指向1即stdout,然后1重新指向一个文件

输入重定向

# ll | wc -l
# ll > files
# wc -l files
# wc -l < files

Here Document

# cat > newtxt << EOF
> line1
> line2
> EOF
# cat newtxt

用户权限系统

用户和组

*nix是多用户系统

  • 用户
    • 管理员
      • root用户是必须有的管理员账户,特权用户,无所不能。慎用
      • uid为0
      • 家目录在/root
    • 系统用户
      • 普通授权用户,不用登陆,一般不需要家目录
      • uid 1-499,Cent OS7 1-999
    • 普通用户
      • 普通授权用户,交互式登录,需要家目录在/home/<username>
      • uid 500+, Cent OS7 1000+
    • 用户id为2字节无符号整数,0是root,其他用户使用1-65535
    • 用户属于不同的组
    • 管理员组
      • 名为root,gid为0
    • 系统组
      • 系统组,gid为1-499,Cent OS7 1-999
    • 普通组
      • 普通组,gid为5000+,Cent OS 1000+
  • 用户的组
    • 主要组、基本组primary group
      • 每一个用户都仅能属于一个组,这个组称为主组,创建用户时指定
    • 附加组supplementary group
      • 一个用户可以属于零个或多个附加组

主要配置文件

  • /etc/passwd 保存用户及id、主组id等属性信息
    • 登录名:密码(shadow中):uid:gid主组:注释:家目录:shell
  • /etc/shadow 保存用户密码及相关属性
  • /etc/group 组及属性信息
    • 组名:组密码(gshadow中):gid:以当前组为附加组的用户列表逗号分隔

用户和组命令

  • 用户、组

    • id

      • id 当前用户
      • id xxx 指定用户信息
      • -u 用户id;-g 主组;-G 附加组;-n 使用名字
    • useradd

      • -r 创建系统用户,默认没有家目录
      • -u UID 指定uid
      • -g GID 指定主组,如果没有指定,则创建于用户名相同的同名主组
      • -m 系统用户默认不创建家目录,使用该选项创建家目录
      • -M 非系统用户默认创建家目录,使用该选项不创建
      • -d 指定家目录
      • -s 指定shell,查看/etc/shells
      • -G g1[,g2,…] 指定用户的附加组,附加组必须存在
    • su 切换用户

      • su -xxx 常用,登录式切换,读取该用户的配置文件,并切换到该用户的家目录
      • su xxx 用的少,非登陆式切换,不读取用户配置文件,也不改变当前工作目录
        • su xxx -c "id"常用,只是为了使用xxx用户启动一个程序,没必要登录
      • 当前式root用户,su切换时,无序密码,其他用户切换需要密码
    • passwd

      • passwd 当前用户修改密码

      • # echo xxx | passwd xxx --stdin为xxx用户设置密码

      • 密码应该足够强,或有过期

      • -d 删除密码;-l 锁定用户;-u 解锁用户

      • -x maxdays 密码最大使用期限,超过宽限期后用户将不能自己修改密码

      • -w warndays 提前多少天警告密码要到期了;-i inactivedays 超期后修改密码的宽限期

    usermod修改用户、userdel删除用户

    groupadd增加组、groupmod修改组、groupdel删除组

进程的安全上下文

每一个进程启动起来,都有一个用户身份,这个身份决定着进程能访问什么资源

文件的元数据中定义了权限mode,三部分为属主,属组,其它

[外链图片转存失败(img-TDMmZG8P-1567914553577)(C:\Users\cxy01\AppData\Roaming\Typora\typora-user-images\1567860449551.png)]

当一个进程访问一个资源时,首先进行属主权限匹配,未匹配再进行属组、附加组权限匹配

如果都没匹配上,那么就是other其他用户,就匹配mode中的最后部分

文件权限含义

mode文件目录
r查看文件内容ls列目录内容
w修改文件内容目录中增删文件
x执行该文件启动一个进程ls -l列目录内容,cd进入该目录

权限命令

  • chmod

    • -R 目录递归设置,不推荐
    • chmod [OPTION]… OCTAL-MODE FILE… 使用3位八进制数修改文件mode
    • chmod [OPTION]… MODE[,MODE]… FILE…
      • 修改某一组3位权限u、g、o、a
        • u=、g=、o=、a=、ug=、uo=、go=
      • 修改组内3位中的某一位
        • u+、g+、o+、a+、+
        • u-、g-、o-、a-、-
  • umask

    • 目录一般有x才能cd进入,文件一般不要随便给x权限
    • 默认情况下,管理员umask是022,普通用户是022
    • 文件666-022=644
    • 目录为777-022=755
    • umask 022修改掩码,非永久有效
    # touch t.txt
    # ll t.txt
    -rw-r--r-- 1 root root 0 sep 7 07:18 t.txt
    
    # chmod 777 t.txt
    # ll t.txt
    -rwxrwxrwx 1 root root 0 sep 7 07:18 t.txt
    
    # chmod u=rw t.txt
    # ll t.txt
    -rw-rwxrwx 1 root root 0 sep 7 07:18 t.txt
    
    # chmod u=rw,g=r t.txt
    # ll t.txt
    -rw-r--r-- 1 root root 0 Sep  8 04:39 t.txt
    
    # chmod ug=rw t.txt
    # ll t.txt
    -rw-rw-r-- 1 root root 0 Sep  8 04:39 t.txt
        
    # chmod a=rw t.txt
    # ll t.txt
    -rw-rw-rw- 1 root root 0 Sep  8 04:39 t.txt
        
    # chmod u+x t.txt
    # ll t.txt
    -rwxrw-rw- 1 root root 0 Sep  8 04:39 t.txt
        
    # chmod ug+x t.txt
    # ll t.txt
    -rwxrwxrw- 1 root root 0 Sep  8 04:39 t.txt
    
    # chmod a-x t.txt
    # ll t.txt
    -rw-rw-rw- 1 root root 0 Sep  8 04:39 t.txt
    
    # chmod +x t.txt
    # ll t.txt
    -rwxrwxrwx 1 root root 0 Sep  8 04:39 t.txt
    
    测试+x,-x,+w,-w,+r,-r
    
  • chown

    • -R 目录递归修改
    • chown [OPTION]...[OWNER][:[GROUP]] FILE...改文件的属主、属组
    # chown user1 t.txt
    # ll t.txt
    -rwxrwxrwx 1 user1 root 0 sep 7 07:44 t.txt
    
    # chown :user3 t.txt
    # ll t.txt
    -rwxrwxrwx 1 user1 user3 0 sep 7 07:44 t.txt
    
    # chown user1.user1 t.txt
    # ll t.txt
    -rwxrwxrwx 1 user1 user1 0 sep 7 07:44 t.txt
    
    # chown -R user1:user1 /tmp/test/
    

39 t.txt

chmod a-x t.txt

ll t.txt

-rw-rw-rw- 1 root root 0 Sep 8 04:39 t.txt

chmod +x t.txt

ll t.txt

-rwxrwxrwx 1 root root 0 Sep 8 04:39 t.txt

测试+x,-x,+w,-w,+r,-r


* chown

* -R 目录递归修改
* `chown [OPTION]...[OWNER][:[GROUP]] FILE...`改文件的属主、属组

```python
# chown user1 t.txt
# ll t.txt
-rwxrwxrwx 1 user1 root 0 sep 7 07:44 t.txt

# chown :user3 t.txt
# ll t.txt
-rwxrwxrwx 1 user1 user3 0 sep 7 07:44 t.txt

# chown user1.user1 t.txt
# ll t.txt
-rwxrwxrwx 1 user1 user1 0 sep 7 07:44 t.txt

# chown -R user1:user1 /tmp/test/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值