写作: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
-
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
-
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命令分屏查看。
-
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 显示版本信息并退出 -
tac:
用法:tac [选项]... [文件]...
将每个指定文件按行倒置并写到标准输出。
如果不指定文件,或文件为"-",则从标准输入读取数据 -
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
-
more 分屏查看命令
-
less 分屏查看命令。man命令实际上调用less命令来查看帮助手册
-
对文件的操作命令(复制、移动、删除)
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、创建如下目录结构
目录结构练习.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 ~]#
网友评论