目录
二、Linux账户权限和编程工具
1、Linux文件类型(字符表示)
- -:普通文件
- d:目录文件
- l:链接文件
- b:块设备文件
- c:字符设备文件
- p:管道文件
2、Linux用户类别
- root:这是系统特权用户类,他们都有访问root登陆账号的权限
- owner:这是实际拥有文件的用户
- group:这是共享文件的组访问权的用户类的用户组名称
- world:这是不属于上面3类的所有其他用户
3、etc/passwd文件
该文件是存放linux所有用户信息文件
文件格式
- 账号名称:登陆的用户名
- 密码:MD5加密的密码
- UID:用户ID号。0是管理员帐号,1-499保留系统使用,500-65535给一般使用者
- GID:用户所属组ID号
- 使用者信息说明栏
- 家目录:用户默认所在home目录
- shell名称
4、/etc/shadow文件
存放linux所有用户的密码文件
文件格式
- 帐号名称:登陆的用户名
- 密码:以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的所有命令,而且还加入了一些新的特性。
编辑方式
- 光标定位
- 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)
选项名 | 作用 |
---|---|
-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
- 编译选项
运行共享库设置
- 拷贝.so文件到系统共享库路径下
- ldconfig
- ld.so.conf,将路径写入文件
- ldconfig,生效
- 更新ld.so.cache
- 更改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调试选项
如果我的文章能够帮到您,可以点个赞!
您的每次 点赞、关注、收藏 都是对我最大的鼓励!