Linux教程

Linux入门(常见指令及权限)

本文主要是介绍Linux入门(常见指令及权限),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

        

目录

Linux背景

Linux发展

UNIX发展的历史

Linux发展历史

Linux下基本指令

ls指令

常用选项

ls -a

ls -l  

 组合选项 ls -al

 pwd指令

cd指令

touch指令

常见选项

mkdir指令

tree指令

rmdir指令 && rm 指令

功能选项

常用选项

man指令

常用选项

man指令完整版安装

cp指令

常用选项

mv指令

cat指令

常用选项

more指令

常用选项

less指令

常用选项

head指令

选项

tail指令

选项

date指令

选项

时间方面的设置

时间戳

cal指令

常用选项

find指令

选项

    grep指令

常用选项

管道指令

管道命令一个重要应用场景

重定向命令 > 

 追加重定向命令 >>

zip/unzip指令(压缩/解压)

选项

tar指令(打包/解包)

 选项

bc指令

 uname指令

选项

几个重要的热键

TAB键

 ctrl+c键

ctrl+d键

ctrl+r键

history

关机指令 

选项

补充

Linux权限

ps axj | grep bash

 文件访问者的分类

文件类型和访问权限

文件类型

文件权限的设置

chmod

常用选项

chmod第二种修改命令方式

chown

 chgrp

选项

chgrp特例

 chown特例(更改当前用户和所属组)

 umask

注意:

file指令

常用选项

目录的权限

粘滞位

关于权限的总结

普通用户创建和删除

创建用户名

设置密码

删除用户


Linux背景

Linux发展

      你可能要问Linux从哪里来?它是怎么发展的?在这里简要介绍Linux的发展史。要说 Linux,还得从UNIX说起。

UNIX发展的历史

      1968年,一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊操作系统。 Multics在多任务文件管理和用户连接中综合了许多新概念。
      1969- 1970年, AT&T的贝尔实验室研究人员Ken Tompson和Dennis Ritchie,在采用很多Multics特点的基础上开发了UINX系统。它运行在小型机上,满足了系统对科研环境的要求。从产生开始, UNIX就是一个有价值的、高效的、多用户和多任务的操作系统。
      UNIX从满足个人的设计需求开始,逐步成长为由许多不同开发商所支持的标准软件产品。
       第一个UNIX版本是免费给许多知名大学的计算机系使用的。
      1972年,贝尔实验室开始发放商业版本,并且给不同的用户授权使用这个系统,使用者之一是加州大学伯克莱分校的计算机系。伯克莱给系统增加了许多新的特点,后来成为了标准。
       1975年伯克莱由下属部门BSD发行了自己的UNIX版本。 UNIX的BSD版本成为AT&T贝尔实验室版本的主要竞
争者,而其它的独立开发出的UNIX版本也开始萌生。
       1980年微软公司开发了叫做Xenix的UNIX PC版本。 AT&T发行了第一个商业版本。名叫System Ⅲ,后来被成为对商用软件产品良好支持的System Ⅴ所替代。同时UNIX的BSD版本不断发展,在70年代末期, BSD UNIX成为了国防部的高科技研究机构科研项目的基础。
其结果,伯克莱发行了一个叫做BSD Release 4.2的有效版本。它包括了高级的文件管理器和基于TCP/IP网络协议的网络特点。现在TCP/IP被Internet所使用。 BSD Release
4.2被许多厂商所采用,例如SUN Microsystem。
       UNIX不同版本的出现导致了UNIX标准的需要,软件开发商不知道他们的程序运行在哪些版本上比较合适。
       到80年代中期,两个竞争的标准出现了,一个是基于AT&T的UNIX版本,另一个是BSD版本。在今天的书店里你能发现分别适用于这两个版本的不同的UNIX的书,一些是System V,另一些集中在BSD UNIX。
       AT&T建立了一个叫UNIX系统实验室的新组织,它的作用就是综合UNIX的不同版本,集中开发一个标准系统。
       1991年, UNIX综合实验室综合了System V Release3, SUN OS和Xenix的所有特点,发行了System V  Release 4。为了与System V Release 4 竞争,一些其它公司,如IBM和惠普Open SoftwareFoundation(OSF)去产生自己的UNIX标准版本,继而出现了两个标准商业版本OSF版本和System Release4。
       1993年, AT&T把它的UNIX转卖给Novell公司。 UNIX系统实验室成为了Novell的UNIX系统小组的一部分。Novell发行了基于System V Release 4的自己的UNIX版本UNIXWare,它可以和Novell公司的Netware系统相联。 SUN公司已经把System V Release 4 融进了它的SUN OS,发行了Solaris。两个相互竞争的UNIX使用的图形用户界面(一个叫Motif,另一个叫Openlook),已经合并为一个新的工作平台标准,叫做通用平台环境(CDE)。

Linux发展历史

       1991年10月5日,赫尔辛基大学的一名研究生Linus Benedict Torvalds在一个Usenet新闻组(comp.os.minix)中宣布他编制出了一种类似UNIX的小操作系统,叫Linux。新的操作系统是受到另一个UNIX的小操作系统——Minix的启发,该系统是由一名AndrewSTanenbaum的教师开发的。读者也许猜想所发布的这个系统应该是Linux的0.01版本,实际上不是这样。真正的Linux 0.01版本并没有被发布,原因是0.01版本不实用。 Linus仅仅在第一个Linux的FTP站点(ftp://nic.funet.fi)上提供过这个版本的的源代码。

      Torvalds于10月5日发布的这个Linux版本被称为0.02版,它能够运行GNU Bourne Again Shell(bash)和GNU的C编译程序(gcc)以及为数不多的其它语言。 Torvalds绝对没有想到他设想的一种能够针对高级业余爱好者和黑客们的操作系统已经产生,这就是人们所称Linux。Linux发布时的版本是0.02,后来又有0.03版,然后又跳到0.10版。因为世界各地越来越多的程序员都开始开发Linux,它已经达到0.95版。这就意味着正是公布1.0版本的时间已经为期不远了。正式的1.0版本是在1994年公布的。

看了这么多,是不是感觉脑瓜子嗡嗡的?其实我们只要注意以下就行了。

1、Linux是开源的,所以稳定、高效、更安全。

2、企业应用现状。Linux在服务器领域的发展、Linux在桌面领域的发展、Linux在移动嵌入         式领域的发展、Linux在云计算/大数据领域的发展。

3、发行版本:Debian、Ubuntu、红帽企业级Linux、CentOS......

Linux下基本指令

ls指令

语法: ls [选项][目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及             其他信息。

举个栗子:

[cyq@VM-0-7-centos ~]$ ls

                 

 ls这时会显示当前当前路径下所有文件和目录。

目录:dir  lesson3  lesson4  lesson5  lesson6  test

文件:无 (因为在这里没有创建)。

[cyq@VM-0-7-centos ~]$ ls lesson3

                  

 ls lesson3  这时候会显示目录lesson3下的文件和目录。

目录:  file5.c

文件:file1  file2  file3  file4  

[cyq@VM-0-7-centos lesson3]$ ls file1

                  

我们进入到目录lesson3后,然后 ls file1

对于文件,这时候会显示文件名信息。

常用选项

-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-d 将目录象文件一样显示,而不是显示其下的文件。 如: ls –d 指定目录
-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件
-k 以 k 字节的形式表示文件的大小。 ls –alk 指定文件
-l 列出文件的详细信息。
-n 用数字的 UID,GID 代替名称。 (介绍 UID, GID)
-F 在每个文件名后附上一个字符以说明该文件的类型, “*”表示可执行的普通文件; “/”表示        目录; “@”表示符号链接; “|”表示FIFOs; “=”表示套接字(sockets)。(目录类型识别)
-r 对目录反向排序。
-t 以时间排序。
-s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
-R 列出所有子目录下的文件。 (递归)
-1 一行只输出一个文件。

对于上面比较多的选项,在这里只介绍一些常用的~

ls -a

[cyq@VM-0-7-centos ~]$ ls -a 

 列出目录下所有文文件,包括以 .开头的隐藏文件。(ls -a 后面也可以跟目录或文件名)

相比较于上面刚才介绍的的ls;我们发现上面多出了很多文件:

.   .bash_history  .bash_profile  .cache   
..  .bash_logout   .bashrc        .config  .lesshst  lesson4  lesson6  .viminfo

多出来的文件都是以.为前缀的,这时候我们可以总结:以 . 为开头的文件或目录,是隐藏文件或目录。

补充:

. :表示当前路径

..:表示上一级路径

ls -l  

[cyq@VM-0-7-centos ~]$ ls -l

               

 ls -l:显示当前路径下文件和目录的详情信息。此外:ls -l可以简写成ll 

                

 组合选项 ls -al

[cyq@VM-0-7-centos ~]$ ls -al

         

 显示当前路径下所有文件和目录(包括隐藏的)以及详情信息。此外也可以写成:ll -a

          

 pwd指令

功能:显示用户当前所在的目录(路径)。

[cyq@VM-0-7-centos lesson3]$ pwd

                           

 /home/cyq/lesson3表示当前目录的路径。

home目录下的cyq目录,cyq目录下的lesson3目录。 

/:Linux下的路径分隔符

在windows下是这样表示的:

此电脑\软件\vs2019:表示vs2019的路径。

cd指令

语法:cd 目录名

功能:改变工作目录。将当前工作目录改变到指定的目录下。

举些栗子:

cd .. : 返回上级目录
cd /home/cyq/lesson3: 绝对路径
cd ../day02/ : 相对路径
cd ~:进入用户家目
cd -:返回最近访问目录

例1:

[cyq@VM-0-7-centos lesson3]$ pwd //当前路径
/home/cyq/lesson3
[cyq@VM-0-7-centos lesson3]$ cd .. //进入上级目录
[cyq@VM-0-7-centos ~]$ pwd //当前路径
/home/cyq

例2:

[cyq@VM-0-7-centos ~]$ cd /home/cyq/lesson3 //绝对路径

例3:

[cyq@VM-0-7-centos lesson3]$ pwd
/home/cyq/lesson3
[cyq@VM-0-7-centos lesson3]$ cd ~ //进入家户目录
[cyq@VM-0-7-centos ~]$ pwd
/home/cyq

cd~: 进入家户目录是指进入到当前用户目录下。在这里我创建的用户名为 cyq。

例4:

[cyq@VM-0-7-centos file5.c]$ pwd
/home/cyq/lesson3/file5.c
[cyq@VM-0-7-centos file5.c]$ cd ~
[cyq@VM-0-7-centos ~]$ pwd
/home/cyq
[cyq@VM-0-7-centos ~]$ cd -
/home/cyq/lesson3/file5.c
[cyq@VM-0-7-centos file5.c]$ cd -
/home/cyq
[cyq@VM-0-7-centos ~]$ cd -
/home/cyq/lesson3/file5.c

cd -:返回上一次访问的目录。由上面例子可以看出来,cd -不断地在两个路径切换。

touch指令

语法:    touch [选项]... 文件...
功能: touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建                一个不存在的文件。

常见选项

-a 或--time=atime或--time=access或--time=use只更改存取时间。
-c 或--no-create 不建立任何文档。
-d 使用指定的日期时间,而非现在的时间。
-f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
-m 或--time=mtime或--time=modify 只更改变动时间。
-r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
-t 使用指定的日期时间,而非现在的时间。

touch创建一个文件:

[cyq@VM-0-7-centos lesson3]$ ls
file1  file2  file3  file4  file5.c
[cyq@VM-0-7-centos lesson3]$ touch file5
[cyq@VM-0-7-centos lesson3]$ ls
file1  file2  file3  file4  file5  file5.c

touch file5之后发现该目录下多了一个file5的文件。

touch创建多个文件:

[cyq@VM-0-7-centos lesson7]$ ll
total 0
[cyq@VM-0-7-centos lesson7]$ touch file1 file2 file3
[cyq@VM-0-7-centos lesson7]$ ls
file1  file2  file3

touch修改文件创建时间:

[cyq@VM-0-7-centos lesson3]$ stat file5
  File: ‘file5’
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd01h/64769d	Inode: 658687      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/     cyq)   Gid: ( 1001/     cyq)
Access: 2022-01-28 17:08:26.529179380 +0800
Modify: 2022-01-28 17:08:26.529179380 +0800
Change: 2022-01-28 17:08:26.529179380 +0800
 Birth: -
[cyq@VM-0-7-centos lesson3]$ touch file5
[cyq@VM-0-7-centos lesson3]$ stat file5
  File: ‘file5’
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd01h/64769d	Inode: 658687      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/     cyq)   Gid: ( 1001/     cyq)
Access: 2022-01-28 17:10:30.868345561 +0800
Modify: 2022-01-28 17:10:30.868345561 +0800
Change: 2022-01-28 17:10:30.868345561 +0800
 Birth: -

       我们先用stat file5命令可以查看file5的时间信息,再经过一次touch file5后,我们发现前后的文件时间改变了。

Access:访问时间

Modify: 修改时间

Change:状态改变时间

mkdir指令

语法: mkdir [选项] dir...
功能:在当前目录下创建一个名为 “dir”的目录

[cyq@VM-0-7-centos lesson3]$ ls
file1  file2  file3  file4  file5  file5.c
[cyq@VM-0-7-centos lesson3]$ mkdir dir
[cyq@VM-0-7-centos lesson3]$ ls
dir  file1  file2  file3  file4  file5  file5.c

              

 首先我们看到当前目录下文件和目录是:file1  file2  file3  file4  file5  file5.c

经过mkdir dir后该目录下文件和目录为:dir  file1  file2  file3  file4  file5  file5.c

我们发现多了一个名字叫做dir的目录。

支持多目录创建:

[cyq@VM-0-7-centos lesson3]$ ls
dir  file1  file2  file3  file4  file5  file5.c
[cyq@VM-0-7-centos lesson3]$ mkdir dir1 dir2
[cyq@VM-0-7-centos lesson3]$ ls
dir  dir1  dir2  file1  file2  file3  file4  file5  file5.c

     

 mkdir递归创建多个目录:

如果我们这样来递归创建目录的话是错误的。

[cyq@VM-0-7-centos lesson7]$ ls
file1  file2  file3
[cyq@VM-0-7-centos lesson7]$ mkdir dir1/dir2/dir3/dir4
mkdir: cannot create directory ‘dir1/dir2/dir3/dir4’: No such file or directory

正确的做法是应该在mkdir后面跟上 -p选项:

[cyq@VM-0-7-centos lesson7]$ ls
file  file.txt  Newdir
[cyq@VM-0-7-centos lesson7]$ mkdir -p dir1/dir2/dir3/dir4
[cyq@VM-0-7-centos lesson7]$ ls
dir1  file  file.txt  Newdir
[cyq@VM-0-7-centos lesson7]$ tree dir1
dir1
`-- dir2
    `-- dir3
        `-- dir4

3 directories, 0 files

          ​​​​​​​​​​​​​​  

        这时候我们就可以发现dir1目录里面有个dir2目录,dir2目录里面有个dir3目录,dir3目录里面有个dir4目录。

是不是对tree指令感到疑惑?下面来介绍一下tree指令~

tree指令

语法: tree 目录
功能:以树状形式显示目录下的文件

[cyq@VM-0-7-centos ~]$ tree lesson7
lesson7
|-- dir1
|   `-- dir2
|       `-- dir3
|           `-- dir4
|-- file1
|-- file2
`-- file3

4 directories, 3 files

              

 这种树状结构表示lesson7目录下文件和目录的关系。

lesson7里面有:dir1(目录)  file1  file2  file3

dir1目录里面有个dir2目录,dir2目录里面有个dir3目录,dir3目录里面有个dir4目录。

这就相当于windows环境下这种形式:

rmdir指令 && rm 指令

rmdir是一个与mkdir相对应的命令。 mkdir是建立目录,而rmdir是删除命令。
语法: rmdir [-p][dirName]
适用对象:具有当前目录操作权限的所有使用者
功能:删除空目录

功能选项

-p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。

rmdir只能删除空目录,举个栗子:

       

 由刚才的树状结构可以知道dir1为非空目录。

正确打开方式:

[cyq@VM-0-7-centos lesson7]$ mkdir dir
[cyq@VM-0-7-centos lesson7]$ ls
dir  dir1  file1  file2  file3
[cyq@VM-0-7-centos lesson7]$ rmdir dir
[cyq@VM-0-7-centos lesson7]$ ls
dir1  file1  file2  file3

              

 这是后我们删除刚创建的空目录dir就成功了。

rmdir:在实际中我们并不常用。

rm命令可以同时删除文件或目录

语法: rm [-f-i-r-v][dirName/dir]
适用对象:所有使用者
功能:删除文件或目录

常用选项

-f 即使文件属性为只读(即写保护),亦直接删除
-i 删除前逐一询问确认
-r 删除目录及其下所有文件

[cyq@VM-0-7-centos lesson7]$ mkdir -p dir1/dir2/dir3/dir4
[cyq@VM-0-7-centos lesson7]$ ls
dir1  file1  file2  file3
[cyq@VM-0-7-centos lesson7]$ tree dir1
dir1
`-- dir2
    `-- dir3
        `-- dir4

3 directories, 0 files
[cyq@VM-0-7-centos lesson7]$ rm dir1
rm: cannot remove ‘dir1’: Is a directory
[cyq@VM-0-7-centos lesson7]$ tree dir1
dir1
`-- dir2
    `-- dir3
        `-- dir4

3 directories, 0 files
[cyq@VM-0-7-centos lesson7]$ rm -r dir1
[cyq@VM-0-7-centos lesson7]$ ls
file1  file2  file3

我们发现,要删除一个递归类型的目录时,我们需要加-r选项进行递归删除。

其实我们在删除目录时,都要加上 -r选项才能确保删除目录。

rm也可以删除普通文件

[cyq@VM-0-7-centos lesson7]$ ls
file1  file2  file3
[cyq@VM-0-7-centos lesson7]$ mkdir -p dir1/dir2/dir3/dir4
[cyq@VM-0-7-centos lesson7]$ rm file1
[cyq@VM-0-7-centos lesson7]$ ls
dir1  file2  file3

man指令

     Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是man。

语法: man [选项] 命令

常用选项

(1)-k 根据关键字搜索联机帮助
(2)num 只在第num章节找
(3)-a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停               止,用a 选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。


解释一下,面手册分为8章
1 是普通的命令
2 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加     什么头文件)
3 是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件
5 是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6 是给游戏留的,由各个游戏自己定义
7 是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8 是系统管理用的命令,这些命令只能由root使用,如ifconfig

man指令完整版安装

可能我们在使用man指令时有些东西查不出来,这时候我们需要用过下面指令来配置一下。

yum install -y man -pages

我们也可以查看man指令的使用方法。

[cyq@VM-0-7-centos lesson7]$ man man

部分截图:

 按下q键退出当前模式。

cp指令

语法: cp [选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是             一 个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同              时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。

常用选项

-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
-r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录      或符号链接,则一律视为普通文件处理
-R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理

例1:

[cyq@VM-0-7-centos lesson7]$ ls
dir1  file3
[cyq@VM-0-7-centos lesson7]$ cat file3 //cat表示查看文件内容
hello 
[cyq@VM-0-7-centos lesson7]$ cp file3 file4
[cyq@VM-0-7-centos lesson7]$ ls
dir1  file3  file4
[cyq@VM-0-7-centos lesson7]$ cat file4
hello 

通过指令cp file3 file4后我们发现,file3里面的内容拷贝复制到了file4里面。

例2:

[cyq@VM-0-7-centos lesson7]$ mkdir dir2
[cyq@VM-0-7-centos lesson7]$ ls
dir1  dir2  file3  file4
[cyq@VM-0-7-centos lesson7]$ ls dir1
dir2
[cyq@VM-0-7-centos lesson7]$ cp dir1 dir2
cp: omitting directory ‘dir1’

              

     我们发现这时候把目录dir1拷贝复制到dir2时就失败了。dir1不是空目录,我们需要递归拷贝。这时候要用 -r 选项。

例2:

[cyq@VM-0-7-centos lesson7]$ cp -r dir1 dir2
[cyq@VM-0-7-centos lesson7]$ ls
dir1  dir2  file3  file4
[cyq@VM-0-7-centos lesson7]$ tree dir2
dir2
`-- dir1
    `-- dir2
        `-- dir3
            `-- dir4

4 directories, 0 files

-r : 递归处理(针对拷贝目录的处理),把目录dir1拷贝复制到dir2。

mv指令

        mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。

在windows下就相当于剪切、重命名。

语法: mv [选项] 源文件或目录 目标文件或目录。

例1:剪切

[cyq@VM-0-7-centos lesson7]$ ls
dir  file3  file4
[cyq@VM-0-7-centos lesson7]$ mkdir Newdir
[cyq@VM-0-7-centos lesson7]$ ls
dir  file3  file4  Newdir
[cyq@VM-0-7-centos lesson7]$ mv dir Newdir
[cyq@VM-0-7-centos lesson7]$ ls
file3  file4  Newdir
[cyq@VM-0-7-centos lesson7]$ tree Newdir
Newdir
`-- dir
    `-- dir2
        `-- dir3
            `-- dir4

4 directories, 0 file

       当前目录下我们发现有两个目录:dir  Newdir,这时候我们把dir剪切到Newdir目录中去。再一次ls,发现目录中没有了dir,这时候dir被剪切到了Newdir目录中了(通过tree命令可以直观的发现)。

对普通文件操作也是类似。

对文件剪切:

[cyq@VM-0-7-centos lesson7]$ ls
file  file1  Newdir
[cyq@VM-0-7-centos lesson7]$ cat file
hello world
[cyq@VM-0-7-centos lesson7]$ cat file1
[cyq@VM-0-7-centos lesson7]$ cat file
hello world
[cyq@VM-0-7-centos lesson7]$ mv file file1
[cyq@VM-0-7-centos lesson7]$ ls
file1  Newdir
[cyq@VM-0-7-centos lesson7]$ cat file1
hello world

把文件内容剪切到了目标文件中去了。

例2:重命名

[cyq@VM-0-7-centos ~]$ cd lesson7
[cyq@VM-0-7-centos lesson7]$ tree .
.
|-- dir1
|   `-- dir2
|       `-- dir3
|           `-- dir4
|-- file3
`-- file4

4 directories, 2 files
[cyq@VM-0-7-centos lesson7]$ mv dir1 dir
[cyq@VM-0-7-centos lesson7]$ ls
dir  file3  file4
[cyq@VM-0-7-centos lesson7]$ tree dir
dir
`-- dir2
    `-- dir3
        `-- dir4

3 directories, 0 files

        这时候我们发现lesson7目录下的dir1中的内容到了dir目录中(这时候dir目录没有,这时候就相当于dir1目录被重命名为dir了)。

对文件重命名:

[cyq@VM-0-7-centos lesson7]$ ls
file1  Newdir
[cyq@VM-0-7-centos lesson7]$ cat file1
hello world
[cyq@VM-0-7-centos lesson7]$ mv file1 file
[cyq@VM-0-7-centos lesson7]$ ls
file  Newdir
[cyq@VM-0-7-centos lesson7]$ cat file
hello world

         原来文件目录下没有文件file的,这时候mv file1 file就相当于重命名了。file1名字变成了file,并且原文件内容并没有发上改变。

cat指令

语法: cat [选项][文件]  只能查看文件
功能: 查看目标文件的内容

常用选项

-b 对非空输出行编号
-n 对输出的所有行编号
-s 不输出多行空行

[cyq@VM-0-7-centos lesson7]$ ls
file  Newdir
[cyq@VM-0-7-centos lesson7]$ nano file
[cyq@VM-0-7-centos lesson7]$ cat file
#include<stdio.h>
int main()
{
  printf("hello linux!\n");
  return 0;
}
[cyq@VM-0-7-centos lesson7]$ cat -n file
     1	#include<stdio.h>
     2	int main()
     3	{
     4	  printf("hello linux!\n");
     5	  return 0;
     6	}

[cyq@VM-0-7-centos lesson7]$ nano file  //nano文本编译器,先给文件file里面写一些内容
cat file:我们发现文件里面的内容就被展示出来了。

cat -n file:对文件里面的内容展示并且标注行号。

more指令

语法: more [选项][文件]
功能: more命令,功能类似 cat

常用选项

-n:对输出的所有行编号

q:q退出more

演示more指令前我们先写一个脚本帮助我们来展示~

count=0; while [ $count -le 1000 ]; do echo "hello ${count}"; let count++; done > file.txt

举个栗子:

[cyq@VM-0-7-centos lesson7]$ ls
file  file.txt  Newdir
[cyq@VM-0-7-centos lesson7]$ more file.txt

运行后:

                    

 我们也可以使用-n选项:

[cyq@VM-0-7-centos lesson7]$ more -12 file.txt
hello 0
hello 1
hello 2
hello 3
hello 4
hello 5
hello 6
hello 7
hello 8
hello 9
hello 10
hello 11

 运行后:

                

 当按下q键,就退出了当前模式。

more模式下,想要翻文本只支持回车键往下翻。

less指令

语法: less [参数] 文件
功能:less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后             移动,而且less在查看之前不会加载整个文件

less支持上下键上翻和下翻。

常用选项

-i 忽略搜索时的大小写
-N 显示每行的行号
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能

n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
q:quit

[cyq@VM-0-7-centos lesson7]$ less -N file.txt

                                  

总结:less拥有more的全部功能,并且less支持下翻,也可以用/(向下搜索)  ?(向上搜索)  来查找对应的字符串。我们更多选用less。

head指令

语法: head [参数]... [文件]...
功能:head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10 行。

选项

-n:<行数> 显示的行数

举个栗子:

[cyq@VM-0-7-centos lesson7]$ head file.txt
hello 0
hello 1
hello 2
hello 3
hello 4
hello 5
hello 6
hello 7
hello 8
hello 9

默认显示开头前10行

-n选项

[cyq@VM-0-7-centos lesson7]$ head -5 file.txt
hello 0
hello 1
hello 2
hello 3
hello 4

[cyq@VM-0-7-centos lesson7]$ head -5 file.txt  //指定显示开头前5行

tail指令

语法: tail[必要参数][选择参数][文件]
功能: 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志              文件。

选项

-f 循环读取
-n<行数> 指定显示文本尾部行数

举个栗子:

[cyq@VM-0-7-centos lesson7]$ tail file.txt
hello 991
hello 992
hello 993
hello 994
hello 995
hello 996
hello 997
hello 998
hello 999
hello 1000

默认显示文本后10行。

-n选项

[cyq@VM-0-7-centos lesson7]$ tail -6 file.txt
hello 995
hello 996
hello 997
hello 998
hello 999
hello 1000

date指令

date 指定格式显示时间: date +%Y:%m:%d

选项

%H : 小时(00..23)
%M : 分钟(00..59)
%S : 秒(00..61)
%X : 相当于 %H:%M:%S
%d : 日 (01..31)
%m : 月份 (01..12)
%Y : 完整年份 (0000..9999)
%F : 相当于 %Y-%m-%d

举个栗子:

[cyq@VM-0-7-centos lesson7]$ date +%Y/%m/%d_%H:%M:%S
2022/01/28_20:56:01

我们可以看出每个选项的含义代表如上。

[cyq@VM-0-7-centos lesson7]$ date +%F
2022-01-28
[cyq@VM-0-7-centos lesson7]$ date +%X
08:57:00 PM

%F:直接控制当前年月日的输出

%X:直接控制当前时间的输出

时间方面的设置

在这里简单了解一下即可:

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″ //这样可以设置全部时间

时间戳

时间转换成时间戳: date +%s
时间戳转换成时间: date -d@时间戳

时间戳:格林威治时间1970年1月1日0时0分0秒(北京时间: 1970年1月 1日08:00:00 )                        时刻到至今累积的秒数。

举个栗子:

[cyq@VM-0-7-centos lesson7]$ date +%s
1643374923
[cyq@VM-0-7-centos lesson7]$ date -d@1643374923
Fri Jan 28 21:02:03 CST 2022

[cyq@VM-0-7-centos lesson7]$ date +%s  //把当前时间转换成时间戳
1643374923
[cyq@VM-0-7-centos lesson7]$ date -d@1643374923 //把时间戳转换成现在时间
Fri Jan 28 21:02:03 CST 2022

cal指令

命令格式: cal [参数][月份][年份]

常用选项

-3 显示系统前一个月,当前月,下一个月的月历
-j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的数)
-y 显示当前年份的日历

栗子:

例1:

[cyq@VM-0-7-centos ~]$ cal

                                   

显示当前年的当前月日历,并显示当前日的日期。

例2:

[cyq@VM-0-7-centos ~]$ cal -3

cal -3 显示当前年月的前一个月,当前月,下一个月的月历

例3:

[cyq@VM-0-7-centos ~]$ cal -j

                       

 显示当前年当前月的日历,并把当前日期标注到上面。和cal指令一样。

例4:

[cyq@VM-0-7-centos ~]$ cal 2022

[cyq@VM-0-7-centos ~]$ cal 2022:显示指定年份的所有月份。 (和cal -y 2022用法一样)

find指令

语法: find pathname -options
功能: 用于在文件树种查找文件,并作出相应的处理(可能访问磁盘)

选项

-name 按照文件名查找文件

举个栗子:

[cyq@VM-0-7-centos lesson7]$ ls
file  file.txt  Newdir
[cyq@VM-0-7-centos lesson7]$ find Newdir
Newdir
Newdir/dir
Newdir/dir/dir2
Newdir/dir/dir2/dir3
Newdir/dir/dir2/dir3/dir4

再举个栗子:

[cyq@VM-0-7-centos ~]$ find . test

   查找结果: 

                                     

[cyq@VM-0-7-centos ~]$ find . test :在当前路径下查找test文件

    grep指令

语法: grep [选项] 搜寻字符串 文件名
功能: 在文件中搜索字符串,将找到的行打印出来

常用选项

-i  :忽略大小写的不同,所以大小写视为相同

-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行

比如我们还以之前脚本写的文本为例,搜索带'99'的行。

举个栗子:

例1:

[cyq@VM-0-7-centos lesson7]$ grep '99' file.txt

            

 这时候我们就在file.txt的文件里查找的要搜索的字符串了。

例2 -v选项:

[cyq@VM-0-7-centos lesson7]$ grep -v '99' file.txt

部分截图:

               

[cyq@VM-0-7-centos lesson7]$ grep -v '99' file.txt  //我们发现所有带'99'的字符串都不显示,显示‘99’之外的字符串。   

例3 -n:

[cyq@VM-0-7-centos lesson7]$ grep -n '99' file.txt

         

这时候文本的每一行的行号显示出来了。

例4 -i:

[cyq@VM-0-7-centos lesson7]$ grep -i 'world' file.txt

      

 -i: 忽略字母大小写进行查找,意思是在搜索"world"时,在文本内搜索不管大小写,只要字         母对应就可以被搜索出来。

管道指令

| :把管道'|'左边的数据放进管道中,供右边的命令进行使用

举个例子:

[cyq@VM-0-7-centos lesson7]$ cat file.txt | grep '999'

        

 [cyq@VM-0-7-centos lesson7]$ cat file.txt | grep '999':cat file.txt展现的内容放进管道'|'中,然后 grep '999'从管道中取出数据进行查找搜索。

管道命令一个重要应用场景

比如从1000行的文本里查找第501行到510行的内容,我们可以这样操作:

[cyq@VM-0-7-centos lesson7]$ head -510 file.txt > tmp.txt
[cyq@VM-0-7-centos lesson7]$ ls
dir1  file  file.txt  Newdir  tmp.txt
[cyq@VM-0-7-centos lesson7]$ tail -10 tmp.txt
hello 500
hello 501
hello 502
hello 503
hello 504
hello 505
hello 506
hello 507
hello 508
hello 509

上面的方法是比较累赘的,我们可以借助管道命令来进行操作:

举个栗子:

[cyq@VM-0-7-centos lesson7]$ head -510 file.txt | tail -10

结果如下:

[cyq@VM-0-7-centos lesson7]$ head -510 file.txt | tail -10:管道前的命令是把file.txt前510行的内容放进管道里面,然后管道后的命令是提取管道中的数据,执行该命令。

也可以连续使用:

[cyq@VM-0-7-centos lesson7]$ head -510 file.txt | tail -10 | head -5

这个命令的思路和上面一样~ 

重定向命令 > 

[cyq@VM-0-7-centos lesson7]$ echo "hello world" > file
[cyq@VM-0-7-centos lesson7]$ ls
dir1  file  file.txt  Newdir
[cyq@VM-0-7-centos lesson7]$ cat file
hello world

      

 >:意思是把hello world的字符串内容写进file文件中,写之前file文件里面的内容会被清空。

验证一下:

        

 追加重定向命令 >>

>>:把要写的内容写进目标文件中,并且不会修改原来文件里面的内容,会在原来文件内容的基础上换行并写入。

举个栗子:

[cyq@VM-0-7-centos lesson7]$ ls
dir1  file  file.txt  Newdir
[cyq@VM-0-7-centos lesson7]$ cat file
wmm
[cyq@VM-0-7-centos lesson7]$ echo "wmm" >> file
[cyq@VM-0-7-centos lesson7]$ echo "wmm" >> file
[cyq@VM-0-7-centos lesson7]$ echo "wmm" >> file
[cyq@VM-0-7-centos lesson7]$ ls
dir1  file  file.txt  Newdir
[cyq@VM-0-7-centos lesson7]$ cat file
wmm
wmm
wmm
wmm

我们发现连续往file文件里写内容时不会覆盖原来文件里面的内容,它会不断先换行再写入。

zip/unzip指令(压缩/解压)

语法: zip 压缩文件.zip 目录或文件
功能: 将目录或文件压缩成zip格式

选项

-r:递归处理,针对压缩目录(必须加上 -r选项)使用的,压缩文件时不用使用。

-d:解压时使用,将压缩的文件压缩到指定目录中

举个栗子:

对文件压缩解压:

[cyq@VM-0-7-centos lesson7]$ ls
dir1  file  file.txt  Newdir
[cyq@VM-0-7-centos lesson7]$ zip file.zip file
  adding: file (deflated 50%)
[cyq@VM-0-7-centos lesson7]$ ls
dir1  file  file.txt  file.zip  Newdir

                

file是文件,压缩时不用带-r选项。

 解压时:

[cyq@VM-0-7-centos lesson7]$ unzip file.zip -d file
Archive:  file.zip
checkdir:  cannot create extraction directory: file
           File exists
[cyq@VM-0-7-centos lesson7]$ unzip file.zip -d dir1
Archive:  file.zip
  inflating: dir1/file               
[cyq@VM-0-7-centos lesson7]$ ls
dir1  file  file.txt  file.zip  Newdir
[cyq@VM-0-7-centos lesson7]$ cd dir1
[cyq@VM-0-7-centos dir1]$ ls
dir2  file
[cyq@VM-0-7-centos dir1]$ cat file
wmm
wmm
wmm
wmm

          

 我们可以看到,解压文件-d只能解压到目录中,不能解压到文件中。

如果不加 -d选项,就默认解压到当前目录下。

特例:

如果我们压缩到的目录下有文件名冲突的文件,在压缩时会进行询问,然后覆盖掉。

            

对目录进行压缩

[cyq@VM-0-7-centos lesson7]$ ls
dir1  file  file.txt  Newdir
[cyq@VM-0-7-centos lesson7]$ zip -r dir1.zip dir1
  adding: dir1/ (stored 0%)
  adding: dir1/dir2/ (stored 0%)
  adding: dir1/dir2/dir3/ (stored 0%)
  adding: dir1/dir2/dir3/dir4/ (stored 0%)
  adding: dir1/file (deflated 50%)
[cyq@VM-0-7-centos lesson7]$ ls
dir1  dir1.zip  file  file.txt  Newdir

[cyq@VM-0-7-centos lesson7]$ zip -r dir1.zip dir1:我们如果在压缩目录时不加-r选项时,目录下的子目录和子文件就不会被压缩。

解压目录时

[cyq@VM-0-7-centos lesson7]$ ls
dir1  file  file.txt  Newdir
[cyq@VM-0-7-centos lesson7]$ zip -r dir1.zip dir1
  adding: dir1/ (stored 0%)
  adding: dir1/dir2/ (stored 0%)
  adding: dir1/dir2/dir3/ (stored 0%)
  adding: dir1/dir2/dir3/dir4/ (stored 0%)
  adding: dir1/file (deflated 50%)
[cyq@VM-0-7-centos lesson7]$ ls
dir1  dir1.zip  file  file.txt  Newdir
[cyq@VM-0-7-centos lesson7]$ rm -rf dir1
[cyq@VM-0-7-centos lesson7]$ unzip dir1.zip
Archive:  dir1.zip
   creating: dir1/
   creating: dir1/dir2/
   creating: dir1/dir2/dir3/
   creating: dir1/dir2/dir3/dir4/
  inflating: dir1/file               
[cyq@VM-0-7-centos lesson7]$ ls
dir1  dir1.zip  file  file.txt  Newdir
[cyq@VM-0-7-centos lesson7]$ tree dir1
dir1
|-- dir2
|   `-- dir3
|       `-- dir4
`-- file

3 directories, 1 file

       

 这时候我们就发现目录下的所有文件就被解压出来了。

再次提醒,压缩目录时,一定要加上-r选项。

tar指令(打包/解包)

 选项

-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录

举个栗子先~

[cyq@VM-0-7-centos lesson7]$ ls
dir1  file  file.txt  Newdir
[cyq@VM-0-7-centos lesson7]$ tar czvf file.tgz file
file
[cyq@VM-0-7-centos lesson7]$ ls
dir1  file  file.tgz  file.txt  Newdir

        

[cyq@VM-0-7-centos lesson7]$ tar czvf file.tgz file:c表示创建一个新文件、z表示zip格式进行压缩、v表示压缩过程中显示压缩的文件名、f表示要压缩到哪个文件。

解压:

[cyq@VM-0-7-centos lesson7]$ ls
dir1  file  file.tgz  file.txt  Newdir
[cyq@VM-0-7-centos lesson7]$ rm -f file
[cyq@VM-0-7-centos lesson7]$ ls
dir1  file.tgz  file.txt  Newdir
[cyq@VM-0-7-centos lesson7]$ tar xzvf file.tgz
file
[cyq@VM-0-7-centos lesson7]$ ls
dir1  file  file.tgz  file.txt  Newdir
[cyq@VM-0-7-centos lesson7]$ cat file
wmm
wmm
wmm
wmm

                 

 [cyq@VM-0-7-centos lesson7]$ tar xzvf file.tgz:解压包。x表示解压文件、z表示文件具有zip属性、v表示解包时显示文件名、f表示要解压的包,后面要直接根文件名

此外,-C选项还可以在解包时解包到指定到目录中。

bc指令

bc指令是一块计算器,这个呢比较简单,我就演示一下,不解释了。

 也可以这样进行计算:

[cyq@VM-0-7-centos ~]$ echo "1+2+3+4" | bc

                

 uname指令

语法: uname [选项]
功能: uname用来获取电脑和操作系统的相关信息。
补充说明: uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息

选项

-a:详细显示当前主机所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件         名,处理器类型,硬件平台类型,操作系统名称

-r

举个栗子:

解释一下:VM-0-7-centos(主机名)     3(主版本号).10(次版本号;偶数表示稳定版,奇数表示测试版) .0-1160.11.1.el7(centos 7).x86_64 (计算机体系结构,cpu平台)

几个重要的热键

TAB键

[Tab]按键---具有『命令补全』和『档案补齐』的功能

比如我们输入这样的命令:

                      ​​​​​​​ 

 我们可以看见当前目录下有Newdir这样的目录,我们这时候输入New时,按下TAB键就可以自动补齐了。

如下:

                            

 ctrl+c键

让当前程序终止掉,通常终止异常程序;也可以用来放弃当前命令行的输入。

ctrl+d键

[Ctrl]-d按键---通常代表着:『键盘输入结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来取代exit。

可以用来退出当前用户,退出XShell

ctrl+r键

可以调用以前输入的命令,Linux输入的命令行具有记忆功能。

 当我按下ctrl+r后,输入co时,系统就查到了我以前写的脚本命令。

history

[cyq@VM-0-7-centos lesson7]$ history

按下回车后就会自动展现出曾经输入过的命令。

部分截图:

关机指令 

语法: shutdown [选项] 

选项

-h:将系统服务器关掉后立即关机

-r:将系统服务器停掉之后重新启动

-t sec:-t后面加秒数,表示多少秒后关机

注意:如果使用的是云服务器的话,不要关机

补充

◆ 安装和登录命令: login、 shutdown、 halt、 reboot、 install、 mount、 umount、 chsh、 exit、 last;
◆ 文件处理命令: file、 mkdir、 grep、 dd、 find、 mv、 ls、 diff、 cat、 ln;
◆ 系统管理相关命令: df、 top、 free、 quota、 at、 lp、 adduser、 groupadd、 kill、 crontab;
◆ 网络操作命令: ifconfig、 ip、 ping、 netstat、 telnet、 ftp、 route、 rlogin、 rcp、 finger、 mail、 nslookup;
◆ 系统安全相关命令: passwd、 su、 umask、 chgrp、 chmod、 chown、 chattr、 sudo ps、 who;
◆ 其它命令: tar、 unzip、 gunzip、 unarj、 mtools、 man、 unendcode、 uudecode。

有兴趣的话可以自己去试一下~

Linux权限

Linux下有两种用户:超级用户(root)、普通用户
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

从超级用户切回普通用户 su - (用户名)

[root@VM-0-7-centos ~]# su - cyq

从普通用户切回超级用户 su -

[cyq@VM-0-7-centos ~]$ su -

       如果我们刚从普通用户切换到超级用户,之后又想切换回来,我们最好不要用su - cyq(用户名)指令,使用exit指令,或者使用热键ctrl+d

        为什么呢?因为每次通过su - cyq(用户名)进出普通用户时,每次都会新创建一个bash进程,占用系统资源。我们不妨来看一下如何查看bash进程

ps axj | grep bash

如下:

 文件访问者的分类

文件和文件目录的所有者(拥有者): u---User
文件和文件目录的所有者所在的组的用户: g---Group
其它用户: o---Others 

文件类型和访问权限

 rwx的意思:

                                        

rwx的顺序不能改变,一共是三组,分别表示:拥有者、所属组、其他人,r表示有写权限、w表示有读权限、x表示有可执行的权限

 如果是 - 的话表示没有该权限。

文件类型

 d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件

文件权限的设置

chmod

功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名

常用选项

R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限

+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户

举个栗子:

      

 支持多组修改权限:

       

 可以用a进行操作:

        

 [cyq@VM-0-7-centos lesson7]$ chmod a-x file.txt:a表示针对所有用户,a-x表示所有用户去掉可执行权限x。

chmod第二种修改命令方式

其实rwx位置可以用二进制表示,1表示有该权限,0表示没有该权限。

例如:

rw-:110 ->6

r--: 100->4

这时候我们发现用三个八进制位能更好的表示权限设置。

举个栗子:

            

 [cyq@VM-0-7-centos lesson7]$ chmod 777 file.txt:777表示每个用户的rwx权限都加上了。

chown


功能:修改文件的拥有者
格式: chown [参数] 用户名 文件名

举个栗子:

我们发现直接使用修改拥有者用户时是不对的:

        好比我们把自己的东西给别人需要征得别人同意才行,所以在这里是权限不够的问题,所以我们需要在命令前面加上sudo暂时提升一下权限。 

正确写法:

[cyq@VM-0-7-centos lesson7]$ sudo chown root file

            

 chgrp


功能:修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名

选项

常用选项: -R 递归修改文件或目录的所属组

举个栗子:

[cyq@VM-0-7-centos lesson7]$ sudo chgrp root file

            

 [cyq@VM-0-7-centos lesson7]$ sudo chgrp root file:和上面一样,更改所属组用户也需要用sudo 命令暂时提升一下权限。

chgrp特例

如果更改所属组的关系时,拥有者是当前用户,此时更改所属组为当前用户时也不用sudo提升权限。

举个栗子:

[cyq@VM-0-7-centos lesson7]$ chgrp cyq dir1

             

 chown特例(更改当前用户和所属组)

举个栗子:

[cyq@VM-0-7-centos lesson7]$ sudo chown root:root dir1

            

chown也遵循chgrp那个特例:

[cyq@VM-0-7-centos lesson7]$ chown cyq:cyq dir1

              

 chown在这种场景下可以当做chgrp使用,这就好比有chgrp那个特例的特点。

 umask

查看或修改文件掩码
新建文件夹默认权限=0666
新建目录默认权限=0777

但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到
umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask

说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002
我们在这里用普通文件来展示一下子关掩码的用处:

 也就是说子关掩码先取反,然后再和默认权限按位与。

 得到的结果就是当前用户创建的文件权限。 

       示例如下:

                 

我们创建的普通文件权限和我们计算的一致。同样的目录也是这种计算方法。

        另外,我们可以自己修改umask值,但是仅仅限制于当前登录,当退出时,umask值有恢复成默认的了。

举个栗子:

                   ​​​​​​​

这时候我们再创建一个文件: 

           

 由于子关掩码被我们修改了,这时候创建的文件权限也就不一样了。

注意:

      对于权限是用来约束普通人的,对于root超级用户是无效的,root用户可以随意修改文件或者目录的权限。

file指令

功能说明:辨识文件类型。
语法: file [选项] 文件或目录...

常用选项

-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-z 尝试去解读压缩文件的内容。

目录的权限

可执行权限: 如果目录没有可执行权限, 则无法cd到目录中
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.

重点来了:进入目录需要可执行权限!如果没有可执行权限,查看目录文件也会出错,仅仅会显示一下目录下文件名和信息。

         

 另外我们从上面看到:

可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件。

        会不会有这样的需求,我想让别人看我的目录下文件,允许别人在我的目录下创建他自己写的文件,但是又不想让别人删除我自己的文件。这时候就会有矛盾,如果让别人有权限在我的目录下写文件,不得不得给别人一个写权限,但是可能存在别人删除自己文件的风险,这时候就矛盾了。

这时候我们引入下一个概念:

粘滞位

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除

我们举个栗子:

[cyq@VM-0-7-centos lesson7]$ chmod o+t Newdir/

     

 这时候我们来设置一下:

    

       在粘滞位dir目录下的dir目录拥有者和所属组都是root,此时当前用户cyq相当于o(其他人),这时候cyq用户可以创建自己的文件,但是不可以删除root用户的文件。

情况如下:

        

 这时候就不能删除root用户的文件了,cyq相当于root用户是其他人的身份。

就算是root用户的文件也不可以被修改:

 以及被设置粘滞位的子目录下的子目录也不可以删除:

   

Newdir已经被设置成了粘滞位了。Bew

   

 Newdir目录下的dir2目录也不可以被删除或修改(包括修改文件或者目录名字)。

关于权限的总结

情况一:目录的可执行权限是表示你可否在目录下执行命令。
情况二:如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录                仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下                的文件)
情况三:而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。                  但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读                  出目录下的文档。

针对第三种情况我们来演示一下:

        

        Newdir目录拥有者有写和可执行权限,但是没有读权限。cd命令后我们进入到了目录里面,但是ls确不能展示目录下的文件和目录,因为没有可读权限。

普通用户创建和删除

在超级用户下创建普通户。我们以创建名字叫做zhangsan的普通用户为例

创建用户名

[root@VM-0-7-centos ~]# useradd zhangsan

设置密码

[root@VM-0-7-centos ~]# passwd zhangsan

过程如下:

这时候我们看到出文件的用户名就创建成功了:

                  

删除用户

在超级用户下删除普通用户

[root@VM-0-7-centos ~]# userdel -rf zhangsan

删除结果:

                       

这篇关于Linux入门(常见指令及权限)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!