Linux运维初步----第二周

写作:N27_loong 2018-6-1
失踪人口终于回归了!
首先,祝大家工作愉快,六一节日快乐!linux的学习没有别的途径,就像卖油翁说的“唯手熟尔”。希望在前进的路上,一直有你陪伴!

一、 Linux上常用的文件管理命令都有哪些,使用方法

1. 文件类型的分类

文件类型:
- 普通文件类型
d:目录文件
b:块设备
c:字符设备
l:符号链接文件
p:管道文件,pipe
s:套接字文件,socket
例如:

    [root@loong ~]# ll
    总用量 44
    -rw-r--r--. 1 root root 26150 7月   9 18:43 install.log

说 明:自左向右:
- 这是一个普通文件
rw- 文件属主的权限
r-- 文件属组的权限
r-- 其他用户的权限
1 数字表示被硬链接的次数
root 文件的属主,本例中文件属主是root
root 文件的属组,本例中文件属组是root组
26150 文件的大小,字节数
7月...文件最后一次被修改的时间
install.log 文件名

    [root@loong ~]# ll /dev
    总用量 0
    brw-rw----. 1 root disk      8,   0 7月  14 07:44 sda
    brw-rw----. 1 root disk      8,   1 7月  14 07:44 sda1
    brw-rw----. 1 root disk      8,   2 7月  14 07:44 sda2

说明:自左向右
b:块设备
rw-:属主权限,可读写。
rw-:属组权限
---:其他用户权限
1 :被硬链接的次数
root:设备文件属主
disk:设备文件属组
8,:设备主设备号,标识设备类型
0 :设备次设备号,标识同类型的不同设备
7月....:设备文件最后修改的时间
sda:设备文件名

2. 目录管理的命令mkdir,rmdir

  1. mkdir:创建一个目录
    语法:mkdir [OPTION]... DIRECTORY...
    -p:自动创建路径上不存在的目录
    -v:显示命令的创建过程
    -m:设定权限
    例如:在/tmp目录下建立mydir目录并在此目录下再建立名称为1的目录
[root@loong ~]# ls /
bin  boot  cgroup  data  dev  etc  home  lib lost+found  media  misc  mnt  net  opt  proc  root sbin  selinux  srv  sys  tmp  usr  var
[root@loong ~]# cd /tmp
[root@loong tmp]# ls
yum.log
[root@loong tmp]# mkdir -pv /tmp/mydir/1
mkdir: 已创建目录 "/tmp/mydir"
mkdir: 已创建目录 "/tmp/mydir/1"
[root@loong tmp]# ls
mydir  yum.log
[root@loong tmp]# cd mydir
[root@loong mydir]# ls
1
  1. rmdir:移除一个目录。要移除的目录必须是一个空目录。
    语法:rmdir [OPTION]... DIRECTORY...
    -p:删除某一空目录后如父目录为空,则一并删除。有较大风险,尽 量不用
    -v:显示命令的创建过程

    例如:删除上例中建立的目录

          [root@loong tmp]# mkdir -pv /tmp/mydit/1
          mkdir: 已创建目录 "/tmp/mydit"
          mkdir: 已创建目录 "/tmp/mydit/1"
          [root@loong tmp]# ls /tmp
          mydit  yum.log
          [root@loong tmp]# ls mydit
          1
          [root@loong tmp]# rmdir mydit/1                                         (删除名为1的目录)
          [root@loong tmp]# ls mydit/1
          ls: 无法访问mydit/1: 没有那个文件或目录     (目录已删除)
          [root@loong tmp]# rmdir mydit                                          (删除mydit目录)
          [root@loong tmp]# ls
          yum.log
          [root@loong tmp]# 
    

3.文件查看命令:
主要有cat,tac,head,tail,more,less命令。其中more,less命令分屏查看。

  1. cat
    将[文件]或标准输入组合输出到标准输出。

    -A, --show-all 等于-vET
    -b, --number-nonblank 对非空输出行编号
    -e 等于-vE
    -E, --show-ends 在每行结束处显示"$"
    -n, --number 对输出的所有行编号
    -s, --squeeze-blank 不输出多行空行
    -t 与-vT 等价
    -T, --show-tabs 将跳格字符显示为^I
    -u (被忽略)
    -v, --show-nonprinting 使用^ 和M- 引用,除了LFD和 TAB 之外
    --help 显示此帮助信息并退出
    --version 显示版本信息并退出

  2. tac:
    用法:tac [选项]... [文件]...
    将每个指定文件按行倒置并写到标准输出。
    如果不指定文件,或文件为"-",则从标准输入读取数据

  3. head:
    head [选项]... [文件]...
    将每个指定文件的头10 行显示到标准输出。
    如果指定了多于一个文件,在每一段输出前会给出文件名作为文件头。
    如果不指定文件,或者文件为"-",则从标准输入读取数据。 显示文件前15行

     [root@loong etc]# head -n20 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
     lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     sync:x:5:0:sync:/sbin:/bin/sync
     shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     halt:x:7:0:halt:/sbin:/sbin/halt
     mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
     uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
     operator:x:11:0:operator:/root:/sbin/nologin
     games:x:12:100:games:/usr/games:/sbin/nologin
     gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
     ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
     nobody:x:99:99:Nobody:/:/sbin/nologin
     dbus:x:81:81:System message bus:/:/sbin/nologin
     vcsa:x:69:69:virtual console memory                                    owner:/dev:/sbin/nologin
     rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
     haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
     ntp:x:38:38::/etc/ntp:/sbin/nologin
    
  4. more 分屏查看命令

  5. less 分屏查看命令。man命令实际上调用less命令来查看帮助手册

  1. 对文件的操作命令(复制、移动、删除)
    1.文件的复制:cp命令,用于实现文件的复制
    源文件,目标文件

         单源复制:cp [OPTION]... [-T] SOURCE DEST
         多源复制:cp [OPTION]... SOURCE... DIRECTORY:目标必须是目录;
                   cp [OPTION]... -t DIRECTORY SOURCE...
    

常用选项:
-i,--interactive:交互式复制,即覆盖目标文件之前提醒用户确认;
-f,force:强制覆盖目标文件;
-R,-r,--recursive:递归复制目录及其内容
-P,--no-dereference:复制链接文件本身,而非默认的复制链接文件指向的原文件内容;
-d:相当于--no-dereference;复制链接本身(默认为复制链接文件的原文件内容);
--preserve[=ATTR_LIST]:
指明保留的原文件属性列表;
默认为default: mode, ownership, timestamps;
还包括其它属性:context(安全上下文), links(符号链接), xattr(额外属性), all;
-a,--archive:归档复制;备份时才会使用;
相当于-dR --preserve=all;
注意:仅管理员有权限复制时保留属主和属组属性

  • 单源复制:cp [OPTION]... [-T] SOURCE DEST
    - 如果目标文件文件名与原文件不同名则:复制文件并重命名;
    复制过程:先创建目标文件,而后复制源文件的内容导入至目标文件;
    - 如果目标文件事先存在:
    - 如果目标文件文件名与原文件同名则:则覆盖目标文件,为安全计root用户默认使用-i选项,为交互确认;
    - 如果目标文件是目录则:在此目录中创建一个与原文件同名的文件,则导入其内容;
    • 多源复制 : 基本前提:目标存在,且必须是目录;否则即为错误;即复制时目标目录必须提前创建;
[root@centos ~]# cp /etc/passwd /etc/gshadow /tmp/mytest
cp: 目标"/tmp/mytest" 不是目录                #目标目录不存在
[root@centos ~]# mkdir /tmp/mytest
[root@centos ~]# cp /etc/passwd /etc/gshadow /tmp/mytest
[root@centos ~]# ls /tmp/mytest
gshadow  passwd
[root@centos ~]# 
  • 复制链接文件时要注意:
    对于链接文件,默认是复制链接文件所指向的原文件的内容
[root@centos ~]# ll /etc/redhat-release 
lrwxrwxrwx. 1 root root 14 6月   7 2018 /etc/redhat-release -> centos-release
[root@centos ~]# cp /etc/redhat-release /tmp
[root@centos ~]# ll /tmp/redhat-release 
-rw-r--r--. 1 root root 27 2月  17 15:35 /tmp/redhat-release
[root@centos ~]# cat /tmp/redhat-release
CentOS release 6.3 (Final)
[root@centos ~]# cat /etc/centos-release 
CentOS release 6.3 (Final)

如果使用-P选项,则只复制了一个快捷方式,并无原文件内容。复制的文件不可用,要想正常使用,则要把源文件也复制到同一目录下。

[root@centos ~]# cp -P /etc/redhat-release /tmp
[root@centos ~]# ll /tmp/redhat-release 
lrwxrwxrwx. 1 root root 14 2月  17 15:42 /tmp/redhat-release -> centos-release
[root@centos ~]# cat /tmp/redhat-release
cat: /tmp/redhat-release: 没有那个文件或目录
[root@centos ~]# cp /etc/centos-release /tmp
[root@centos ~]# ll /tmp/redhat-release 
lrwxrwxrwx. 1 root root 14 2月  17 15:42 /tmp/redhat-release -> centos-release
[root@centos ~]# cat /tmp/redhat-release
CentOS release 6.3 (Final)

  • 复制时文件元数据的处理:
    默认是不保留所复制文件的属主和属组信息,以哪个用户复制文件,cp后的文件的属主和属组信息就是那个用户。要保留原属组和属主信息要使用 cp -p选项
    2.mv命令:(不需要-r选项)与使用cp命令相似;
    mv - move (rename) files 移动或重命名文件
    单源移动:mv [OPTION]... [-T] SOURCE DEST
    多源移动:mv [OPTION]... SOURCE... DIRECTORY
    mv [OPTION]... -t DIRECTORY SOURCE...

注意:原文件目录与目标文件目录相同时,为rename;否 则为move;不区分目录和文件,直接move;
常用选项:
-i,--interactive:交互式复制,移动时,如果目标文件存在时提示用户确定是否覆盖(仅root用户);
-f,force:强制,覆盖前不提示;

3.rm命令:
即能删除文件又能删目录,但删目录时要用递归-r选项;
rm - remove files or directories
rm [OPTION]... FILE...
常用选项:
-r, -R, --recursive:递归删除目录及其内容;
-f,force:强制删除,不提示确认;
-i,--interactive:交互式,提示确认;
注意:请不要只想“rm -rf /”或“rm -rf / *”,在生产环境中,要自建回收站!禁用rm操作

二. bash工作特性之命令执行状态返回值

命令执行状态返回值:在 Linux 下,不管你是启动一个桌面程序也好,还是在控制台下运行命令,所有的程序在结束时,都会返回一个数字值,这个值叫做返回值,或者称为错误号 ( Error Number )。这个值保存在特殊环境变量?查看。

```
[root@loong ~]# ls /
bin  boot  cgroup  data  dev  etc  home  lib  lost+found  media        misc  mnt  net  opt  proc  root  sbin  selinux  srv  sys  tmp  usr     var
[root@loong ~]# echo $?
0
[root@loong ~]# 
```

返回值是0,表示命令操作成功,反之将返回1~255之间的一个数值。

三 命令行展开的练习

bash的特性之一,指使用"{ }"包括起来,包含一个以逗号为分隔的路径列表,并可展开为多个路径。
例如:如下方式同时创建/tmp/a和/tmp/b两个目录

[root@centos ~]# mkdir -v /tmp/{a,b}
mkdir: 已创建目录 "/tmp/a"
mkdir: 已创建目录 "/tmp/b"

1、创建/tmp目录下的a_c,a_d,b_c,b_d目录

[root@centos ~]# mkdir /tmp/{a,b}_{c,d}
[root@centos ~]# ls /tmp
8eabc  a_c  a_d  b_c  b_d  issue.bak  magedu  soo.e  vmware-root  vmware-tools-distrib
[root@centos ~]# 

2、创建如下目录结构


Linux运维初步----第二周_第1张图片
目录结构练习.PNG
[root@centos ~]# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/rc.d/init.d,sysconfig/network-scripts,lab/modules,lab64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{log,run,lock}}
mkdir: 已创建目录 "/tmp/mylinux"
mkdir: 已创建目录 "/tmp/mylinux/bin"
mkdir: 已创建目录 "/tmp/mylinux/boot"
mkdir: 已创建目录 "/tmp/mylinux/boot/grub"
mkdir: 已创建目录 "/tmp/mylinux/dev"
mkdir: 已创建目录 "/tmp/mylinux/etc"
mkdir: 已创建目录 "/tmp/mylinux/etc/rc.d"
mkdir: 已创建目录 "/tmp/mylinux/etc/rc.d/init.d"
mkdir: 已创建目录 "/tmp/mylinux/sysconfig"
mkdir: 已创建目录 "/tmp/mylinux/sysconfig/network-scripts"
mkdir: 已创建目录 "/tmp/mylinux/lab"
mkdir: 已创建目录 "/tmp/mylinux/lab/modules"
mkdir: 已创建目录 "/tmp/mylinux/lab64"
mkdir: 已创建目录 "/tmp/mylinux/proc"
mkdir: 已创建目录 "/tmp/mylinux/sbin"
mkdir: 已创建目录 "/tmp/mylinux/sys"
mkdir: 已创建目录 "/tmp/mylinux/tmp"
mkdir: 已创建目录 "/tmp/mylinux/usr"
mkdir: 已创建目录 "/tmp/mylinux/usr/local"
mkdir: 已创建目录 "/tmp/mylinux/usr/local/bin"
mkdir: 已创建目录 "/tmp/mylinux/usr/local/sbin"
mkdir: 已创建目录 "/tmp/mylinux/var"
mkdir: 已创建目录 "/tmp/mylinux/var/log"
mkdir: 已创建目录 "/tmp/mylinux/var/run"
mkdir: 已创建目录 "/tmp/mylinux/var/lock"
[root@centos ~]# tree /tmp/mylinux/
/tmp/mylinux/
├── bin
├── boot
│   └── grub
├── dev
├── etc
│   └── rc.d
│       └── init.d
├── lab
│   └── modules
├── lab64
├── proc
├── sbin
├── sys
├── sysconfig
│   └── network-scripts
├── tmp
├── usr
│   └── local
│       ├── bin
│       └── sbin
└── var
  ├── lock
  ├── log
  └── run

24 directories, 0 files
[root@centos ~]# 


四 文件元数据信息有哪些?分别什么含义?怎么修改时间戳信息?

文件的数据由两部分组成:
元数据(metadata):存放于文件系统中的inode里;标明文件的状态。显示内容包括:

文件路径
文件大小
文件占用block
每个IO block大小
文件类型
文件所在设备的主/次设备号
文件的inode
文件被硬链接次数
文件权限
文件的属主UID
文件的属组GID
环境(SELinux)
access time:最近访问时间
modify time:最近更改时间指数据发生变化
change time:最近改变时间指元数据发生变化

数据(data):存放在data blocks里,为实际的文件内容。

查看文件元数据的命令是stat,修改文件时间戳使用touch命令。
touch命令用法:touch 文件名
选项:
-c :文件不存在时,不创建空文件
-a:仅修改access time
-m:仅修改modify time
-t:按指定的时间格式修改。
时间格式 [cc]YYMMDDhhmm[.ss],年月日时分秒
示例:
1、修改access time,改为2020-02-10 05:05:5
touch -at 时间格式 文件路径


[root@centos ~]# stat /etc/issue
  File: "/etc/issue"
  Size: 47          Blocks: 8          IO Block: 4096   普通文件
Device: 802h/2050d  Inode: 87          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-02-13 15:31:36.481534982 +0800
Modify: 2012-06-26 17:29:36.000000000 +0800
Change: 2018-06-07 16:40:13.037753438 +0800
[root@centos ~]#touch -at 202002100505.05 /etc/issue
[root@centos ~]# stat /etc/issue
  File: "/etc/issue"
  Size: 47          Blocks: 8          IO Block: 4096   普通文件
Device: 802h/2050d  Inode: 87          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-02-10 05:05:05.000000000 +0800
Modify: 2012-06-26 17:29:36.000000000 +0800
Change: 2020-02-13 17:18:49.333657546 +0800

修改modify time ,改为2020-01-12 23:23:23
touch -mt 时间格式 文件路径

  File: "/etc/issue"
  Size: 47          Blocks: 8          IO Block: 4096   普通文件
Device: 802h/2050d  Inode: 87          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-02-10 05:05:05.000000000 +0800
Modify: 2012-06-26 17:29:36.000000000 +0800
Change: 2020-02-13 17:18:49.333657546 +0800
[root@centos ~]# touch -mt 202001122323.23 /etc/issue
[root@centos ~]# stat /etc/issue
  File: "/etc/issue"
  Size: 47          Blocks: 8          IO Block: 4096   普通文件
Device: 802h/2050d  Inode: 87          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-02-10 05:05:05.000000000 +0800
Modify: 2020-01-12 23:23:23.000000000 +0800
Change: 2020-02-13 17:24:18.979678792 +0800
[root@centos ~]# 

你可能感兴趣的:(Linux运维初步----第二周)