linux管理Windows文件,在 Linux的命令行下,像在 Windows环境下 一样操作管理文件和目录...

Linux 的哲学思想之一,一切皆文件,所以我们学习 Linux 处处要与文件目录打交道,熟悉它们是我们学好 Linux 的基本前提。

用户跟计算交互,是通过接口来实现的。而交互接口又分为两种:GUI 图形接口 和 CLI 命令行接口(在 Linux 默认是 Bash shell)。而我们 Linux 做为服务器,一般不会启用图形接口,因为从占用计算机资源,安全稳定等方面的考虑。所以,我们就不能像操作 windows 那样通过鼠标点击来完成跟计算机的交互的。我们系统提供了很多命令,每个命令可以完成相应的功能,如:文件目录查看、创建、移动、删除、重命名。其实,GUI 是把这些命令进行了包装而以。在 Linux 环境下,我们可以在命令提示符下 [root@Node1 ~]# 键入 command 来完成某项功能。我们使用的 CLI 是 Bash shell.

一、文件的管理

Linux 其中有一个重要的哲学思想,一切皆文件。所以,我们学会Linux 文件的管理,是管理好 Linux 系统的最起码的前提。Windows系统中,区别不同格式的文件依据是文件的后缀名,而 Linux 中截然不同的。

文件的操作包括:创建文件、编辑修改文件、移动文件、删除文件、文件的重命名等一系列操作。在 Linux 系统中目录也是文件中的一种,我们称之为目录文件。所以,目录的管理与文件的管理有很多相似之处。

1、编辑文件

编辑文件,就要使用到相应的应用程序(文件编辑器),大家都知道不同的文档编辑器支持的文件格式不尽相同。我们只有知道文件的格式了,才能使用支持该格式的编译器打开被编辑的文件再进行编辑操作。如果,我们使用不支持二进制格式的编辑器,打开二进制文档就会出现乱码,严重的话,还会损坏文件,这是非常严重的。

我们怎样根据文件格式,选择编辑文件的应用程序呢?

(1)、对于命令类文件,我们要先使用【which】获知 command 在哪里,再查看文件的类型[root@Node1 ~]# which httpd

/usr/sbin/httpd

(2)、使用【file】查看文件的格式[root@Node1 ~]# file /usr/sbin/httpd

/usr/sbin/httpd: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

(3)、分析文件格式,选择文件编辑器打开文件进行相应操作

通过第二步,使用【file】可以获取一个文件的格式,再根据文件格式选择相应的编辑器打开该文件

使用【file】查看 /usr/sbin/httpd 得知,该文件是 ELF 格式的二进制文件。我们不能使用文本编    辑器查看该文件的。

ELF 格式是 Linux 现在采用的执行文件的标准格式。不同操作系统所使用的执行文件的格式是不同    的。所以在 Linux 编译的程序移植到 windows 一般是无法运行的。

ELF 格式的二进制执行文件是经过一系统过程:

对程序的源文件做预处理(cpp) ----> 汇编 ----> 链接 ---> 可执行文件。 在 Linux 中编译源程     序,是由 GCC 调用它们来完成

源程序的编译操作的。

(4)、Linux 中常用的文件编辑器vi      文本编辑器

nano    文本编辑器

2、常见的对文件的操作如:创建、复制、移动和删除。

数据的覆盖(overwrite)、删除都会对数据造成丢失,平时我们在 windows 下复制文件时,如果目标文件已经存在,它都会友好地提示,是否覆盖目录文件。我们的 Linux 也有这样的功能。使用命令: mv、cp、rm 对文件进行操作时,有时会对文件数据进行损坏(覆盖、删除),当使用这些命令操作文件时,对数据造成损坏时,会进入交互模式(询问用户是否进行该操作),用户是否进行该操作。使用该方式可以在一定范围内避免了,用户误操作造成数据的损坏。mv 、cp、rm 命令都有 -i 选项,该选项是启用交互模式的。如果用户确定知道该目录中的所有文件内容都可以删除的,这些命令也提供了 -f 选项,强制进行该操作,不进入交互模式,该选项,对于一下子删除多个文件是很有方便的,但有风险。[root@node2 mytest4]# mv ../mytest3/inittab /tmp/mytest4/

mv: overwrite `/tmp/mytest4/inittab'? y

---------> 交互模式,询问用户是否覆盖 /tmp/mytest4/inittab 文件。

对文件的操作常用到的命令如下所述:touch      新建空文件

vi         使用 vi 编辑器打开不存在的文件也会新建文件的

mv         移动/重命令文件

cp         复制/重命名文件

rm         删除文件

(1)创建:

创建空文件可以使用【touch】或 使用 vi 编辑器。

(2)复制:

【cp】命令的使用格式cp   [OPTION]... SOURCE... DIRECTORY

命令   选项       源         目标

【cp】 命令有一个很有意思有选项,可以比较源文件与目标文件相比是否发生改变,改变就复制。

常用于备份。

复制操作,如何使用的思考?

对于文件的复制操作,我们要分析源(复制源),目标(使用cp 复制数据到哪里去)和复制数据的要求。

源分为文件和目录

复制,我们要分析,源是文件还是目录且目录中是否有子目录?

如果我们对目录(源)进行复制操作,如果目录中还有子目录,子目录中还有文件,我们要使用递归复制操作。 cp 的 -r|R 选项.

既然源是目录了,目标就不可能是一个文件。再分析,复制要求,下面对各种要求进行复制分析:

A)、如果,保留源的属主、属组等属性,要使用 -a 选项(常用于备份)或 -P ,但是它们有区别。

B)、如果,不修改被复制的目录名称,我们在复制前,要把目标目录创建好。

C)、如果,只复制源目录中的数据文件和目录文件,不复制源(目录)。复制操作前不要创建目标(目录)

例子:

复制要求:

复制目录中的文件并重命名源目录名称

把目录中的所有文件,都复制到另个一个目录(目标目录不存在,就创建目录),如果目录(目标存在)则把源目录及目录中内容一并复制到目录目录中

A)、目标目录存在的情况下[root@Node1 ~]# mkdir /home/user

[root@Node1 ~]# ll /home/ | grep user

drwxr-xr-x. 2 root     root   4096 Jul  4 19:33 user

[root@Node1 ~]# cp -a /etc/skel/ /home/user/

[root@Node1 ~]# tree -a /home/user/

/home/user/

└── skel

├── .bash_logout

├── .bash_profile

├── .bashrc

├── .gnome2

└── .mozilla

├── extensions

└── plugins

5 directories, 3 files

B)、目标目录不存在的情况下[root@Node1 ~]# rm -rf /home/user

[root@Node1 ~]# ll /home/ | grep user

[root@Node1 ~]# cp -a /etc/skel/ /home/user

[root@Node1 ~]# tree -a /home/user/

/home/user/

├── .bash_logout

├── .bash_profile

├── .bashrc

├── .gnome2

└── .mozilla

├── extensions

└── plugins

4 directories, 3 files

源为单个文件的情况分析:

如果源是文件,目标可以是文件或目录。分析复制要求。

A)、复制结果要求:复制并重命名文件,则做文件的复制操作前,目标一定不是存在。

B)、复机结果要求:复制并覆盖目标文件,则做文件的复制操作之前,目标文件一定是存在。

C)、复制结果要求:复制文件到一个指定目录下,如果目标目录不存在,则显示错误。

cp 复制文件时是不帮助创建目录的(复制目录时,如果目标目录不存在帮助创建目录)。所以我         们要先创建目标目录[root@node2 ~]# cp /etc/inittab /tmp/mytest3/

cp: cannot create regular file `/tmp/mytest3/': Is a directory

[root@node2 ~]# mkdir /tmp/mytest3

[root@node2 ~]# cp /etc/inittab /tmp/mytest3/

[root@node2 ~]# echo $?

0

源为多个文件,目标必须是目录。要先创建目标。[root@node2 ~]# cp /etc/inittab  /etc/fstab  /tmp/mytest4

cp: target `/tmp/mytest4' is not a directory

[root@node2 ~]# cp /etc/inittab  /etc/fstab  /tmp/mytest4/

cp: target `/tmp/mytest4/' is not a directory

[root@node2 ~]# mkdir /tmp/mytest4

[root@node2 ~]# cp /etc/inittab  /etc/fstab  /tmp/mytest4/

[root@node2 ~]# echo $?

0

(3)移动:

【mv】move (rename) files 移动或重命名。类似于 windows 中剪切操作。它是会删除源的,如果源是目录且目录中有子目录,不需要使用递归。也会把目录中所有的数据 move 掉。

分析各种移动源,的要求:

A)、如果要求,移动并重命名源(不管源是目录还是文件),使用【mv】操作文件/目录前,目标是           不可能存在的。

B)、如果源是目录,移动结果要求对源进行重命名操作,使用【mv】操作之前,目标是不可以存           在的。该命令会帮助创建目标目录的。

C)、如果源是目录,移动结果要求把源移动到另外一个目录中,不需要对源重命名,则使【mv】           操作之前,目标目录一定是存在的。如下例子。[root@node2 mytest4]# mkdir ../mytest7

[root@node2 mytest4]# mv ../mytest3  ../mytest7/

[root@node2 mytest4]# ll /tmp/mytest7/

total 8

drwxr-xr-x 2 root root 4096 Jul  5 07:28 mytest3

(4)删除:

【rmdir】Remove the DIRECTORY(ies), if they are empty. 只能移除空目录。

【rm】remove files or directories 删除文件或目录。

【rm】命令的使用格式:rm -r|-R director  递归强制删除目录中的内容

rm -r|-R director  交互式删除目录中的内容,所以 -r 或 -R 选项常用于删除目录中的内容。

rm -i|-f file      交互式删除文件或强制删除文件

注意:

该命令默认选项是不会删除根目录(/)的。

3、应用程序,可以往一个文件中写数据,说明该用户具有该文件的写(w)权限。应用程序可以读该文件,说明该用户具有该文件的读(r)权限。该文件可以被内核加载到内存中,并以某一用户的身份在CPU上运行起来,说明该用户具有该文件的执行权限。而 linux 是多用户多任务的操作系统,文件目录还具有属主、属组属性。 用户具有读(r)权限,才可以使用【ls】命令 列出该目录的文件名列表。[admin@Node1 home]$ ll | grep system

drwx------. 4 system   system 4096 Jul  4 16:39 system

[admin@Node1 home]$ ll ./system/

ls: cannot open directory ./system/: Permission denied

说明:

/home/system/ 目录的权限是 700, 属组、基它用户使用 ls 命令是不可以列出该目录的文件名列表的。

那么怎么查看文件这些属性呢?

使用【ls】命令来实现[root@Node1 ~]# ll -h /root/

total 72K

-rw-r--r--. 1 root root  551 Jul  3 17:28 5.1.txt

-rw-------. 1 root root 2.1K Jun 30 11:56 anaconda-ks.cfg

-rw-r--r--. 1 root root   17 Jul  3 17:08 head

-rw-r--r--. 1 root root  42K Jun 30 11:56 install.log

-rw-r--r--. 1 root root 9.8K Jun 30 11:54 install.log.syslog

-rw-r--r--. 1 root root    0 Jul  3 17:26 tr

-h  像 windows 中,查看详细信息。

-S  显示的文件按文件大小排列,一般这样使用【ll -hS】[root@node2 ~]# ll -Sh /etc/

total 3.3M

-rw-r--r--  1 root   root   789K Jan  7  2007 termcap

-rw-r--r--  1 root   root   354K Feb 23  2006 services

-rw-r--r--  1 root   root   136K Jul  1 21:38 prelink.cache

-rw-r--r--  1 root   root    91K Jun  4  2007 Muttrc

显示 /etc 中以 p 打头的文件(目录也是文件,称为目录文件),使用 -d  参数不显示目录中的内容,注意使用“通配”的时候才使用,【ll】会显示匹配到的目录中的所有内容,如不想显示,可以使用 -d 选项。[root@node2 ~]# ll /etc/p*

-rw-r--r-- 1 root root     12 Jan  6  2007 /etc/pam_smb.conf

-rw-r--r-- 1 root root   1623 Jun 22 15:25 /etc/passwd

/etc/pam.d:

total 336

-rw-r----- 1 root daemon 390 Jan 27  2010 atd

-rw-r--r-- 1 root root    97 Sep 27  2009 authconfig

-rw-r--r-- 1 root root    97 Sep 27  2009 authconfig-tui

...

/etc/pango:

total 24

drwxr-xr-x 2 root root  4096 Apr  5 00:13 i686-redhat-linux-gnu

-rw-r--r-- 1 root root 11446 Sep  3  2009 pangox.aliases

...

[root@node2 ~]# ll -d /etc/p*

drwxr-xr-x 2 root root   4096 Apr  5 00:15 /etc/pam.d

drwxr-xr-x 2 root root   4096 Apr  5 00:13 /etc/pam_pkcs11

-rw-r--r-- 1 root root     12 Jan  6  2007 /etc/pam_smb.conf

drwxr-xr-x 3 root root   4096 Apr  5 00:13 /etc/pango

-rw-r--r-- 1 root root   1623 Jun 22 15:25 /etc/passwd

二、目录的管理:

1、创建目录

使用【mkdir】

该命令结合 Bash shell 的“命令行展开特性{}”可以创建分层的目录。我们从零构建Linux 系统(LFS)时,要创建很多目录,该种方式无疑是最好的选择。[root@Node1 ~]# mkdir  -pv /tmp/test_mkdir/{boot,root,etc,bin,sbin,lib,var,tmp,usr/{bin,etc,include,lib,local,sbin,share,share,src}}

mkdir: created directory `/tmp/test_mkdir'

mkdir: created directory `/tmp/test_mkdir/boot'

mkdir: created directory `/tmp/test_mkdir/root'

mkdir: created directory `/tmp/test_mkdir/etc'

mkdir: created directory `/tmp/test_mkdir/bin'

mkdir: created directory `/tmp/test_mkdir/sbin'

mkdir: created directory `/tmp/test_mkdir/lib'

mkdir: created directory `/tmp/test_mkdir/var'

mkdir: created directory `/tmp/test_mkdir/tmp'

mkdir: created directory `/tmp/test_mkdir/usr'

mkdir: created directory `/tmp/test_mkdir/usr/bin'

mkdir: created directory `/tmp/test_mkdir/usr/etc'

mkdir: created directory `/tmp/test_mkdir/usr/include'

mkdir: created directory `/tmp/test_mkdir/usr/lib'

mkdir: created directory `/tmp/test_mkdir/usr/local'

mkdir: created directory `/tmp/test_mkdir/usr/sbin'

mkdir: created directory `/tmp/test_mkdir/usr/share'

mkdir: created directory `/tmp/test_mkdir/usr/src'

[root@Node1 ~]# tree /tmp/test_mkdir/

/tmp/test_mkdir/

├── bin

├── boot

├── etc

├── lib

├── root

├── sbin

├── tmp

├── usr

│   ├── bin

│   ├── etc

│   ├── include

│   ├── lib

│   ├── local

│   ├── sbin

│   ├── share

│   └── src

└── var

2、删除目录

【rmdir】Remove the DIRECTORY(ies), if they are empty. 只能移除空目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值