Linux(三)——实用指令与文件权限

文章目录

  • 指定运行级别
  • 文件目录类
    • 显示
    • 切换
    • 创建
    • 删除
    • 拷贝
    • 移动与重命名
    • 文件查看
    • > 与 >> 指令
    • echo指令
    • head 和 tail 指令
    • ln 指令
    • history 指令
  • 搜索查找类
    • find 指令
    • locate指令
    • grep 指令和管道符 |
  • 压缩解压缩类
    • gzip / gunzip
    • zip / unzip
    • tar 指令
  • 组管理和文件权限管理
    • Linux文件属主和属组
    • 查看文件所有者
    • 修改文件所有者 chown
    • 修改文件所属组 chgrp
    • 文件权限的基本介绍
    • rwx权限
    • 文件权限的修改 chmod
      • 通过 + - = 来修改权限
      • 通过数字变更权限
      • 练习题
  • 练习题

指定运行级别

运行级别就是操作系统当前正在运行的功能级别,级别是从0到6。Centos7系统之前的版本是通过/etc/inittab文件来定义系统,而CentOS7用的是/lib/systemd/system/runlevel*。

  • 运行级别
0:关机
1:单用户【找回丢失密码】
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启

常用的运行级别是3和5,默认是5,通过修改文件可以更改默认运行级别。

在终端也可以使用命令来修改当前的运行级别:init [0123456],数字代表不同的运行级别。

  • Q:如何找回root密码?
    思路:在开机是通过操作进入到单用户运行级别,单用户即root用户,此时不需要输入密码就可以登录。登陆后再使用password命令重新修改密码即可。
  • Q:root密码找回是否影响系统安全性?
    不影响。二者没有冲突,找回root密码是在接触到实体机的前提下才能完成的,远程登录没有用。

文件目录类

显示

  • pwd 显示当前工作目录的绝对路径。

  • ls [选项] [目录|文件] 显示目录或文件的信息,默认是当前目录。

常用选项:

-a :显示当前目录所有的文件和目录,包括隐藏的。
-l :以列表的方式显示信息,可以显示文件权限信息和创建时间等

切换

  • cd [参数] 切换工作目录

这里的参数通常是传入目的目录的绝对路径或者相对路径,也有一些简便写法,比如:cd ~表示切换到当前用户的家目录,cd ..表示切换到上一级目录。

创建

  • mkdir [选项] 目录 创建目录

常用选项:

-p 递归创建多级目录。

这里要创建的目录同样可以使用绝对路径或者相对路径,使用./代表当前目录,../代表上一级目录。

  • touch 文件名 创建空文件

使用文本编辑器也可以直接创建新文件。

删除

  • rm 文件 删除文件
  • rm -f 文件 强制删除不提示,-f表示force
  • rm 目录 删除目录
  • rm -r 目录 递归删除目录
  • rm -rf 目录 递归删除目录,不提示

拷贝

  • cp [选项] source dest 拷贝源文件到其他目录
  • cp -r source dest 递归复制整个文件夹
  • \cp -r source dest 强制覆盖,不提示

移动与重命名

  • mv oldDir newDir 移动文件或者目录
  • mv oldFileName newFileName 同一目录下移动相当于重命名

文件查看

  • cat [选项] 文件 以只读的方式打开文件
  • cat -b 文件 查看文件并显示行号

cat只能查看文件而不能修改文件,一般可以加上管道命令 | more ,比如car -b a.txt | more。| 是管道符,管道符左边命令的输出就会作为管道符右边命令的输入。

  • more 文件 分页浏览文件
    Linux(三)——实用指令与文件权限_第1张图片
  • less 文件 分屏显示,分页浏览文件(less比more更强大)
    less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是
    根据显示需要加载内容, 对于显示大型文件具有较高的效率
    Linux(三)——实用指令与文件权限_第2张图片使用v指令可以进入vim进行编辑,:wq退出后返回到less模式,再按q退出。

> 与 >> 指令

> 表示输出重定向,会将原来的内容覆盖,>> 表示在文末追加内容。

  • 示例:把当前目录下的详细信息输出到文件中。
    ls -l > a.txt 显示出的列表信息输入到a.txt中,会覆盖掉原内容,a.txt不存在就创建。
    ls -al >> a.txt 显示出的信息追加到a.txt中。
  • 示例:将文件1中的内容输出到文件2中。
    cat a.txt > /files/b.txt
  • 示例:将当前的日历信息写入文件。
    cal > /files/myCal

echo指令

echo表示输出内容到控制台。语法:echo [选项] [要输出的内容]

  • 使用echo指令输出当前的环境变量:echo $PATH

head 和 tail 指令

默认情况下 head 和 tail 分别用来显示文件的前10行和后10行内容:head filetail file

行数也可以实用 -n 指定:head -n 3 file 查看文件前3行,tail -n 3 file 查看文件后3行

tail的另外一个功能可以用来监视一个文件,追踪它的更新,在工作中很实用。

tail -f file 实时追踪该文档的更新:
Linux(三)——实用指令与文件权限_第3张图片

ln 指令

软链接又叫符号链接,类似于windows中的快捷方式(实际更强大,几乎可以链接所有文件),主要存放了链接其他文件的路径。软链接会在选定的位置生成一个文件的镜像,但是并不占用磁盘空间。

  • 基本语法:ln -s [路径] [软链接名] 。多用于频繁访问的复杂路径。
    示例:ln -s /home linkToHome
  • 链接的删除rm -rf linkToHome

history 指令

和它的名字一样,这个命令用来查看已经执行过的命令。

  • 查看所有的历史命令history
  • 查看最近10历史命令history 10
[dave@localhost dave]$ history 10
  118  ls
  119  help ln
  120  info ln
  121  ln -s /home linkToHome
  122  cd linkToHome/
  123  pwd
  124  cd dave
  125  ll
  126  history 5
  127  history 10
  • 执行编号为123的命令!123
  • 清空当前环境中的所有历史命令history -c

搜索查找类

find 指令

find [搜索范围] [选项]

find 指令将从我们指定的目录向下递归地遍历所有子目录,将满足条件的文件或目录显示在终端。

常用的选项有:

选项 功能
-name<文件名> 按照文件名查找模式来查找文件
-user<用户名> 查找该用户的所有文件
-size<文件大小> 按照指定的文件大小查找文件

示例:根据名称查找/home目录下的hello.txt文件
find /home -name hello.txt
示例:查找/opt目录下bob用户的所有文件
find /opt -user bob
示例:查找整个linux系统下>20M的文件(提示:+n 大于n; -n 小于n; n 等于n)
find / -size +20M find / -size +20480k 注意k不能大写。
示例:查找整个linux系统下大于10k的所有txt文件(find支持统配符查找)
find / -size +10k -name *.txt

locate指令

locate指令可以快速定位文件路径。locate指令利用实现建立的系统中所有文件名称及路径的locate数据库实现快速定位文件。locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须顶起更新locate时刻。

语法:locate file

注意:由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库(需要root权限)。

  • 示例:使用locate命令查询 a.txt 文件所在的目录locate a.txt

grep 指令和管道符 |

grep 即过滤查找,管道符 | 表示将前一个命令的处理结果传递到后面的命令处理。

  • grep [选项] 查找内容 源文件

常用选项有:-n 显示匹配行及行号,-i忽略字母大小写。

示例:查找a.txt中“hello”所在行,并且显示行号。

[Dave@localhost ~]$ grep -n hello a.txt
16:hello
22:hello

配合管道符使用:

[Dave@localhost ~]$ cat a.txt | grep -n hello
16:hello
22:hello

压缩解压缩类

gzip / gunzip

gzip file用于压缩文件,gunzip xxx.xx.gz用于解压文件。它们的特殊之处在于不会保留原文件

示例:将a.txt使用gzip和gunzip先压缩后解压,观察目录中文件的变化。
在这里插入图片描述

zip / unzip

这一对经常在项目打包发布时使用。
zip [选项] xxx.zip file 压缩文件或目录,需要指定压缩后的文件名和类型xxx.zip
常用的选项有-r 递归压缩,即压缩整个目录
unzip [选项] xxx.zip 解压zip文件
常用的选项有-d

指定解压后的存放目录

zip和unzip在操作之后都不会将原文件删除。

示例:创建dir0/dir1/dir2并用zip打包,之后再使用unzip解压放到桌面。

 mkdir -p dir0/dir1/dir2
 zip -r DIR.zip dir0/
 unzip -d Desktop/ DIR.zip

tar 指令

tar 指令是打包命令,打包并压缩后的文件格式是 .tar.gz (.tar代表包,.gz代表压缩文件)。

首先要明白打包和压缩不是一个概念,打包是指将多个文件和目录合并在一起,而压缩是指通过算法将文件体积的变得更小。

语法:tar [选项] xxx.tar.gz 打包的内容

常用选项 解释
-c 建立压缩档案
-v 显示详细信息
-f 指定归档文件名称
-z 支持gzip解压文件
-x 解包.tar文件

这几个命令通常组合起来使用(f必须放在最后,直接跟档案名),比如,打包压缩文件时-zcvf ;解压时-zxvf,可以通过-C指定解档到某个目录(前提是这个目录必须存在)。

示例:压缩多个文件a.txt和b.txt到 c.tar.gz
tar -zcvf c.tar.gz a.txt b.txt
示例:压缩整个/home目录到 myhome.tar.gz
tar -zcvf myhome.tar.gz /home/
示例:将myhome.tar.gz解压到/opt/目录下
tar -zxvf myhome.tar.gz -C /opt/

注意,-c 和 -x 不可能一起使用,一个是打包,一个是解包。

组管理和文件权限管理

Linux文件属主和属组

对于每一个linux文件来说,都有一个特定的所有者(一般是创建者),所有者拥有文件的所有权。

在linux系统中,用户是按组分类的,一个用户属于一个或多个组。所以,对于文件来说,除了所有者以外的用户可以分为文件所有者的同组用户和其他用户。

为了文件的安全性,linux针对文件所有者 user、文件所有者同组用户 group其他用户 others来规定了不同的文件访问权限。

默认创建一个新用户时,会自动创建一个与用户同名的组,而该用户创建的文件的所有者就是自己,而所属组即这个同名组(是可以更改的)。

对于root用户来说,这些权限没有任何作用。

查看文件所有者

  • ls -l 查看文件详细信息,包括所有者和所在组,创建时间,权限等。

  • ls -ahl a 显示隐藏的文件 l 显示详细列表模式 h 大小显示便于查看

示例:创建一个用户tom属于group0组,tom创建一个文件,使用ls -ahl查看

[root@localhost ~]# useradd -G group0,group1  tom   #创建tom用户,并把他归属到group0和group1组  
[root@localhost ~]# groups tom 						#查看tom的属组信息
tom : tom group0 group1
[root@localhost ~]# su - tom						#切换到tom
[tom@localhost ~]$ touch a.txt						#新建文件
[tom@localhost ~]$ ls -ahl							#查看文件详细信息
total 12K
drwx------. 5 tom  tom  120 Sep  2 11:04 .
drwxr-xr-x. 5 root root  41 Sep  2 11:01 ..
-rw-rw-r--. 1 tom  tom    0 Sep  2 11:04 a.txt		#tom tom 就表示这个文件的所有者和所属组
-rw-r--r--. 1 tom  tom   18 Oct 31  2018 .bash_logout
-rw-r--r--. 1 tom  tom  193 Oct 31  2018 .bash_profile
-rw-r--r--. 1 tom  tom  231 Oct 31  2018 .bashrc
drwxrwxr-x. 3 tom  tom   18 Sep  2 11:04 .cache
drwxrwxr-x. 3 tom  tom   18 Sep  2 11:04 .config
drwxr-xr-x. 4 tom  tom   39 Jun  3 17:04 .mozilla

修改文件所有者 chown

  • chown 用户名 文件名 记忆:change owner

示例:root用户新建一个文件,并将所有者改为tom

touch tom.txt		#创建文件
chown tom tom.txt	#更改所有者为tom
  • chown newowner:newgroup file改变用户的所有者和所有组

示例:将a文件的所有者改为tom,所属组改为police,只能使用一个命令

chown tom:police a
  • -R 如果是目录 则使其下所有子文件或目录递归生效

示例:请将 /home/kkk 目录下所有的文件和目录的所有者都修改成tom

chown -R tom /home/kkk `

修改文件所属组 chgrp

  • chgrp 组名 文件名 记忆:change group

示例:root用户创建一个文件,并将文件所在组改为Group001

chgrp Group001 tom.txt

文件权限的基本介绍

以上面新建的a.txt文件为例:

-rw-rw-r--. 1 tom  tom    0 Sep  2 11:04 a.txt

左起第一部分就代表a.txt的文件权限,即-rw-rw-r-- ,一共10个字符,除过第一个字符,其余三个一组,分别代表user权限,group权限,others权限。

所有的文件权限都由0-9这10个字符表示:

0 表示文件类型:-文件,d目录,l 链接文档,bc与设备有关。
1.2.3. 表示所有者对该文件的权限——user
4.5.6. 表示所属组对该文件的权限——group
7.8.9. 表示其他用户对该文件的权限——others

rwx权限

如果首个符号是-,表示这是一个文件。那么针对文件就会有[ rwx ]权限,分别对应可读可写可执行。 如果没有某项权限,就用 - 表示。对于文件来说,可写表示可以修改,并不一定代表可以删除,如果要删除这个文件,必须要拥有对文件所在目录的可写权限。

如果首个符号是d,表示这是一个目录。针对目录同样有 [ rwx ] 权限,可读即表示可以查看目录内容,可写表示可以修改目录中的内容,即创建文件,删除文件,重命名文件,可执行表示可以进入该目录。

rwx 权限也可以用数字表示,即4+2+1 = 7。

那么针对上面的文件分析一下:-rw-rw-r--. 1 tom tom 0 Sep 2 11:04 a.txt

  1. - 表示文件类型,说明 a.txt 是文件而不是目录或其他。
  2. rw- 表示文件所有者tom拥有对文件的可写,可读权限,a.txt不是一个可执行文件,就不存在可执行权限,用-表示。
  3. rw- 表示文件所在组tom拥有对文件的可写,可读权限。
  4. r-- 表示其他用户只拥有可读全新,不能修改。
  5. 1 表示文件数或者子目录数
  6. tom tom 表示文件的所有者和所在组
  7. 0 表示文件大小
  8. Sep 2 11:04 表示最近一次修改时间
  9. a.txt 表示文件名

文件权限的修改 chmod

通过chmod指令,可以修改文件的权限。

通过 + - = 来修改权限

使用 u 表示 user;g表示group;o表示others;a表示all (所有人)

示例:

  1. 给abc文件 的所有者读写执行的权限,给所在组读执行权限,给其它组读执行权限。
    chmod u=rwx,g=rx,o=rx abc.txt
  2. 给abc文件的所有者除去执行的权限,增加组写的权限
    chmod u-x,g+w abc.txt
  3. 给abc文件的所有用户添加读的权限
    chmod a+r abc.txt

通过数字变更权限

我们已经知道权限可以用数字表示:r=4 w=2 x=1,那么他们的组合也可以: rw=6 rx=5 wx=3 rwx=7。

示例:
将 /home/abc.txt 文件的权限修改成 rwxr-xr-x, 使用给数字的方式实现:
chmod 755 /home/abc.txt

练习题

  1. 警察和土匪游戏
    两个组:police , bandit
    四个用户:jack, jerry: 警察,xh, xq: 土匪
    (1) 创建组
    (2) 创建用户
    (3) jack 创建一个文件,自己可以读写,本组人可以读,其它组没人任何权限
    (4) jack 修改该文件,让其它组人可以读, 本组人可以读写
    (5) xh 投靠 警察,看看是否可以读写

  2. 神仙与妖怪
    建立两个组(神仙,妖怪)
    建立四个用户(唐僧,悟空,八戒,沙僧)
    设置密码
    把悟空,八戒放入妖怪 唐僧 沙僧 在神仙
    用悟空建立一个文件 (monkey.java 该文件要输出 i am monkey)
    给八戒一个可以r w 的权限
    八戒修改monkey.java 加入一句话( i am pig)
    唐僧 沙僧 对该文件没有权限
    把 沙僧 放入妖怪组
    让沙僧 修改 该文件 monkey, 加入一句话 (“我是沙僧,我是妖怪!”);

#root:
groupadd god
groupadd monster
useradd -g monster wukong
useradd -g monster bajie
useradd -g god tangseng
useradd -g god shaseng
passwd wukong
passwd bajie
passwd tangseng
passwd shaseng
su - wukong

#wukong:
vim monkey.java
chmod 760 monkey.java
su - bajie

#bajie:
cd /home/wukong
vim monkey.java
su - 

#root:
useradd -g monster shaseng
su - shaseng

#shasenn:
cd /home/wukong
vim monkey.java
exit

练习题

  1. 用root登录,建立用户mycentos,自己设定密码
    useradd mycentospwd mycentos
  2. 用mycentos登录,在主目录下建立目录test/t11/t1
    su - mycentosmkdir -p test/t11/t1
  3. 在t1中建立一个文本文件aa,用vi编辑其内容为ls –al
    cd /test/t11/t1touch aavi aa
  4. 改变aa的权限为可执行文件[可以将当前日期追加到一个文件],运行该文件./aa
  5. 删除新建立的目录test/t11/t1
    rm -rf test/
  6. 删除用户mycentos及其主目录中的内容
    userdel -r mycentos
  7. 将linux设置成进入到图形界面的
    init 5
  8. 重新启动linux或关机
    shutdownreboot

你可能感兴趣的:(Some,About,Linux)