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

 

 

 

posted @ 2019-12-08 14:03  Lyvin.zhang  阅读(19)  评论(0编辑  收藏  举报