分享

Linux基础.umask,权限影响,文件类型,/根目录文件,环境变量,alias别名,man手册

 昵称QAb6ICvc 2022-01-24

一. 为什么文件的起始权限都是664,目录都是775?
文件: 默认创建没有执行权限
目录: 默认有执行权限 --> 因为目录没有没有执行权限,就不能切换到目录中

-rw-rw-r-- 1 gec gec 66 Feb 25 18:40 project.c
drwxrwxr-x 2 gec gec 4096 Mar 8 01:34 abc

  1. 文件/目录起始权限计算公式

无论是目录还是文件,都跟系统的一个东西 “umask” 有关
gec@ubuntu:~$ umask
0002 -> 决定所有文件/目录起始权限
-> 第一个0是无效位,后三位才是真正位数!

文件起始权限=666-当前系统umask的值=666-002=664
目录起始权限=777-当前系统umask的值=777-002=775

  1. umask掩码值如何修改?

    1)临时修改umask --> 重启终端无效

gec@ubuntu:~$ umask 0000 --> 使用umask命令直接修改
gec@ubuntu:~$ umask
0000

2)永久修改umask   --> 重启终端还有效    
思路: 终端在启动都会先执行一个脚本文件“~/.bashrc”,我们的思路应该是把命令写在脚本中

	1. 编辑脚本1234

gec@ubuntu:~$ gedit .bashrc

	2. 把需要执行的命令加在脚本的最后,保存退出!1

fi

export PATH=$PATH:/usr/local/arm/bin
umask 0000

	3. 重新加载脚本文件 / 重启终端1

gec@ubuntu:~$ source ~/.bashrc

3)如果在代码执行过程中需要修改掩码值  --> umask函数   --> man 3 umask

#include <sys/stat.h>

   mode_t umask(mode_t cmask);   

mode_t: 八进制权限数据类型
cmask: 修改之后掩码值,例如: 0002

返回值:
	当前掩码值1234567891011

注意: 1. umask()只是在代码运行时修改掩码值,并没有永久修改系统中umask。
2. 当程序结束后,umask会还原回系统的值。

二. 文件/目录权限对文件/目录影响

文件:
r: 如果没有读权限,不能使用gedit/vi/cat命令查看文件内容12

gec@ubuntu:~$ cat project.c
cat: project.c: Permission denied

w: 如果没有写权限,则不能修改文件的内容
x: 如果没有执行权限,则执行文件时会提示权限拒绝12

gec@ubuntu:~$ ./project
bash: ./project: Permission denied

目录:
r: 如果没有读权限,则不能使用ls命令查看目录下的内容  readdir()执行失败12

gec@ubuntu:~/abc$ ls
ls: cannot open directory .: Permission denied

w: 如果没有写权限,则不能在这个目录下创建任何内容1

gec@ubuntu:~/abc$ touch abc.txt
touch: cannot touch `abc.txt’: Permission denied

x: 如果没有执行权限,则不能使用cd命令切换到目录1

gec@ubuntu:~$ cd abc/
bash: cd: abc/: Permission denied

三. linux下文件的种类
1. 在windows下,是如何区分文件种类?

	是使用文件的后缀进行区分,不同后缀会决定以不同的方式对文件进行解析!
	例子: 1.mp3  --> 就以mp3文件格式来解析文件的内容
	       2.c    --> 就使用C语言语法!

2. 在linux中,如何区别文件种类?

	不能通过颜色区分文件种类,不是通过后缀进行区分,只能通过文件属性进行查看。1234567

-rwxrwxrwx 1 gec gec 0 Mar 8 01:34 abc.c --> 不要看后缀,看前面的类型,只要是-,就一定是一个普通文件
drwxrwxrwx 2 gec gec 4096 Mar 10 20:00 abc.txt --> 不要看后缀,看前面的类型,只要是d,就一定是一个目录文件

3. linux下,一共7种文件类型1

1)普通文件"-" --> touch命令
2)目录文件"d" --> mkdir命令
3)链接文件"l" --> ln -s命令
如何创建链接文件?
已知abc.c,需要创建一个链接文件link指向它!
创建命令: ln -s abc.c link

4)管道文件"p" --> 在系统编程进程之间通信方式之有名管道
5)套接字文件"s" --> 网络编程TCP/UDP协议套接字
6)字符设备文件"c" --> 硬件模块驱动文件,红外,温湿度
7)块设备文件"b" --> 储存设备驱动文件,U盘,SD卡,nandfalsh

四. 根目录文件
gec@ubuntu:/$ ls /
bin dev home lost+found opt run srv usr
boot initrd.img media proc sbin sys var
cdrom etc lib mnt root selinux tmp vmlinuz

注意: linux与windows不一样,某些文件一定要存放在固定的目录才会生效。

常用目录:
bin: 存放linux命令与可执行程序
dev: 主要字符设备文件/块设备文件 -> linux硬件驱动文件
home: 存放所有普通用户的家目录
usr: 第三方程序安装头文件,库文件,可执行程序,帮助文档,目标源程序
头文件:
/usr/include
/usr/local/include

 库文件:  --> 第三方程序安装进来linux的库文件
 /usr/lib   
 /usr/local/lib

 可执行程序:
 /usr/bin
 /usr/local/bin1234567

boot: 存放linux系统镜像文件
lrwxrwxrwx 1 root root 32 Jun 27 2013 initrd.img -> boot/initrd.img-3.5.0-23-generic 文件系统
lrwxrwxrwx 1 root root 29 Jun 27 2013 vmlinuz -> boot/vmlinuz-3.5.0-23-generic 系统内核

proc: 存放linux进程的相关信息 ID=1000进程的信息存放名字为1000目录下
sbin: 存放超级用户才能使用的linux命令
etc: linux配置文件 配置开机启动脚本,网络配置…
lib: linux系统自带的库文件
mnt: 挂载到linux系统目录,例如: 共享目录 / U盘挂载
root: 超级用户root的家目录

不常用目录:
lost+found:系统奔溃,会产生一些碎片存放到此目录,当系统重启时,系统修复碎片
opt:功能性代码,可选程序
run:系统运行时产生信息存放目录
srv:系统服务日志
media:多媒体设备挂载点
sys:系统运行时产生信息存放目录
var:存放系统运行时需要改变的数据
cdrom: 光驱挂载目录
selinux:加固系统目录
tmp:临时文件存放的目录

五. 环境变量
环境变量存在于linux系统中一种变量,不同于C语言中语法变量。

  1. 查看当前linux系统下环境变量
    gec@ubuntu:~$ env

环境变量名字=需要赋的值
SHELL=/bin/bash --> linux命令解析器
–> 只要终端启动了,就会执行该文件
OLDPWD=/sys --> 保存上一次的工作路径 ("cd -"切换到的路径)
USER=gec --> 命令: whoami 查询当前的用户名
PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/bin

//当我们需要使用ls命令时,正常来讲,系统会在当前目录下寻找ls这个程序,如果系统在当前目录下没有找到ls命令,系统就会在PATH这个环境变量下的路径寻找ls。如果找到了,则可以在任何的路径下都使用ls命令。

PWD=/home/gec --> 当前所在的工作路径 ("cd ."切换到的路径)
HOME=/home/gec --> 家目录路径 (“cd”/"cd ~"切换到的路径)

  1. 如何修改环境变量PATH这个值?

1)不在原来的基础上修改PATH,直接给PATH赋新的值
gec@ubuntu:~$ export PATH=/home/gec --> 环境变量PATH只等于家目录,系统在寻找可执行程序,只会在家目录下寻找
gec@ubuntu:~$ ls
Command 'ls’ is available in '/bin/ls’ //ls这个程序其实是在/bin有效
The command could not be located because '/bin’ is not included in the PATH environment variable.//因为/bin不在环境变量PATH下
ls: command not found

2)在原来的基础上添加一个新的路径
PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin/:/usr/games:/usr/local/arm/bin
引用原来PATH的变量: $PATH

$PATH等价于/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/bin

例子: 临时在系统PATH环境变量基础上添加家目录命令:
gec@ubuntu:~$ export PATH=$PATH:/home/gec

3)永久修改: 把命令写在.bashrc脚本中。

练习1: 永久添加/home/gec/project/到环境变量PATH

1)在家目录创建project目录
	mkdir /home/gec/project
2)把该路径添加到PATH中
	export PATH=$PATH:/home/gec/project
3)永久修改只需要把这句话添加到~/.bashrc就可以
4)重启终端 / source ~/.bashrc123456

练习2: 写一个helloworld程序project.c,使用环境变量,使得可以在任何的路径下都可以执行该文件。

1)在任意的路径下写一个helloworld程序
	/home/gec/aaa/bbb    project.c  -->  project
2)把该路径添加到PATH中
	export PATH=$PATH:/home/gec/aaa/bbb/   		//正确
	export PATH=$PATH:/home/gec/aaa/bbb/project     //错误
3)可以在任何的路径下都可以执行该文件123456

gec@ubuntu:~$ project
helloworld!
gec@ubuntu:/$ project
helloworld!
gec@ubuntu:~/aaa/bbb$ project
helloworld!

4)如果不小心把环境变量修改错误,怎么办?

1. 修改脚本,提示gedit所在的路径1

gec@ubuntu:~$ gedit .bashrc
Command 'gedit’ is available in '/usr/bin/gedit’
The command could not be located because '/usr/bin’ is not included in the PATH environment variable.
gedit: command not found

2. 使用gedit绝对路径打开脚本1

gec@ubuntu:~$ /usr/bin/gedit .bashrc

3. 修改脚本内容:1

export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

系统可执行程序常用路径:
/bin
/sbin
/usr/bin
/usr/sbin
/usr/local/bin
/usr/local/sbin

4. 重启终端1

六. linux shell命令功能

  1. 查看历史命令 – 方向键"上"“下”
    1). 使用方向键查看历史写过linux命令
    gec@ubuntu:~$ history --> 查看最近使用的1000条
    1626 env
    1627 ls
    1628 gedit .bashrc
    1629 /usr/bin/gedit .bashrc
    1630 source .bashrc
    1631 env
    1632 ls
    1633 history

2). 所有写过的命令都会保存在~/.bash_history下
想清除历史记录,删除该文件中的内容即可。

  1. linux命令与文件名补齐 – Tab键
    gec@ubuntu:~$ mk
    –> 按一下Tab键,提示当前目录下所有以mk开头的文件名,如果只有一个mk开头的文件,则直接补齐。
    –> 按两下Tab键,提示当前系统中所有以mk开头的linux命令

  2. 给linux命令取别名 --> alias命令

系统脚本中已经有存在取别名:

some more ls aliases

alias ll='ls -l’
alias la='ls -la’
alias l='ll’
alias c='clear’ --> "c"命令 等价于 "clear"命令

练习: "p" 代替 "pwd"1

七. man手册(linux中的新华字典)

当我们在linux系统中遇到一些我们不懂的函数/命令时,就可以查阅man手册,所以用户不用刻意记住命令参数,函数的参数,返回值,头文件。我们只需要学会如何区查询函数/命令用法即可!

  1. 查看man自身的用法
    gec@ubuntu:~$ man man
    –> 第一个man: 使用man这个命令
    –> 第二个man: 查看的内容

手册数 手册内容的简单描述
1 Executable programs or shell commands --> 可执行程序/linux命令
2 System calls (functions provided by the kernel) --> 系统调用函数 open() read()
3 Library calls (functions within program libraries) --> 库调用函数 printf() scanf() -> 标准C库

  1. man命令所在路径
    gec@ubuntu:~$ which man
    /usr/bin/man

  2. man命令如何查看内容?

使用格式:
1)man 查询的手册数 需要查看的内容
man [[section] page …] …

2)查询man的手册数
man -f [whatis options] page …

例子:查看printf函数用法:
1)已知printf手册数:man 3 printf
2)未知printf手册数:
gec@ubuntu:~$ man -f printf
printf (1) - format and print data --> printf命令
printf (3) - formatted output conversion --> printf函数 --> man 3 printf

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多