Linux常见指令以及权限理解

目录

一、Linux的一些常用的指令

指令一:ls  列出当前目录中的内容 或者 当前文件中的内容

指令二:pwd 显示当前路径

指令三:cd 进入目录(绝路路径/相对路径的方式进行路径切换)

4.关于绝对路径和相对路径 :  

指令四:touch  创建一个新文件 或 更改已存在的目录或文件的存取时间和更改时间

4.stat 命令可以查看文件的属性 例如: stat bao.txt  这串命令可以查看 bao.txt 的文件属性

指令五:mkdir 创建一个新的空目录 

指令六:rmdir和rm 删除目录命令和删除命令

5.*是一种通配结构

指令七:man 通过Linux手册帮助查看当前指令的用法

指令八:tree 树状显示目录

指令九:cp 复制文件或目录

指令十:mv 移动文件或者将文件改名 

指令十一:cat 显示文件内容

指令十二:echo 显示字符串  

指令十三:> 输出重定向符号 和 >> 追加重定向符号 和 < 输入重定向符号

指令十四: 在Linux中,一切皆文件

指令十五:Ctrl c 终止前端进程

指令十六:nano 文本编辑器 (类似于Windows上的记事本)

指令十七:more 将文件内容显示,直到显示整个屏幕为止

2.但是more 不能向上翻,只能通过按回车的方式一直向下翻看,所以有了less

指令十八:less  浏览文件,显示满整个屏幕(和more一样功能)

指令十九:head和tail 从头显示文本和从结尾显示文本

指令二十:| 管道

指令二十一:date 显示当前系统时间

指令二十二:cal 显示日历

指令二十三:find -name 查找

指令二十四:grep  显示带有关键词的文本行

指令二十五:which 显示出该指令对应的可执行程序的目录

3.whereis 和which 不同,which是寻找特定指令所在的路径,而whereis 则可以吧系统中所有带有所输入关键字的文件的路径全部显示出来

指令二十六:alias 给一个命令起别名 

指令二十七:zip/unzip 压缩(将目标文件或目录压缩成zip格式)和解压

指令二十八:tar 打包、解包、查看内容

指令二十九:bc 计算器

指令三十:uname 显示Linux详细信息

指令三十一:history 显示之前所输入的命令

指令三十二:su 切换用户(一三)

指令三十三:chmod 改变权限

指令三十四:umask 查看权限掩码

二、shell 外壳程序

三、Linux权限的概念

5.如何表达一个文件的权限呢?

6.如何修改权限?

8.如何修改文件的拥有者呢? 

9.权限掩码 umask(0xxx八进制)

10. 粘滞位


一、Linux的一些常用的指令

指令一:ls  列出当前目录中的内容 或者 当前文件中的内容

1.ls有很多选项

例如 ls -l 能显示文件的详细信息 ls -a 能列出目录下的所有文件包括以.开头的隐藏文件

其中   . 表示当前路径  ..表示上级路径 

2.which ls 可以查看到ls的系统路径(指令本质上也是Linux的.exe文件)

3.alias newls = 'ls'可以给ls取别名 这样输入newls指令就相当于输入了ls指令,关机(会话结束)就会失效。

指令二:pwd 显示当前路径

1.“ / ”这玩意儿叫做路径分隔符 在Linux中是/ 在Windows中是\

指令三:cd 进入目录(绝路路径/相对路径的方式进行路径切换)

在Linux中,磁盘上的文件和目录会组成一颗目录树,每个节点都是目录或者文件

即:Linux的整个目录结构,其实是一颗多叉树结构

1.cd - 回到最近一次来的路径        -:记录上一次来的路径

2.cd ~ 回到用户对应的工作目录           ~: 记录家目录,普通用户的家目录是/home ,root用户的家目录是/root

3.cd .. 可以回退到上级路径  (从上面这个树状图我们也能看出来 ,如果一直执行cd .. 命令一直回退的话就会回到根目录 /)

问:cd .. 可以回退 ,那 . 有啥用呢?

答:./可执行程序名    .可以限定我们要执行的可执行程序在什么位置

4.关于绝对路径和相对路径 :  

绝对路径就是从家目录开始全部显示出来的路径 

例如:/home/bz/test8.13/

相对路径就是相对于当前路径的各种操作的路径

例如:../test8.12/ 就是相对于当前路径的上级路径的目录中的test8.12 路径

指令四:touch  创建一个新文件 或 更改已存在的目录或文件的存取时间和更改时间

1.touch 一个不存在的文件名会新建一个文件 

2.touch 一个已经存在的文件名 会更新该文件的 创建日期(存取日期)和修改日期 (默认情况下是全改,touch有一些选项可以针对性的改)

3.文件的时间: Access 存取时间   Modify 修改数据时间(内容) Change 修改元数据时间(例如权限、所属组等) 

4.stat 命令可以查看文件的属性 例如: stat bao.txt  这串命令可以查看 bao.txt 的文件属性

指令五:mkdir 创建一个新的空目录 

1.mkdir 有个 -p 选项 ,可以创建一串新的路径 也就是说可以一次建立多个目录(递归建立)

例如: mkdir -p /home/bz/hand/some/boy

 

指令六:rmdir和rm 删除目录命令和删除命令

1.rmdir是和mkdir相对的一个命令 可以用来删除目录 (注意rmdir 只能删除空的目录)

2.和mkdir相对应的 rmdir -p 目录名 可以递归删除空目录 也就是:删除了当前目录之后 如果父目录也变成了空目录的话 就吧父目录也一并删除 

3.和rmdir不同 rm没有局限性 它既可以删除目录也可以删除文件,rm有如下几个选项:

rm [-f/-i/-r] 要删的文件或者目录名

-f :强制删除(若文件属性是‘’只读‘’,即读写保护,-f可以强制删除) 

-i:删除之前注意确认  

-r:递归删除(也就是删除目录)

 4.注意:选项可以叠加使用

例如:rm -rf 即强制删除一个目录

5.*是一种通配结构

例如 : 

 *.c     就是所有当前目录下所有的以.c为后缀的文件

file*    就是所有当前目录下的file开头的文件

*         就是当前目录下的所有文件

(rm -rf * 这个命令 就是 清空一切 ,慎用)

指令七:man 通过Linux手册帮助查看当前指令的用法

1.用法格式 : man [选项] 命令这就意味着可以man man 这样来查看man自己的用法

2.按 q键 可以退出手册

指令八:tree 树状显示目录

树状显示目录。

指令九:cp 复制文件或目录

1.用法格式 : cp [选项] 源文件或者目录  目标文件或者目录

例:

 cp bz.exe /home/bz/test 8.13

就是把 bz.exe 拷贝掉 /home/bz/8.13  目录中去 (这里不一定非要用绝对路径 也可以使用相对路径)

2.注意:拷贝命令只能在我(用户)之后的目录中拷贝 (因为权限不够)

3.

常用选项

-f 或 --force :强行复制文件或目录, 不论目的文件或目录是否已经存在

-i 或 --interactive :覆盖文件之前先询问用户

-r递归处理:将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理

-R 或 --recursive:递归处理,将指定目录下的文件及子目录一并处理

指令十:mv 移动文件或者将文件改名 

1.用法格式:

mv 目标文件或者目录位置     要移动去的目录位置----->移动

mv 目标文件名 新文件名 或者 mv 目标目录名 新目录名----->改名

2. 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
3. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
4. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。

指令十一:cat 显示文件内容

1.cat的价值就是在于不打开文件就能查看文件

2.cat -n 文件名可以带着行号显示文件内容

3.tac 文件名可以反顺序显示内容

例如:

             1                                 3

原来是  2   会被显示成为 ->    2

             3                                 1

指令十二:echo 显示字符串  

1.echo 可以把一个字符串显示出来  

例如: echo "bznb"   就会显示出 bznb

2.echo和cat的区别就在于 cat是打印内容 echo是打印字符串

3.echo "bznb" > file.txt  这个命令 会创建一个file.txt 文件或者在已有的file.txt文件中打印出bznb 这个字符串  (这里用到了 > 输出重定向符号)

指令十三:> 输出重定向符号 和 >> 追加重定向符号 和 < 输入重定向符号

1.在上面echo的介绍中 ,echo "bznb" > file.txt  这个命令 会创建一个file.txt 文件或者在已有的file.txt文件中打印出bznb 这个字符串  (这里用到了 > 输出重定向符号)

 这时cat file.txt 就会显示出 bznb ,这里输出重定向符号代表着:本该输出在显示屏上的字符串被写入(输出)到了文本中

2.如果写成了 >>的话,那cat  file.txt 就会显示 bznb bznb (两行) 

3.cat 是通过文件名,从文件中读取,然后输出到显示屏上的

用" > " 输出重定向是从键盘中读取 然后输出到对应的文件中 

用 " < " 输入重定向是从对应文件中读取 然后输入到左边对应的文件中 的 

例如:cat < file.txt  就是从文件中读取然后输入到显示屏中 

总结 :

1.如果目标文件不存在 ,输出重定向 >  和 追加重定向 >> 会创建一个新文件,否则会直接访问已有文件

2.访问: 输出重定向 > 是从文件的开头覆盖式的写入

               追加重定向 >> 是从文件的结尾追加式的写入

3.输入重定向 < 就是 本来应该从键盘中的读取,变成了从文件中读取            

指令十四: 在Linux中,一切皆文件

1.Linux是用c语言和少量汇编写的

2.我们知道一个 word.txt 文件 是可以查看(读r)、可以修改(写w)的,那么其实显示器(rw)、键盘(r)等等这些硬件都是可以的 

3.但是要注意的是,它们的读写方法一定是不一样的,只是这些差异可以通过操作系统屏蔽了

指令十五:Ctrl c 终止前端进程

如果遇到无法结束的进程 ,可以使用Ctrl c快速终止前端进程

指令十六:nano 文本编辑器 (类似于Windows上的记事本)

nano 文件名   就是用nano 编写文本文件 ,如果改文件名不存在 ,就会创建新的文件

指令十七:more 将文件内容显示,直到显示整个屏幕为止

1.more的功能和cat类似,都是显示文本内容,但是如果文本内容很长,more会显示整个屏幕

初步总结:看短文本 用cat ,看长文本 用more

2.但是more 不能向上翻,只能通过按回车的方式一直向下翻看,所以有了less

less和more是同样的功能(显示整个屏幕),但是less可以上下翻看(按上下键)

因此重新总结:看短文本用cat,看长文本用less

3.按q退出more 或less

指令十八:less  浏览文件,显示满整个屏幕(和more一样功能)

1.less 是Linux正统查看文件内容的工具,他的功能十分强大,同样有着分页查看(显示慢整个屏幕)的功能的情况下,less比more更有弹性。

2.less 是有选项的:

-i  :忽略搜索时的大小写
-N  :显示每行的行号
/字符串  :向下搜索“字符串”的功能
?字符串  :向上搜索“字符串”的功能
n  :重复前一个搜索(与 / 或 ? 有关)
N  :反向重复前一个搜索(与 / 或 ? 有关)

指令十九:head和tail 从头显示文本和从结尾显示文本

1.head和tail 就如同它们的名字一样简单易懂 ,head 就是从头开始显示 ,tail就是从结尾开始显示。

2.head 和 tail 默认都是显示前十行和倒数后十行

3.head -n[数] 文件名 通过-n选项,可以指定显示前[数]行。(tail同样的)

4.tail -f -n[数] 文件名这里的-f 选项是head没有而tail有的 ,可以循环读取文本最末尾的内容显示在屏幕上(常用于观察正在改变的文件的改变)

指令二十:| 管道

1.上面我们学了head和tail的用法,那么如果要指定读取一个文本的第一百行的内容,该怎么做呢?

方法一: 

head -n100 bz.txt > tmp.txt (先取出 前一百行内容放到一个文件中)

tail -1 tmp.txt (在从这个新建的文件中读取出最后一行也就是第一百行的内容)

方法二:

head -n100 bz.txt | tail -1

这里就用到了 管道

使用“|”连接两个命令,shell会将前后两个进程的输入输出用一个管道相连,以便达到进程间通信的目的

2.管道本质上就是一个文件,前面的进程以写方式打开文件,后面的进程以读方式打开。这样前面写完后面读,于是就实现了通信。实际上管道的设计也是遵循UNIX的“一切皆文件”设计原则的,它本质上就是一个文件。

3.虽然实现形态上是文件,但是管道本身并不占用磁盘或者其他外部存储的空间。在Linux的实现上,它占用的是内存空间。所以,Linux上的管道就是一个操作方式为文件的内存缓冲区

指令二十一:date 显示当前系统时间

1.date是有很多选项的 :

+%Y    年(注意这里的"+"是要写的!)

%m      月

%d       日

%H       小时

%M       分

%S        秒

%F        年-月-日

%X        时:分:秒

例如:

date +%Y.%m.%d-%H:%M:%S      

 这串命令中的“.”“-”“:”是随便写的,你写成什么,他就打印各个时间之间就会以什么符号间隔。

2.注意第1点中提到的+是必须写的 ,因为一般年(%Y)在最前面显示,所以默认在其前面加上了+号,如果想要单独显示其他时间,也必须加上"+"

例如:

 3.date -s 时间 可以设定时间但是要注意格式:

date -s //设置当前时间,只有root权限才能设置,其他只能查看。
date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 //设置具体时间,不会对日期做更改
date -s “01:01:01 2008-05-23″ //这样可以设置全部时间
date -s “01:01:01 20080523″ //这样可以设置全部时间
date -s “2008-05-23 01:01:01″ //这样可以设置全部时间
date -s “20080523 01:01:01″ //这样可以设置全部时间

(建议不要乱设定时间)

4.date +%s 这个命令可以显示时间戳(1970.1.1到现在的秒数)

时间戳的特点:单向递增,且具有唯一性

5.date -d @[时间戳]这个命令可以把时间戳转化为时间

但是他搞出来是英文的,可以date +%Y.%m.%d-%H:%M:%S -d@[时间戳]这样写来显示北京时间。

指令二十二:cal 显示日历

 1.cal -1 可以显示当前月的日历

2.cal -3 可以显示前一个月、当前月和下个月的日历

3.cal -y 可以显示当前年份的日历

4.cal -j 可以显示今天是今年的第几天

5.cal [参数] [月] [年] 可以执行各种命令

指令二十三:find -name 查找

1.find是一个较为重要的指令,它有很多选项值得学习

2.常用的选项 -name ,意为文件名查找文件(或者目录)

指令二十四:grep  显示带有关键词的文本行

1.格式用法:grep [选项] 搜寻的字符串 文件名

例如:

 显示出了所有带‘i’的文本行

2.选项:

-i:忽略大小写搜索

-n:带行号输出

-v:显示所有不带关键词的文本号,即反向选择。

指令二十五:which 显示出该指令对应的可执行程序的目录

1.格式写法:which [指令名]

例如:

 问:如何看待Linux下的各种指令呢?

答:一切皆为文件,这些指令本质上也都是可执行程序。

我们在电脑上安装的软件,其实也就是可执行程序(.exe)

我们编写的C/C++代码,编译器编译了之后生成的也是可执行程序,其实所谓安装软件,就是把对应的.exe文件拷贝到我们的电脑里。

2.ls的功能我们已经清楚是显示目录,which ls 已发现ls 在/usr/bin/ls 目录下,我们也可以用/usr/bin/ls 的方式来执行ls命令。

 这就和./a.out 一样,带上.就是为了找到可执行程序。

 

3.whereis 和which 不同,which是寻找特定指令所在的路径,而whereis 则可以吧系统中所有带有所输入关键字的文件的路径全部显示出来

 

指令二十六:alias 给一个命令起别名 

1.和C语言中的typedef类似,给一个命令取别名。

格式写法:alias [命令名='新名字'] 

例如:

alias show='ls'

就可以用show来实现ls命令

 此时,which whow 就会显示 ls 的路径。

2.注意,alias只在当前登录有效。

 

指令二十七:zip/unzip 压缩(将目标文件或目录压缩成zip格式)和解压

问:什么是打包和压缩?

答:打包:将东西放在一起,压缩:采用某种压缩算法,压缩已经打包好的东西的存储空间。

1.格式写法: zip 新文件名  被压缩文件名 生成一个压缩文件

2.zip -r 新文件名 被压缩目录名  压缩整个目录(-r代表递归处理,将目标目录下的所有子目录和文件一并处理)

3.unzip是解压 格式写法:unzip 压缩文件就是在当前目录下解压生成一个文件或者目录

4.unzip 压缩文件 -d 目标路径 就是在对应目录下解压生成一个文件或目录

例:

zip bz.zip  ./8.13/* 或者 zip bz.zip -r ./8.13  将8.13目录压缩到bz.zip文件中

unzip bz.zip 就是在当前路径生成文件

unzip bz.zip -d /home/bz 就是在/home/bz 目录下解压生成文件

指令二十八:tar 打包、解包、查看内容

tar有许多选项

-c:建立一个压缩文件
-x:解开一个压缩文件
-t:查看tarfile里面的文件
-z:查看属性
-v:压缩的过程中显示文件
-f:命名
-C:解压到指定目录
例:
tar -czvf bz.tgz bz.c   压缩
tar -xzvf bz.tgz -C /home/bz 解压到指定路径

指令二十九:bc 计算器

bc 指令可以很方便的进行浮点计算

指令三十:uname 显示Linux详细信息

1.uname -a 显示所有信息(依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称)

2.uname -r 获取Linux操作版本和体系结构(硬件体系结构(一般都是x86_64))

指令三十一:history 显示之前所输入的命令

显示之前所输入的命令

指令三十二:su 切换用户(一三)

1.su 用户名 切换到指定用户 (需要输入密码)

例如 su bz    su root  

2.切换用户就是切换我当前的权限

指令三十三:chmod 改变权限

chmod [u/g/o/a(a是所有人)][+/-][r/w/x] 文件名

注意:rwx的前后顺序永远不变,要么有要么无 

 例:

chmod u+x bz.c 给拥有者增加执行权限

chmod u-rw bz.c 给拥有者去掉读写权限

chmod u-wx,g+r,o+r bz.c 连续修改权限

 

指令三十四:umask 查看权限掩码

1.umask是查看权限掩码的命令

2.umask 0XXX  (0开头八进制数字)就是设置权限掩码

二、shell 外壳程序

1.shell运行原理:外壳程序

1.我们人(也就是用户),是不善于直接使用Linux操作系统内核(kernel)的

2.如果让我们人直接去访问操作系统,那需要很高的成本(需要懂操作系统)以及会导致不安全的一些因素。

因此我们需要通过shell外壳程序来使用操作系统

3.在Windows中 ,我们双击“我的电脑”再双击“D盘”,这里的双击就是图形接口,也就是通过图形化界面来使用操作系统

在Linux中,我们也是通过“ls”来显示目录内容,即用指令操作来使用操作系统。

4.总结:外壳程序的意义:

1.是用户和操作系统交互中间的软件层 

2.可以在一定程度上起到保护操作系统的作用。

三、Linux权限的概念

1.Linux下有两种用户:超级用户(root)和普通用户。超级用户命令提示符是#,普通用户则是$

2.

对于用户来说,Linux下可以存在多个用户,root用户(只能有一个,具有最高权限,不受权限约束)、普通用户(可以有多个,受权限的约束),因此Linux是个多用户操作系统。

对于角色和文件来说,权限是什么?———用来针对人的,事物的基本属性决定权限相关的概念的—>文件权限(权限的核心就是 = 人 + 事物属性)-->一件事情是否被允许被你去做。

3.我们通过ll命令来显示详细目录下文件详细属性,可以看到第一列的第一个字符,就代表文件的类型(Linux下是不以文件的后缀名来区分文件类型的(并不代表不能使用))

 

在这其中:

d :目录 

-:普通文件

p:管道文件

l:链接文件(类似于Windows下的“快捷方式”)

b:块设备(也就是磁盘设备)

c:字符设备(键盘或者显示器)

s:套接口文件

例:

 

 

 

4.人的身份有很多但在Linux中只有三种

拥有者user(u):文件属于谁

所属组group(g):文件属于哪一个组

other(o):不属于拥有者也不属于所属组的用户,就是other

注意:权限只会认证一次,即如果用户bz就是u又是g,那会按u的权限来算,于g的权限无关。

上面这张图中,拥有者是rwx ,所属组是r-x,other是r-x。

5.如何表达一个文件的权限呢?

r:读    w:写     x:可执行

(重定向算写,例如echo "nb" > bz.c) 

例:-rwxrwxr-x 这个文件的权限 可以拆分为

拥有者:rwx  所属组:rwx   和other: r-x

6.如何修改权限?

修改权限有两个办法 ,一个是改人,换个人就行。一个是改变文件属性。

我们已经知道su可以换人,那改文件属性怎么搞?

chmod [u/g/o/a(a是所有人)][+/-][r/w/x] 文件名

注意:1.rwx的前后顺序永远不变,要么有要么无   2.只有文件的拥有者和root可以修改文件的权限 

 例:

chmod u+x bz.c 给拥有者增加执行权限

chmod u-rw bz.c 给拥有者去掉读写权限

chmod u-wx,g+r,o+r bz.c 连续修改权限

另外,结合“rwx顺序永远不变”这个特点,也可以用二进制来代替:111来代替rwx,000代替---。

也就是用三个二进制数字来代替:1代表有 ,0 代表无

例:

chmod 777   ——   chmod 111111111   ——   chmod a+rwx

chmod 640   ——   chmod 110100000   ——  chmod u+rw,g+r 

7.没有权限会导致什么问题?

Permission denied 禁止相关操作

8.如何修改文件的拥有者呢? 

chown改变拥有者

chgrp改变所属组

但是把文件转成另一个用户的,需要另一个用户同意(此时只能切root或者sudo 命令——如果用户想执行sudo,提升权限,需要该用户在信任列表中才可以执行sudo,添加一个用户到信任列表中是需要root身份的。)

例:

sudo chown bz file.txt 把file文件转给 bz

chown bz:bz file.txt 把拥有者和所属组一起修改

 

问:要进入(cd)一个目录,需要什么权限?

答:x(可执行)权限,

r ——在该目录下不准ls、ll等操作(查看目录内容)

w——在该目录下不准touch、mkdir等操作(在目录下创建目录或者文件)

x——进入目录

9.权限掩码 umask(0xxx八进制)

-rw-rw-r--    664 ...    file  ->默认文件起始权限   666   

lrwxrwxr-x 775  ...  dir -> 默认目录起始权限  777

我们发现,创建的默认目录和文件,它的其实权限不同

最终权限 = 起始权限 ???umask(这里???是一个运算符,即为 &~ ——先对umask取反,再用起始权限与上它) 

例:

 

 我们得出结论,凡是在umask中出现的权限,都不应该在最终权限中出现

设置权限掩码  umask 0XXX

查看权限掩码  umask 

10. 粘滞位

由于在目录中,文件的新建与删除与文件权限无关,只和当前目录的 r(写权限)有关,这就导致在同一个目录下工作时,我们的文件有可能会被别人误删。

处理方法:1.自己的目录别人是进不来的      2.粘滞位:chmod o+t  目录名

注意:

1.设置了粘滞位之后,只有文件拥有者可以删除文件,其他人无法删

2.此时目录下other的权限为rwt 

3.粘滞位只能给目录设置

4.粘滞位一般是谁设置谁才能取消

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>