Linux文件和用户操作

Linux中ls命令详解

英文全名:List即列表的意思,当我们学习某种东西的时候要做到知其所以然,当你知道了这个东西大概是个什么了以后你的思维就会联想到很多的东西学习的就会很快。

1. ls -a 列出文件下所有的文件,包括以“.“开头的隐藏文件(linux下文件隐藏文件是以.开头的,如果存在..代表存在着父目录)。


2. ls -l 列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等等。


3. ls -F 在每一个文件的末尾加上一个字符说明该文件的类型。"@"表示符号链接、"|"表示FIFOS、"/"表示目录、"="表示套接字。


4. ls -s 在每个文件的前面打印出文件的大小。  size(大小)


5. ls -t 按时间进行文件的排序  Time(时间)


6. ls -A 列出除了"."和".."以外的所有文件。


7. ls -R  将当前目录的所有子目录中的内容列出来,相当于我们编程中的“递归”实现


8. ls -L 列出文件的链接名。Link(链接)


9. ls -S 按照文件的大小进行排序

补充:

文件的颜色所代表的含义:

蓝色              目录

绿色              可执行文件

红色              压缩文件

浅蓝色          (浅)链接文件

白色              其他文件

黄色              设备文件:包括block, char, fifo

通配符  (用来查找文件的)  ("{}"用来生成序列的)

*                匹配任何字符串/文本,包括空字符串 


?                匹配任意一个字符 


[[:alpha:]]     单个字母


[[:upper:]]        单个大写字母


[[:lower:]]        单个


[[:digit:]]        单个数字


[[:alnum:]]        单个数字或字母


[[:space:]]        单个空格


[[:punct:]]     单个符号


{1..3}            1,2 3


{a..z}             大括号用来生成按照一定的顺序组成的序列

{a,b,c}      a,b,c    

[1-3]             匹配中括号中的任意一个字符

[a-z]                 匹配中括号中的任意一个字符


[^ac] [!ac]        不是a和c


[abcd]            匹配中括号中的任意一个字符即可

利用{}进行备份

 []与{}区别

[]只能用来找文件
{} 用来找文件,或创造文件生成序列

补充echo命令

echo命令用于在shell中打印shell变量的值,或者直接输出指定的字符串。linux的echo命令,在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的,因此有必要了解下echo的用法echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。

输出换行 echo-e

echo -e 处理特殊字符

若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出: 
\a 发出警告声; 
\b 删除前一个字符; 
\c 最后不加上换行符号; 
\f 换行但光标仍旧停留在原来的位置; 
\n 换行且光标移至行首; 
\r 光标移至行首,但不换行; 
\t 插入tab; 
\v 与\f相同; 
\ 插入\字符; 
\nnn 插入nnn(八进制)所代表的ASCII字符;

输出不换行 echo -n

echo给文件追加内容

在Shell编程过程很多时候会使用echo 并输入到日志文件中。写日志的时候有两种情况,一种是一次写入文件空,再写的时候就将之前的内容给覆盖掉,如何实现追加内容呢? 

1.1.覆盖写入

2.追加写入

用户的管理

1.系统为什么要有用户

用户:系统底层的安全设定(限制权利)

  • 举例:

        你的杯子你自己可以使用,你的家人可以使用,但是外人不可以使用,因为你和你的家人有使用你的杯子的权利,外人没有是用你的杯子的权利。

系统为什么要有用户态和内核态

在CPU的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃。比如:清内存、设置时钟等。如果所有的程序都能使用这些指令,那么你的系统一天死机n回就不足为奇了。所以,CPU将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3。

    linux的内核是一个有机的整体。每一个用户进程运行时都好像有一份内核的拷贝,每当用户进程使用系统调用时,都自动地将运行模式从用户级转为内核级,此时进程在内核的地址空间中运行。

    当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程的内核态。因为中断处理程序将使用当前进程的内核栈。这与处于内核态的进程的状态有些类似。

    内核态与用户态是操作系统的两种运行级别,跟intel cpu没有必然的联系, 如上所提到的intel cpu提供Ring0-Ring3四种级别的运行模式,Ring0级别最高,Ring3最低。Linux使用了Ring3级别运行用户态,Ring0作为 内核态,没有使用Ring1和Ring2。Ring3状态不能访问Ring0的地址空间,包括代码和数据。Linux进程的4GB地址空间,3G-4G部 分大家是共享的,是内核态的地址空间,这里存放在整个内核的代码和所有的内核模块,以及内核所维护的数据。用户运行一个程序,该程序所创建的进程开始是运 行在用户态的,如果要执行文件操作,网络数据发送等操作,必须通过write,send等系统调用,这些系统调用会调用内核中的代码来完成操作,这时,必 须切换到Ring0,然后进入3GB-4GB中的内核地址空间去执行这些代码完成操作,完成后,切换回Ring3,回到用户态。这样,用户态的程序就不能 随意操作内核地址空间,具有一定的安全保护作用。

     处理器总处于以下状态中的一种:

1、内核态,运行于进程上下文,内核代表进程运行于内核空间;

2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;

3、用户态,运行于用户空间。

从用户空间到内核空间有两种触发手段:

1.用户空间的应用程序,通过系统调用,进入内核空间。这个时候用户空间的进程要传递很多变量、参数的值给内核,内核态运行的时候也要保存用户进程的一些寄存器值、变量等。所谓的“进程上下文”,可以看作是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量和寄存器值和当时的环境等。

2.硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。所谓的“中断上下文”,其实也可以看作就是硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被打断执行的进程环境)。

   一个程序我们可以从两种角度去分析。其一就是它的静态结构,其二就是动态过程。下图表示了用户态和内核态直接的关系(静态的角度来观察程序)

组用来共享权利的
用户是用来限制权利的
组分为可以决定的组(附加组)和不能决定的组(初始组)

2.用户存在的形态(组)

组是用来共享权利的。

  • 自己能决定的组:   附加组(举例:你自己可以决定去认陌生人为干爹,并且认的干爹可以不止一个)。
  • 自己不能决定的组: 初始组(举例:你自己不能决定自己出生在什么家庭,这个是天生的,是与生俱来的)。 

3.用户配置文件

/etc/password            用户信息文件
用户名称:密码:用户的id:用户的初始组id::用户家目录:用户默认所使用的shell


/etc/group


组名称:组密码:组id:附加组所拥有的用户
/home/username            用户家目录


/etc/skel.*                用户骨文件(用户环境配置的模板,在用户建立的时候会自动地被复制到用户的家目录)

4.用户的查看

whoami                    查看当前用户的名称


id                         查看用户的id信息


id          -u             username        查看用户的uid


id          -G            username        查看用户所属的所有组(初始组和附加组)的id


id          -n             username        以名称显示信息

-g或--group  显示用户所属群组的ID。


-G或--groups  显示用户所属群组或附加群组的ID。


-u或--user  显示用户ID。


-help  显示帮助。

-version  显示版本信息。

5.用户的建立及删除

watch命令以周期性的方式执行给定的指令,指令输出以全屏方式显示。watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行。

watch -n 1 'tail -n 5 /etc/passwd /etc/group;echo====;ls -l /home'

用此命令来监控

/etc/login.defs            在此文件中可以设置用户的默认信息

useradd        username    使用默认规则建立用户(规则参看/etc/login.defs)


useradd -u  username     指定用户的uid


useradd -g  username    指定用户的初始组id


useradd -G  username    指定用户的附加组


useradd -c  username    指定用户的说明文字


useradd -d  username    指定用户的家目录


useradd -s  username    指定用户的shell(系统可以用)

补充:如何快速在linux上查看shell类型

1.查看当前系统所有可登录的shell类型

 要查看当前系统中所有可登录shell的类型,在/etc/shells配置文件中记录了用户可以登录的shell的具体路径,因此查看这个文件的内容,即可知道当前系统中所支持的所有shell类型。

2.查看某个用户的shell类型

 要查看某个用户的Shell类型,可以在/etc/passwd文件的最后字段查看到某个特定用户的登录Shell类型。以root为例,执行 cat /etc/passwd | grep ^root 最后一个:号字段显示的即为root用户的登录shell类型,为bash,如下图所示 。

3、查看正在运行的shell类型

(1)要查看当前运行shell的类型,有很多种方法。首先,可以通过$0这个变量来获取当前运行的shell类型。

(2)其次,也可以通过$$这个变量来获取当前运行的shell进程号(PID),然后通过ps命令的-p参数来反向查询正在运行的shell类型。

userdel        username    删除用户身份

此命令会导致删除不彻底,要想彻底删除还需要在home目录下删除username目录
userdel -r     username    删除用户身份及用户的系统配置文件


groupadd    groupname    使用默认规则创建组


groupadd -g groupname      指定组id


groupdel     groupname    删除组

6.用户管理

usermod    
usermod           -l      新用户名称     旧用户名称


usermod          -u             用户的uid


usermod          -g             更改初始组id


usermod          -G            更改附加组


usermod         -aG           增加附加组(会在当前用户所拥有的附加组的基础之上继续增加其附加组)


usermod          -c             更改用户说明


usermod          -d             更改用户的家目录指向


usermod          -md          更改用户的家目录指向并重命名家目录
usermod          -s              更改用户的shell

7.用户切换
su - username              切换用户(高级用户切换到低级用户是不需要密码)
                                     低级用户切换到高级用户或者切换到平级用户是需要后者密码


注意:
(1).当需要切换用户时需要及时退出当前用户,这样才能正常切换。


(2).su - 表示切换用户身份以及用户环境(如果没有"-"则只是切换了用户的身份,并没有切换用户环境)

8.用户的认证信息
/etc/shadow                用户的认证信息


用户名称:
用户密码: 
    加密方式:md5  sha512
    passwd username(只有超级用户才能够执行) 
    passwd             普通用户修改密码
    passwd -l          两个!!强度高) 冻结账号


    passwd -u                 解锁


    passwd -d                 清空密码
    usermod -L                 冻结账户


    usermod -U                 解锁


密码最后一次修改距离1970年1月1日的时间:      当此位数字为0时登录用户必须先修改密码才能登录 


补充一点 为何密码最后一次修改所距离的时间为1970年1月1日而不是其他时间

这个问题说来话长。 程序语言受电脑系统影响,而现代电脑系统都受到Unix系统的广泛影响,而1970年1月1日这个时间正是Unix系统的起始时间(epoch·time)。

当年的电脑需要一个可靠的外部时钟同步源,因此早期的Unix系统用一个32位字长表示时间,以1/60秒,即1Hz为时间间隔和外部时间源同步(这道不完全是由于老美的电网频率是60Hz的缘故,当时的系统主板的晶振就是1Hz)。 结果这个时间所表示的跨度只有大约829天(约2.5年),显然不够用,因此需要一个原始的起始(〔纪〕··〔元〕)时间,由于Unix系统源自上时间69年代,第一个正式版本于1970年首次运行在PDP-11上,1971年11月UNIX Programmer's Manual(Unix程序员手册)首次公布,这个手册里面提及了起始时间,将它定义为【1971】年1月1日。-- 手册也承认,该起始时间大约每2.5年就要重新修正一次。

之后系统时间同步间隔被修订为1秒,这样32位就可表述约136年的跨度,也正是这个期间(具体年份不祥),起始时间被修订为1970.1.1 (Unix开发者认为把之前的1971.1.1取整进位到最临近的年代起始(以每10年一个断代算),要比1971这个有点不伦不类的时间好),因此从这以后,Unix一直沿用了1970.1.1这个起始时间,而相关的程序也相应的沿用了这个时间,而深受Unix影响的后续操作系统们,如:OS/2, Windows, Mactonish, Linux。。。。都沿用了这个{事实标准}。



密码最短有效期(密码最少使用的天数):
                chage -m 1 westos
                passwd -n 3 westos


密码最长有效期(密码最长使用的天数):
                chage -M 30 westos
                passwd -x 40 westos


密码过期警告:    (距离过期日期还有多少天就开始警告)
                chage -W 2 westos(距离过期日期还有2天就开始警告)
                passwd -w 3 westos


密码非活跃期:(在有效期内成为活跃期,过了有效期叫做非活跃期,在非活跃期内虽然超过了有效期但是还可以正常使用,但是会有提示,可是如果连非活跃期都过了则会禁止使用当前的账户,账户被冻结)
                chage -I 2 westos


                passwd -i 0 westos


账号到期日:
                chage -E "2018-11-11" westos


未设定,用户自定义

9.用户权利的下放(升级)(用户享有更多的权力)
1.配置文件
/etc/sudoers


2.配置命令
visudo            此命令会自动进行语法检测

sudo” 是Unix/Linux平台上的一个非常有用的工具,允许为非根用户赋予一些合理的“权利”,让他们执行一些只有根用户或特许用户才能完成的任务,从而减少根用户的登陆次数和管理时间同时也提高了系统安全性。

  • sudo的目的:为非根用户授予根用户的权限;
  • 配置文件:/etc/sudoers
  • visudo命令编辑修改/etc/sudoers配置文件

用户名称 主机名称=(执行程序的身份) 命令                                当执行命令时需要用户验证
linux11 dns-server.example=(root) /usr/sbin.useradd
用户名称 主机名称=(执行程序的身份) NOPASSWD: 命令1,命令2            当执行命令时不需要用户验证
linux11 dns-server.example=(root) /usr/sbin.useradd,/usr/sbin/userdel

1.先切换为普通用户

2.在这个普通用户下创建一个新的用户,发现会报错(Permission denied)  访问权限不够,访问被拒绝

3.此时需要切换到超级用户root并更改/etc/sudoers中的配置,输入visudo命令,在浏览模式输入":100",在这里进行配置

4.使用sudo  useradd username命令创建用户  此时会让输入当前用户的密码,如果我不想输入密码的话就在/etc/sudoers文件中刚才配置的地方补充"NOPASSWD"就可以了

猜你喜欢

转载自blog.csdn.net/qq_40727767/article/details/81515330
今日推荐