2、Linux账户权限和编程工具 - 看这一篇就够了

二、Linux账户权限和编程工具

1、Linux文件类型(字符表示)

  • -:普通文件
  • d:目录文件
  • l:链接文件
  • b:块设备文件
  • c:字符设备文件
  • p:管道文件

2、Linux用户类别

  • root:这是系统特权用户类,他们都有访问root登陆账号的权限
  • owner:这是实际拥有文件的用户
  • group:这是共享文件的组访问权的用户类的用户组名称
  • world:这是不属于上面3类的所有其他用户

3、etc/passwd文件

该文件是存放linux所有用户信息文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WsXQAHEi-1587563295927)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200422175010623.png)]

文件格式

  • 账号名称:登陆的用户名
  • 密码:MD5加密的密码
  • UID:用户ID号。0是管理员帐号,1-499保留系统使用,500-65535给一般使用者
  • GID:用户所属组ID号
  • 使用者信息说明栏
  • 家目录:用户默认所在home目录
  • shell名称

4、/etc/shadow文件

存放linux所有用户的密码文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sON6061V-1587563295930)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200422175029896.png)]
文件格式

  • 帐号名称:登陆的用户名
  • 密码:以MD5加密
  • 最近更动密码日期
  • 密码不可被更改的天数
  • 密码需重新变更天数
  • 密码变更期限前警告期限
  • 密码过去恕限时间
  • 帐号失效日期
  • 保留

http://blog.sina.com.cn/s/blog_e75dc4090102x6gq.html Linux下 /etc/shadow 和/etc/passwd的含义

5、/etc/group文件

  • group文件格式:

    groupname:password:gid:user_list

  • groupname:组名称

  • password:组密码

  • gid:组识别号

  • user_list:该组用户清单

6、组的创建与用户的创建

  • 创建组
    • groupadd groupname
  • 创建用户并设置默认组
    • useradd -g/G groundname username
    • useradd username
  • 向组添加删除用户
    • gpasswd -a/d username groupname
  • 给用户设置密码
    • passwd username
  • 删除组
    • groupdel groupname
  • 删除用户
    • userdel -r username

7、Linux文件权限

  • 文件权限位的表示:-rwxrwxrwx r-4 w-2 x-1
  • 第一位表示文件的类型,-表示普通文件,d表示目录文件,l表示符号链接文件
  • 接下来三位表示owner用户的读、写、执行权限
  • 紧接着三位表示group用户的读,写,执行权限
  • 最后三位表示world用户的读,写,执行权限

Linux文件权限管理

  • 规划用户以及用户所属的组
  • 设置文件所属的用户以及所属的组(chown,chgrp)
  • 给文件赋予相应的权限位(chmod)

chmod

参数 描述
u 该档案的拥有者
g 与该档案的拥有者属于同一个群体(group)者;
o 其他以外的人
a 所有
+/- 增加/去掉权限
= 设定权限
命令 功能
chmod 755 text 给text文件赋予rwxr-xr-x权限
chmod -R 755 text 给text及其子目录底下所有文件赋予rwxr-xr-x权限
chmod g+rw abc 为文件abc的组拥有者增加rw权限
chmod u-x abc 为abc文件的用户拥有者去除x权限
chmod o=rw- 为指定文件abc的其他用户权限为rw-
chmod -R a+x abc 为文件abc及其子目录底下的所有文件的全体用户增加x权限

目录的内容认为是文件,如果目录是没有w权限,则不能该目录下进行增删文件操作

chgrp

  • chgrp用来更改文件的组拥有者,其一般格式为:
    chgrp [option] group file
  • 把文件abc的组拥有者改为study:
    chgrp study abc
  • 把abc及其子目录下的所有文件的组拥有者改为study:
    chgrp -R study abc

chown

  • chown用来更改文件所有者与组拥有者,其一般格式为:
    chown [option] owner[:group] file
  • 将abc及其子目录下的所有文件的所有者改为jjl:
    chown jjl abc
  • 将abc文件的所有者改为jjl,组拥有者改为study:
    chown jjl:study abc

特殊的权限

  • 考查/usr/bin/passwd与/etc/shadow的权限,分别为:-r-s–x--x、-r--------
  • 我们发现/etc/shadow文件没有写的权限,那么普通用户要修改密码如何做到修改/etc/shadow文件呢?
  • 这是通过s这个特殊权限实现的。当具有s权限的文件运行时,进程的拥有者不是执行程序的用户,而是文件的拥有者。
  • 同样如果文件组用户执行权限位为s,表示任何用户执行该文件,都拥有该组的权限,就好像自己是组的成员一样。
  • 用chmod命令来设置这些“特殊”的权限位。数值4表示设置文件拥有者的执行权,数值2表示设置文件用户组的执行权。如:
    chmod 4755 test
    -rwsr-xr-x 1 study study 0 May 25 17:37 test
    chmod 2755 test
    -rwxr-sr-x 1 study study 0 May 25 17:37 test
    chmod 6755 test
    -rwsr-sr-x 1 study study 0 May 25 17:37 test

文件权限掩码设置-umask

  • 考查root用户的umask值为0022

  • 这表示root用户创建的文件对于组用户与其他用户都要去掉2即写的权限,目的就是防止除root以外的用户改写root用户的文件。

  • 设定了umask的文件权限计算公式:
    newmode = oldmode & ~umask

    文件基数为666,目录为777,即文件无设x位,目录可设x位。

8、vi/vim

vi是Linux/Unix底下最常用的文本编辑器。vim:vim是vi的升级版本,它不仅兼容vi的所有命令,而且还加入了一些新的特性。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-podULlvP-1587563295932)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200422204735908.png)]

编辑方式

  • 光标定位
    • M 移动光标到页面中央
    • L移动光标到页面尾处
    • H移动光标到页面开始处
    • Ctrl+f向后翻页
    • Ctrl+b向前翻页
    • 0移动光标到行首
    • $移动光标到行尾
  • 复制 粘贴 删
    • nyy 复制光标所在的向下n行内容
    • p在光标处粘贴- 复制的内容
    • ndd删除光标所- 在向下n行的内容
  • 撤销和重复
    • u复原前一个动作
    • . 重复前一个动作

插入方式

  • i和I键插入:在目前光标处输入文字,已存在的文字会向后
  • A和a键:a为从目前光标所在的下个字符处开始插入,A为从光标所在行的最后一个字符开始插入
  • O和o:在目前光标所在下一行处插入新的一行.O为在目前光标所在处的上一行插入新行
  • R和r 取代:r会取代光标所在的那个字符:R会一直取代光标所在的文字,直到按下ESC为止

命令方式

  • 退出命令
    • q 退出vi
    • q! 不保存退出
    • wq 保存退出
  • 搜索字符串
    • 输入/+要查找的字符串
    • 按n键重新查找下一个
  • shell切换
    • !+shell命令 如 !ls –l 在vi中使用ls命令
      
    • sp +filename 在同一个vi中编辑两个文件
      

9、gcc

  • 什么是gcc:gcc是GNU Compiler Collection的缩写。最初是作为C语言的编译器,现在已经支持多种语言了,如C、C++、Java、Pascal、Ada、COBOL语言等。
  • gcc支持多种硬件平台,甚至对Don Knuth 设计的 MMIX 这类不常见的计算机都提供了完善的支持

gcc编译程序的过程

  • 预处理(Pre-Processing)
  • 编译(Compiling)
  • 汇编(Assembling)
  • 链接(Linking)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WegUYNVK-1587563295934)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200422205737825.png)]

选项名 作用
-o 产生目标代码或可执行文件
-c 通知gcc取消链接步骤,即编译源码并在最后生成目标文件
-E 只运行C预编译器
-S **告诉编译器产生汇编语言文件后停止编译,产生的汇编语言文件扩展名为s **
-Idir 将dir目录加入搜索头文件的目录路径
-Ldir 将dir目录加入搜索库的目录路径
-llib 链接lib库
-g 在目标文件中嵌入调试信息,以便gdb之类的调试程序调试
-Wall 使gcc对源文件的代码有问题的地方发出警告

gcc示例

  • gcc -E hello.c -o hello.i(预处理cpp)
  • gcc -S hello.i -o hello.s(编译cc)
  • gcc -c hello.s -o hello.o(汇编as)
  • gcc hello.o -o hello(链接ld)
  • gcc hello.c -o hello(直接编译链接成可执行文件)
  • gcc -c hello.c或gcc -c hello.c -o hello.o(编译生成目标文件)

10、头文件与库文件

  • 在使用C语言和其他语言进行程序设计的时候,我们需要头文件来提供对常数的定义和对系统及库函数调用的声明。
  • 库文件是一些预先编译好的函数集合,那些函数都是按照可重用原则编写的。它们通常由一组互相关联的用来完成某项常见工作的函数构成。比如用来处理屏幕显示情况的函数(curses库)和数据库访问例程(dbm库)等。

头文件与库文件位置

  • /usr/include及其子目录底下的include文件夹
  • /usr/local/include及其子目录底下的include文件夹
  • /usr/lib
  • /usr/local/lib

11、静态库与共享库

  • 静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。
  • 共享库( .so或.sa ):程序在运行的时候才去链接共享库的代码,多个程序共享使用库的代码。

生成和使用共享库

  • 生成共享库
    • 编译选项
      • shared: 表示生成共享库格式
      • fpic:产生位置无关码(position independent code)
    • 库名规则:lib+xxx+版本号.so
    • 示例:gcc –shared –fpic test.o –o libTest.so
  • 使用共享库
    • 编译选项
      • l:链接共享库,只要库名即可(去掉lib以及版本号)
      • L:链接库所在的路径.
    • 示例:
      gcc –o test –L./ -lTest

运行共享库设置

  1. 拷贝.so文件到系统共享库路径下
  2. ldconfig
    1. ld.so.conf,将路径写入文件
    2. ldconfig,生效
    3. 更新ld.so.cache
  3. 更改LD_LIBRARY_PATH

12、gdb

什么是gdb:gdb是GNU debugger的缩写,是编程调试工具。

gdb功能

  • 启动程序,可以按照用户自定义的要求随心所欲的运行程序。
  • 可让被调试的程序在用户所指定的调试的断点处停住 (断点可以是条件表达式)。
  • 当程序停住时,可以检查此时程序中所发生的事。
  • 动态地改变程序的执行环境。

gdb用法

命令 含义
list(l) 列出源代码
break(b) 设置断点
info break 查看断点信息 info functions
run® 运行
continue© 继续程序运行,直到下一个断点
step(s) 单步跟踪,类似于VC中的step into
next(n) 单步跟踪,类似于VC中的step over
finish 运行程序,直到当前函数返回
util(u) 退出循环
print(p) 查看运行时的变量以及表达式
watch 设置观察点

设置断点

  • break
    • info break 查看断点
    • br linenum 设置某行断点
    • br functions 设置某个函数断点
    • br if 条件 根据条件设置断点

多文件调试

  • 设置断点
    • br 文件名:行数
    • br 文件名:函数功能名
  • 在多级目录情况下,要为gdb加入搜索路径
    • directory 路径名

注意:被调试的源文件,在编译时必须都加-g调试选项

如果我的文章能够帮到您,可以点个赞!
您的每次 点赞、关注、收藏 都是对我最大的鼓励!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章