Linux入门挑战(二)
Linux发行版的系统目录名称结构
Linux文件的文件数据类型
文件的元数据信息及其含义
查看方式
stat file
例如:
修改文件的时间戳
touch 命令格式:
touch [ OPTION ] ... FILE ...
例如:
touch aaa.txt 刷新存在文件的时间戳
软链接 && 硬链接
软链接
定义:软链接就是一个普通文件,知识数据块内容有点特殊,软链接有这自己的inode号以及用户数据块
使用格式:
ln -s [ PATH..FILE ] [new filename]
主要特点如下:
(1)软链接有自己的文件属性及权限 (2)可对不存的文件或目录创建软链接 (3)软链接可跨分区创建 (4)软链接可对文件或目录创建 (5)创建软链接时,链接计数不会增加 (6)删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软链接被称为死链接,若被指向路径文件被重新创建,死链接可恢复为正常的软链接
实例:
硬链接
定义:硬链接其本质就是对同一个文件起多个文件名
主要特点如下:
(1)文件有相同的node及data block (2)只能对已存在的文件进行创建 (3)不能跨分区创建爱你硬链接 (4)不能对目录进行创建,只可对文件创建 (5)删除一个硬链接文件并不影响其他相同inode号的文件
实例:
替换文件行首为空白的字符
使用命令sed、cp、tail、cat
1、拷贝一个任意文件(生产环境切勿操作)
cp /etc/profile /tmp
查看文件部分格式
cat /tmp/profile
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
pathmunge () {
case ":${PATH}:" in
*:"$1":*)
;;
*)
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
esac
}
if [ -x /usr/bin/id ]; then
if [ -z "$EUID" ]; then
# ksh workaround
EUID=`/usr/bin/id -u`
UID=`/usr/bin/id -ru`
fi
USER="`/usr/bin/id -un`"
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
.....
.....
.....
2、使用sed命令替换
sed 's/^ *//' /tmp/profile
root@CentOS7[12:31:34]:/tmp# sed 's/^ *//' profile
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
pathmunge () {
case ":${PATH}:" in
*:"$1":*)
;;
*)
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
esac
}
if [ -x /usr/bin/id ]; then
if [ -z "$EUID" ]; then
# ksh workaround
EUID=`/usr/bin/id -u`
UID=`/usr/bin/id -ru`
.....
.....
.....
上述方法仅仅是输出到屏幕,如果想要应用到文件加上 -i参数即可
sed -i 's/^ *//' /tmp/profile
vim设置4个缩进符号
编辑一个文件,进入之后依次次输入 [esc] --> [ : ] --> [ set ts=4 ]
vim aaa.txt
Linux的文件管理类命令
管理文件相关命令
ls |
查看文件列表 |
stat |
查看文件属性 |
file |
查看文件类型 |
touch |
创建文件,修改文件时间戳 |
cp |
复制文件或目录 |
mv |
移动文件或目录 |
rm |
删除文件或目录 |
ln |
创建文件硬链接 |
ln -s |
创建文件软链接 |
ls命令:
ls [OPTION] ... [FILE] ...
选项:
-a 显示所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出)
-l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
-r 将文件以相反次序显示(原定依英文字母次序)
-t 将文件依建立时间之先后次序列出
-A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
-F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
-R 若目录下有文件,则以下之文件亦皆依序列出
实例:
列出根目录(/etc)下的所有目录:
将 /bin 目录以下所有目录及文件详细资料列出 :
[root@localhost ~]# ls -lR /bin
lrwxrwxrwx. 1 root root 7 Dec 2 00:09 /bin -> usr/bin
列出目前工作目录下所有文件及目录;目录于名称后加 "/", 可执行档于名称后加 "*" :
ls -AF /etc
stat命令
stat [OPTION] ... [FILE] ...
实例:查看testfile的文件的indoce内容
# stat testfile
File: ‘testfile’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 100675864 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-12-08 13:16:50.949969456 +0800
Modify: 2019-12-08 13:16:50.949969456 +0800
Change: 2019-12-08 13:16:50.949969456 +0800
file命令
file [OPTION][-f FILE][-m...][文件或目录...]
参数:
-b 列出辨识结果时,不显示文件名称。
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-f FILE 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。
-L 直接显示符号连接所指向的文件的类别。
-m 指定魔法数字文件。
-v 显示版本信息。
-z 尝试去解读压缩文件的内容。
[文件或目录...] 要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。
实例:
显示文件类型:
[root@localhost ~]# file install.log
install.log: UTF-8 Unicode text
[root@localhost ~]# file -b install.log <== 不显示文件名称
UTF-8 Unicode text
[root@localhost ~]# file -i install.log <== 显示MIME类别。
install.log: text/plain; charset=utf-8
[root@localhost ~]# file -b -i install.log
text/plain; charset=utf-8
显示符号链接的文件类型
[root@localhost ~]# ls -l /var/mail
lrwxrwxrwx 1 root root 10 08-13 00:11 /var/mail -> spool/mail
[root@localhost ~]# file /var/mail
/var/mail: symbolic link to `spool/mail'
[root@localhost ~]# file -L /var/mail
/var/mail: directory
[root@localhost ~]# file /var/spool/mail
/var/spool/mail: directory
[root@localhost ~]# file -L /var/spool/mail
/var/spool/mail: directory
touch命令
touch [OPTION]... FILE...
选项
-a 改变档案的读取时间记录。
-m 改变档案的修改时间记录。
-c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
-f 不使用,是为了与其他 unix 系统的相容性而保留。
-r 使用参考档的时间记录,与 --file 的效果一样。
-d 设定时间与日期,可以使用各种不同的格式。
-t 设定档案的时间记录,格式与 date 指令相同。
--no-create 不会建立新档案。
--help 列出指令格式。
--version 列出版本讯息。
实例
[root@localhost ~]# ls -l testfile #查看文件当前时间
-rw-r--r--. 1 root root 0 Dec 8 13:27 testfile
[root@localhost ~]# touch testfile #修改文件时间属性,如果文件不存在则创建文件
[root@localhost ~]# ls -l testfile #查看更改后的时间
-rw-r--r--. 1 root root 0 Dec 8 13:28 testfile
cp命令
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
选项
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。
-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件
实例
[root@localhost ~]# tree /var/log/
/var/log/
├── anaconda
│ ├── anaconda.log
│ ├── ifcfg.log
│ ├── journal.log
│ ├── ks-script-j6_QRs.log
│ ├── packaging.log
│ ├── program.log
│ ├── storage.log
│ ├── syslog
│ └── X.log
├── audit
│ └── audit.log
├── boot.log
├── btmp
├── chrony
├── cron
├── dmesg
├── dmesg.old
├── firewalld
├── grubby_prune_debug
├── lastlog
├── maillog
├── messages
├── rhsm
├── secure
├── spooler
├── tallylog
├── tuned
│ └── tuned.log
├── vmware-network.1.log
├── vmware-network.2.log
├── vmware-network.log
├── vmware-vgauthsvc.log.0
├── vmware-vmsvc.log
├── wtmp
└── yum.log
cp -r /var/log /tmp/ #保留log目录的层级关系复制到/tmp下
[root@localhost ~]# tree /tmp/log/
/tmp/log/
├── anaconda
│ ├── anaconda.log
│ ├── ifcfg.log
│ ├── journal.log
│ ├── ks-script-j6_QRs.log
│ ├── packaging.log
│ ├── program.log
│ ├── storage.log
│ ├── syslog
│ └── X.log
├── audit
│ └── audit.log
├── boot.log
├── btmp
├── chrony
├── cron
├── dmesg
├── dmesg.old
├── firewalld
├── grubby_prune_debug
├── lastlog
├── maillog
├── messages
├── rhsm
├── secure
├── spooler
├── tallylog
├── tuned
│ └── tuned.log
├── vmware-network.1.log
├── vmware-network.2.log
├── vmware-network.log
├── vmware-vgauthsvc.log.0
├── vmware-vmsvc.log
├── wtmp
└── yum.log
mv命令
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
选项
-i: 若指定目录已有同名文件,则先询问是否覆盖旧文件;
-f: 在 mv 操作要覆盖某已有的目标文件时不给任何指示;
实例
将文件 aaa 更名为 bbb :
[root@localhost ~]# touch aaa
[root@localhost ~]# mv aaa bbb
将info目录放入logs目录中。注意,如果logs目录不存在,则该命令将info改名为logs。
[root@localhost ~]# ls
bbb info
[root@localhost ~]# mv info/ log
[root@localhost ~]# ls
bbb log
再如将/tmp/log/下的所有文件和目录移到当前目录下,命令行为:
[root@localhost ~]# mv /tmp/log/* .
[root@localhost ~]# ls
anaconda bbb btmp cron dmesg.old grubby_prune_debug log messages secure tallylog vmware-network.1.log vmware-network.log vmware-vmsvc.log yum.log
audit boot.log chrony dmesg firewalld lastlog maillog rhsm spooler tuned vmware-network.2.log vmware-vgauthsvc.log.0 wtmp
rm命令
rm [OPTION] FILE...
选项
-i 删除前逐一询问确认。
-f 强制删除,不提示用户。
-r 将目录及以下之档案亦逐一删除。
实例
#询问删除
[root@localhost ~]# rm -i messages
rm: remove regular file ‘messages’?
#删除目录
[root@localhost ~]# rm -r log/
rm: remove directory ‘log/’? y
#强制删除目录或文件,不提示
[root@localhost ~]# rm -rf log/
[root@localhost ~]# rm -rf messages