前言
Linux中有两种用户,一种是root用户,另一种是普通用户,二者的权限不一样,即能做的事情不一样。下面我们来细讲一下这些不同。
root用户能在Linux系统下做任何事情,而普通用户只能做有限的事情。
root用户的命令提示符是“#”,而普通用户的命令提示符是“¥”。
1. 如何切换用户呢?
su命令可以用来切换用户。
su root//切换到root用户
su zzj//切换到zzj用户
当从root切换到普通用户时,直接就可以切换,但如果从普通用户切换到root用户,则需要输入root的密码。
2. 权限管理
2.1 文件访问者分类
文件访问者分为三类:
1. 文件和目录的所有者:u--user
2. 文件和目录所有者所在组的用户:g--group
3. 其他用户:o-other
2.2 文件类型和访问权限
从左到右分别是:文件类型,权限,连接数,所有者,所有组,文件大小(kb),最新修改时间,文件名。
2.2.1 文件类型:
d:文件夹
-:普通文件
l:软文件
c:字符设备文件,如屏幕,键盘等
p:管道文件
s(socket):套接口文件
b(block):块设备文件,如硬盘,光驱等
2.2.2 基本权限
读权限:r。对于文件:具有读取文件内容的权限。对于目录:具有浏览该目录信息的权限
写权限:w。对于文件:具有具有修改文件内容的权限,如删除等。对于目录:具有删除移动目录内文件的权限
执行权限:x。对于文件:具有执行文件的权限。对于目录:具有进入目录的权限。
权限不仅可以用rwx表示,还可以用八进制的数字来表示:
rwx:7 rw-:6 r-x:5等。
2.3 文件权限修改
chmod:文件权限修改
2.3.1 命令权限制修改
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号: u:拥有者 g:拥有者同组用 o:其它用户 a:所有用户
使用实例:
chmod a+rwx zzj.txt
将所有成员都加上全部权限。
2.3.2 八进制修改
chmod 777 zzj.txt
将所有成员都加上全部权限
2.3.3 修改文件拥有者
chown:修改文件拥有者
chown zzj zzj.txt
将zzj.txt的文件拥有者变为zzj。
注意:一般将文件的所有者改变需要在root用户下进行。
2.3.4 修改文件所属组
chgrp:修改文件所属组
chgrp zzj_1 test.txt
将所有组变为zzj_1。
2.3.5 umask
用于修改或查看文件掩码
新建目录时的默认权限为0777
新建文件夹的默认权限为0666
但是实际新建时,看到的权限不是这样,因为权限还收到文件掩码的影响,实际权限为:创建权限&~umask。
说明:root用户的默认掩码值为0022,普通用户的默认掩码值为0002.
2.3.5 粘滞位
其他用户想进入别人的用户目录下是根本进不去的,因此如果需要多人一起合作,就需要创建一个共享目录,共享目录中用户有写的权限,那就是可以删除文件,而且还可以删除别人的文件,那是不是有点不科学了?
为了解决这个问题,Linux引入了粘滞位的概念。
粘滞位:在一个目录被设置为粘滞位后,该目录下的文件只有root用户可以删除,以及该文件的所有者能删除。
设置粘滞位:chmod +t 。
other权限中的t就是粘滞位设置成功的表现。
3. Linux软件包yum
3.1 rzsz
通过rz 和sz命令能实现不同操作系统中的软件的互相传输。
rz:能将Windows系统下的文件传输到Linux下。
sz:将Linux下的文件传输到Windows下。
3.2 使用yum安装软件
yum install -y sl
-y是因为每次安装时都会询问是否安装,-y就直接让系统不询问,直接安装。
sl就是对应的软件名进行替代。
卸载软件也是类似的:
yum remove -y ls
4. Linux开发工具
4.1 编辑器
这里介绍vim编辑器。
vim编辑器有三种模式,分别是命令模式,插入模式和底行模式。
命令模式:控制屏幕光标移动,删除字符/字/行,移动复制某区段以及进入insert模式
插入模式:只有在插入模式下才能进入文字输入,按esc退出到命令模式
底行模式:文件保存或退出
4.1.1 基本操作
在进入vim 的时候,一开始是命令行模式,按i进入插入模式。
命令模式通过shift +;进入底行模式
底行模式下:
w:保存当前文件
q:退出文件
w!:强制保存
q!:强制退出
wq!:强制保存并退出
命令行模式下的操作:
gg:定位到最上面一行
G:定位到末尾行
n +G:定位到任意行
$:定位到光标所在行的行尾
^:定位到光标所在行的行首
w,b:分别按单词进行往后,往前移动光标
h,j,k,l:光标向左,向下(jump),向上(king),向右。
(n)dd:删除(n)行
(n)yy:复制(n)行
(n)p:复制(n)次
(n)x:删除n个文字
(n)r:替换(n)个字符
R:进行替换模式,替换光标处的所有字符
u:撤销操作
Ctrl +r:取消撤销
Ctrl +^:将字符进行大小写转换
4.2 g++/gcc的使用
4.2.1 背景
代码转换为可执行文件前需要经历4个过程,分别是:
1. 预处理(进行宏替换)
头文件展开
宏替换
注释消除
条件编译
gcc -E test.c -o test.i
2. 编译(生成汇编)
gcc -S test.i -o test.s
3. 汇编(生成机器可执行代码)
gcc -c test.s -o test.o
4. 链接(生成可执行文件)
gcc test.o -o test.c
记忆方法:esc ,iso
4.2.2 库
在链接的时候,需要用到库,这些库在安装软件的时候就一起安装到了文件里面。因此,我们使用#include<stdio.h>的时候,编译器会在库里面去找包含的头文件,因此我们可以使用各种函数。
库一般分为动态库和静态库。
动态库指的是,在编译链接时没有把库文件的代码加入可执行文件中,而是在程序执行时加载库,这样可以节省系统开销。
动态库的一般后缀为“.so”。
gcc在编译时默认使用动态库,如果要使用静态库,需要使用选项 -static。
静态库是指,在编译链接时就把库文件的代码加入可执行文件中,这样会使生成的文件空间比较大,但是在运行时不再需要库文件。
后缀名一般为“.a”。
gcc选项:
-E:只进行预处理
-S:只进行编译
-c:只进行汇编
-o :输出到指定文件
-g:生成调试信息
-static:使用静态库