1.4 linux基础(四)
1.4 linux基础(四)1.4.1 ls命令
文件类型: -:普通文件 (f) d: 目录文件 b: 块设备文件 (block) c: 字符设备文件 (character) l: 符号链接文件(symbolic link file) p: 命令管道文件(pipe) s: 套接字文件(socket) 文件权限:9位,每3位一组,每一组:rwx(读,写,执行),r-- 文件硬链接的次数 文件的属主(owner) 文件的属组(group) 文件大小(size),单位是字节 时间戳(timestamp):最近一次被修改的时间 访问:access 修改:modify,文件内容发生了改变 改变:change,metadata,元数据
实验:只显示隐藏文件 ls -I "[^.]*" -a ls -d .* ls -d .[^.]* ##tips:.*包括了..可能连带父目录都显示 1.4.2 创建空文件和刷新时间(touch)
touch命令:文件不存在就创建空文件,存在就刷新时间戳
[[email?protected] ~]# touch `date -d '-1 day' +%F `.log [[email?protected] ~]# touch $(date -d '-2 day' +%F ).log [[email?protected] ~]# ls 2018-07-24.log bigfile Documents Music Pictures test.txt txt 2018-07-25.log cmd.session Downloads n Public time.log Videos a.txt Desktop initial-setup-ks.cfg passwd.txt Templates tree [[email?protected] ~]# 1.4.3 复制文件和目录cp
## 如果DEST不存在:则创建指定目录,复制SRC目录中所有文件至DES [[email?protected] ~]# cp -r /etc/profile.d /data/profile.d.bak ##复制profile.d 到/data目录下并重命名为profild.d.bak ## 如果DEST存在:则将SRC目录 [[email?protected] ~]# cp -r /etc/profile.d /data/profile.d.bak ##在次执行,将把/etc/profile.d目录放入/data/profile.d.bak目录下 [[email?protected] ~]# cp -r /etc/profile.d /data/profile.d.bak ##提示是否覆盖 ## 如果DEST存在,但是是一个文件:报错 ## 如果DEST存在,是一个目录:将把SRC目录放入DEST目录下,做为子目录 [[email?protected] ~]# cp -r /etc/profile.d /data/profile.d.bak ##profile.d.bak是个目录,将/etc/profile.d目录放入/data/profile.d.bak,做为profile.d.bak目录的子目录 [[email?protected] ~]# ls /data/profile.d.bak profile.d cp常用选项
练习 1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录 ls /var/l*[[:digit:]]*[[:lower:]] 2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录 ls /etc/[[:digit:]]*[^[:digit:]] 3、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录 ls /etc/[^[:alpha:]][[:alpha:]]* 4、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录 ls /etc/rc[0-6]* 5、显示/etc目录下,所有以.d结尾的文件或目录 ls -d /etc/*.d 6、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录 ls -d /etc/[mnrp]*.conf 7、只显示/root下的隐藏文件和目录 ls -d /root/.* ls -d /root/.[^.]* ==8、只显示/etc下的非隐藏目录== ls -d /etc/[^.]*/ 9、定义别名命令baketc,每天将/etc/目录下所有文件,备份到/data独立的子目录下,并要求子目录格式为 backupYYYY-mm-dd,备份过程可见 cp -av /etc/ /data/backup`date +%F ` 10、创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限 cp -a /root/ /data/rootdir 1.4.4修改配置文件
1.4.5 rm 删除文件和目录
1.4.6 tree 显示目录树
1.4.7 mkdir 创建目录
1.4.8 rmdir 删除空目录
练习题 : (1) 如何创建/testdir/dir1/x,/testdir/dir1/y,/testdir/dir1/x/a,/testdir/dir1/x/b,/testdir/dir1/y/a,/testdir/dir1/y/b [[email?protected] ~]# mkdir -pv /testdir/dir1/{x/{a,b},y/{a,b}} mkdir: created directory ‘/testdir’ mkdir: created directory ‘/testdir/dir1’ mkdir: created directory ‘/testdir/dir1/x’ mkdir: created directory ‘/testdir/dir1/x/a’ mkdir: created directory ‘/testdir/dir1/x/b’ mkdir: created directory ‘/testdir/dir1/y’ mkdir: created directory ‘/testdir/dir1/y/a’ mkdir: created directory ‘/testdir/dir1/y/b’ (2) 如何创建/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b [[email?protected] ~]# mkdir -pv /testdir/dir2/{x/{a,y} mkdir: created directory ‘/testdir/dir2’ mkdir: created directory ‘/testdir/dir2/x’ mkdir: created directory ‘/testdir/dir2/x/a’ mkdir: created directory ‘/testdir/dir2/x/b’ mkdir: created directory ‘/testdir/dir2/y’ (3) 如何创建/testdir/dir3,/testdir/dir4,/testdir/dir5,/testdir/dir5/dir6,/testdir/dir5/dir7 [[email?protected] ~]# mkdir -pv /testdir/dir{3,4,5/dir{6,7}} mkdir: created directory ‘/testdir/dir3’ mkdir: created directory ‘/testdir/dir4’ mkdir: created directory ‘/testdir/dir5’ mkdir: created directory ‘/testdir/dir5/dir6’ mkdir: created directory ‘/testdir/dir5/dir7’ 1.4.9 索引节点inode
1.4.10 硬链接硬链接
1.4.11 软链接(符号链接)
==面试题:硬链接和软链接的区别==
==1.原理上== ==硬链接(hard link):== ==A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收。注:文件和文件名是不同的东西,rm A删除的只是A这个文件名,而A对应的数据块(文件)只有在inode节点链接数减少为0的时候才会被系统回收。目录的硬链接次数默认是2== ==软链接(soft link):== ==A是B的软链接(A和B都是文件名),A的目录项中的inode节点号与B的目录项中的inode节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路径名(可以根据这个找到B的目录项)。A和B之间是“主从”关系,如果B被删除了,A仍然存在(因为两个是不同的文件),但指向的是一个无效的链接== ==2.使用限制上==: ==硬链接:== ==a.不能对目录创建硬链接,原因有几种,最重要的是:文件系统不能存在链接环(目录创建时的".."除外,这个系统可以识别出来),存在环的后果会导致例如文件遍历等操作的混乱(du,pwd等命令的运作原理就是基于文件硬链接,顺便一提,ls -l结果的第二列也是文件的硬链接数,即inode节点的链接数)== ==b:不能对不同的文件系统创建硬链接,即两个文件名要在相同的文件系统下。== ==c:不能对不存在的文件创建硬链接,由原理即可知原因== ==软链接:== ==a.可以对目录创建软链接,遍历操作会忽略目录的软链接。== ==b:可以跨文件系统== ==c:可以对不存在的文件创建软链接,因为放的只是一个字符串,至于这个字符串是不是对于一个实际的文件,就是另外一回事了== ==面试题:描述 mv f1 /dir2/f2 和ln f1 /dir2/f2的底层原理有何差别== 1.4.12 确定文件内容file
1.4.13 标准输入和输出
[[email?protected] ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 93782 0.1 0.3 151216 4868 pts/ 0S+ 12:46 0:00 vim na root 94068 0.0 0.0 0 0 ? S 12:46 0:00 [kworker/0:0] root 94368 2.8 0.3 160888 5580 ? Ds 12:46 0:00 sshd: [email?protected]/1 root 94418 0.5 0.1 116224 2888 pts/1 Ss 12:46 0:00 -bash root 94436 0.1 0.4 345984 6392 ? Sl 12:46 0:00 /usr/sbin/abrt-dbus -t133 root 94711 0.0 0.1 155324 1864 pts/1 R+ 12:46 0:00 ps aux [[email?protected] ~]# cd /proc [[email?protected] proc]# ls [[email?protected] proc]# cd 93782 [[email?protected] 93782]# ls attr comm fd map_files [[email?protected] 93782]# cd fd [[email?protected] fd]# ls 0 1 2 3 1.4.14 Linux给程序提供三种I/O设备
1.4.15 I/O重定向:改变默认位置
1.4.16 支持的操作符号包括:
1.4.17 tr命令
从文件中导入STDIN
mail -s "Please Call" [email?protected] <&;END > Hi Wang,> > Please give me a call when you get in. We may need > to do some maintenance on server1. > > Details when you're on-site > Zhang > END
1.4.18 管道
ls | tr 'a-z' 'A-Z'
ls -l /etc | less
tar -cvf - /home | tar -xvf - 1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中 [[email?protected] fd]# tr 'a-z' 'A-Z' </etc/issue >/tmp/issue.out [[email?protected] fd]# cat /tmp/issue.out THE TTY IS L THE HOSTNAME IS N THE CURRENT TIME IS T S KERNEL R ON AN M 2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中 [[email?protected] ~]# who| tr "a-z" "A-Z" >/tmp/who.out [[email?protected] ~]# cat /tmp/who.out ROOT PTS/0 2018-07-26 11:11 (192.168.110.1) ROOT PTS/1 2018-07-26 12:46 (192.168.110.1) ZHU :0 2018-07-24 14:40 (:0) ROOT :1 2018-07-24 14:41 (:1) 3、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下: [[email?protected] ~]# mail -s help root <<EOF > Hello,I am $USER,the system version is here,thanks! > `cat /etc/centos-release` > EOF [[email?protected] ~]# mail 3 ##d第三封邮件 r ##读 [email?protected] (root) wrote: > Hello,I am hostname,please help me to check ist,thanks! > CentOS Linux release 8.5.1804 (Core) > EOF 4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开 ls |tr 'n' ' ' 5、计算1+2+3+..+99+100的总和 echo {1..100}|tr ' ' '+'|bc 6、删除Windows文本文件中的‘^M’字符 tr -d '15' win.txt 7、处理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的数字和空格 [[email?protected] ~]# echo "t.,l 1 jr#bcmn 2 c*/fe 3 uz 4"|tr -dc '[:digit:][:space:]' 1 2 3 4 8、将PATH变量每个目录显示在独立的一行 [[email?protected] ~]# echo $PATH | tr ':' 'n ' /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /root/bin 9、将指定文件中0-9分别替代成a-j [[email?protected] ~]# cat /data/test1.txt 1 2 3 4 5 6 7 8 9 [[email?protected] ~]# tr '0-9' 'a-j' </data/test1.txt b c d e f g h i j 10、将文件/etc/centos-release中每个单词(由字母组成)显示在独立的一行,并无空行 [[email?protected] ~]# cat /etc/centos-release CentOS Linux release 8.5.1804 (Core) [[email?protected] ~]# cat /etc/centos-release |tr -c '[:alpha:]' ' ' | tr -s ' ' 'n' CentOS Linux release Core 1.4.19 与用户和组相关的一些配置文件说明Linux用户和组的主要配置文件:
[[email?protected] ~]# whatis passwd [[email?protected] ~]# man 5 passwd [[email?protected] ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin ##7个字段-->>用户名:密码:UID:GID: 用户详细说明信息:用户的家目录:用户默认shell [[email?protected] ~]# getent passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin ##/sbin/nologin为非登录式shell(系统启动时自动运行为系统提供服务的) [[email?protected] ~]# getent passwd daemon daemon:x:2:2:daemon:/sbin:/sbin/nologin ##getent passwd [username] 这个命令相当于cat /etc/passwd 查看passwd这个配置文件的信息
[[email?protected] ~]# cat /etc/group root:x:0:gentoo bin:x:1:apache,gentoo daemon:x:2:apache sys:x:3:
[[email?protected] ~]# cat /etc/shadow root:$6$U6Zoot9U$y05jBW1HzBvF//nGN5rMQBgZ2nkVoDboceRd5KLUh1d4mpI5JllMOZUDPD/QihjiuVXrTPrK3 GRGy/yEyEHUf/:17737:0:99999:7::: bin:*:17632:0:99999:7::: daemon:*:17632:0:99999:7::: adm:*:17632:0:99999:7::: lp:*:17632:0:99999:7::: sync:*:17632:0:99999:7::: shutdown:*:17632:0:99999:7::: halt:*:17632:0:99999:7::: gentoo:!!:17739:0:99999:7::: [[email?protected] ~]# getent shadow zhu zhu:$6$t0LJMq7.:17721:0:99999:7::: 9个字段
[[email?protected] ~]# date -d @1531094400 Mon Jul 9 08:00:00 CST 2018 ##(2018年7月9日)
==用户名:加了密的密码:最近一次更改密码的日期:密码口令的最小有效期:密码口令的最大有效期:密码警告时间段:密码宽限期:账户过期时间:保留字段==
[[email?protected] ~]# cat /etc/gshadow root:::gentoo bin:::apache,gentoo daemon:::apache sys::: adm:::
[[email?protected] ~]# ll -a /etc/skel total 24 drwxr-xr-x. 3 root root 78 Apr 11 12:59 . drwxr-xr-x. 140 root root 8192 Jul 27 21:10 .. -rw-r--r--. 1 root root 18 Apr 11 08:53 .bash_logout -rw-r--r--. 1 root root 193 Apr 11 08:53 .bash_profile -rw-r--r--. 1 root root 231 Apr 11 08:53 .bashrc drwxr-xr-x. 4 root root 39 Jul 18 17:28 .mozilla [[email?protected] ~]# mkdir /etc/skel/newfile [[email?protected] ~]# ll -a /etc/skel total 24 drwxr-xr-x. 4 root root 93 Jul 27 21:18 . drwxr-xr-x. 140 root root 8192 Jul 27 21:10 .. -rw-r--r--. 1 root root 18 Apr 11 08:53 .bash_logout -rw-r--r--. 1 root root 193 Apr 11 08:53 .bash_profile -rw-r--r--. 1 root root 231 Apr 11 08:53 .bashrc drwxr-xr-x. 4 root root 39 Jul 18 17:28 .mozilla drwxr-xr-x. 2 root root 6 Jul 27 21:18 newfile [[email?protected] ~]# useradd user1 useradd: user 'user1' already exists [[email?protected] ~]# userdel -r user1 [[email?protected] ~]# useradd user1 [[email?protected] ~]# ll -a /home/user1 total 16 drwx------. 4 user1 user1 93 Jul 27 21:19 . drwxr-xr-x. 31 root root 4096 Jul 27 21:19 .. -rw-r--r--. 1 user1 user1 18 Apr 11 08:53 .bash_logout -rw-r--r--. 1 user1 user1 193 Apr 11 08:53 .bash_profile -rw-r--r--. 1 user1 user1 231 Apr 11 08:53 .bashrc drwxr-xr-x. 4 user1 user1 39 Jul 18 17:28 .mozilla drwxr-xr-x. 2 user1 user1 6 Jul 27 21:18 newfile 当不小心删除了test2用户的家目录的时候, cp -r /etc/skel/. /home/test2(注意权限)
1.4.21 文件操作 vipw,vigr[[email?protected] ~]# vipw ##用vi打开/etc/passwd vipw: /etc/passwd is unchanged [[email?protected] ~]# vigr ##用vi打开/etc/group vigr: /etc/group is unchanged 1.4.22 用户创建:useradd
[[email?protected] ~]# useradd -u 80 -s /sbin/nologin -d /var/www -G daemon,bin apache ##不加-r 默认会创建家目录 [[email?protected] ~]# ll -a /var/www total 16 drwx------. 4 apache apache 93 Jul 28 09:18 . drwxr-xr-x. 22 root root 4096 Jul 28 09:18 .. -rw-r--r--. 1 apache apache 18 Apr 11 08:53 .bash_logout -rw-r--r--. 1 apache apache 193 Apr 11 08:53 .bash_profile -rw-r--r--. 1 apache apache 231 Apr 11 08:53 .bashrc drwxr-xr-x. 4 apache apache 39 Jul 18 17:28 .mozilla drwxr-xr-x. 2 apache apache 6 Jul 27 21:18 newfile [[email?protected] ~]# userdel -r apache userdel: apache mail spool (/var/spool/mail/apache) not found userdel: apache home directory (/var/www) not found [[email?protected] ~]# useradd -u 80 -s /sbin/nologin -r -d /var/www -G daemon,bin apache ##加了-r 创建的为系统用户,默认不创建家目录,注意-r 和-d之间的顺序不能错,加-m 强制创建家目录 [[email?protected] ~]# ll -a /var/www ls: cannot access /var/www1: No such file or directory [[email?protected] ~]# useradd -u 80 -s /sbin/nologin -M -d /var/www -G daemon,bin apache ##-M 创建没有家目录的普通用户 [[email?protected] ~]# ll -a /var/www ls: cannot access /var/www: No such file or directory [[email?protected] ~]# id apache uid=80(apache) gid=4038(apache) groups=4038(apache),1(bin),2(daemon) 1.4.23 新建用户的相关文件和命令
1.4.24 用户属性修改usermod
1.4.25 删除用户userdel
1.4.26 查看用户相关的ID信息
1.4.27 切换用户或以其他用户身份执行命令su
1.4.28 设置密码passwd
1.4.29 修改用户密码策略chage
1.4.30 用户相关的其它命令
1.4.31 创建组groupadd
1.4.32 组属性修改:groupmod
1.4.33 组密码:gpasswd
1.4.31 更改和查看组成员groupmems
1.4.32 修改文件的属主和属组chown
1.4.33 文件权限
1.4.34 修改文件权限chmod
chmod 640 chgrp sales testfile chmod u+wx,g-r,o=rx file chmod -R g+rwX /testdir chmod 600 file
1.4.35 新建文件和目录的默认权限umask
1.4.36 Linux文件系统上的特殊权限
(1) 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限 (2) 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组 (3) 进程访问文件时的权限,取决于进程的发起者 (a) 进程的发起者,同文件的属主:则应用文件属主权限 (b) 进程的发起者,属于文件属组;则应用文件属组权限 (c) 应用文件“其它”权限 1.4.37 可执行文件SUID权限
SUID只对二进制可执行程序有效
==总结:用户使用具有SUID权限的二进制程序,发起一个进程,该进程的身份不是用户本身,而是二进制程序自身的属主==
1.4.38 可执行文件上SGID权限
==总结:具有SGID权限的二进制程序,用户使用此二进制程序发起一个进程,进程的属组不是用户的基本组,而是二进制程序本身的基本组。== 1.4.39 目录上的SGID权限
==一旦某目录被设定了SGID,则对此目录有写权限(写权限指可以创建文件、删除文件)的用户在此目录中创建的文件所属的组为此目录的属组==
1.4.40 Sticky:沾滞位
==作用在目录上,此目录中的文件仅能被文件的所有者删除或管理员root,即自己只能删除自己的文件,不能删除别人的文件==
例如:
SUID SGID STICKY 0 0 0 0 0 0 1 1 0 1 0 2 0 1 1 3 1 0 0 4 1 0 1 5 1 1 0 6 1 1 1 7
1.4.41 访问控制列表ACL
[[email?protected] data]# ll -rw-r--r--. 1 mage mage 0 Jul 28 10:46 mage1 -rw-r--r--. 1 root root 2271 Jul 19 21:15 passwd
[[email?protected] data]# ll -rw-r--r--. 1 mage mage 0 Jul 28 10:46 mage1 -rw-r--r--. 1 root root 2271 Jul 19 21:15 passwd
[[email?protected] data]# ll -rw-r--r--. 1 root root 2271 Jul 19 21:15 passwd [[email?protected] data]#setfacl -m u:zhu:0 passwd [[email?protected] data]# su zhu [[email?protected] data]$ cat passwd cat: passwd: Permission denied [[email?protected] data]$exit [[email?protected] data]# getfacl passwd # file: passwd # owner: root # group: root user::rw- user:zhu:--- group::r-- mask::r-- other::r-- [[email?protected] data]# chown zhu passwd [[email?protected] data]# ll passwd -rw-r--r--+ 1 zhu root 2271 Jul 19 21:15 passwd [[email?protected] data]# su zhu [[email?protected] data]$ cat passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin [[email?protected] data]# ll passwd ----rw-r--+ 1 root root 2271 Jul 19 21:15 passwd [[email?protected] data]# usermod -aG sales zhu [[email?protected] data]# id zhu uid=1000(zhu) gid=1000(zhu) groups=1000(zhu),4036(git),4040(sales) [[email?protected] data]# getfacl passwd #file: passwd #owner: root #group: root user::--- user:zhu:rw- ##自定义用户zhu group::r-- group:sales:--- ## 自定义组sales(zhu属于sales组) mask::rw- other::r-- [[email?protected] data]# su zhu [[email?protected] data]$ cat passwd root:x:0:0:root:/root:/bin/bash bin/nologin ##可读 [[email?protected] data]$ echo 11 >>passwd ##也可写 说明 自定义用户>自定义组 [[email?protected] data]$ exit exit [[email?protected] data]# setfacl -x u:zhu passwd [[email?protected] data]# gefacl passwd bash: gefacl: command not found... [[email?protected] data]# getfacl passwd # file: passwd # owner: root # group: root user::--- ##用户本身 > ##user:zhu:--- 自定义用户 group::r-- 组 group:sales:--- 自定义组 mask::r-- other::r-- 其他 [[email?protected] data]# id u uid=4036(u) gid=4041(u) groups=4041(u),0(root),4040(sales) [[email?protected] data]# su u [[email?protected] data]$ cat passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |