Linux——文件操作

Making A File

  • 创建文件的方式有好几种,其中touch就是一种。touch命令将会创建一个空文件,比如touch file.txt会在当前目录下创建一个空的file文本文件。之后我们可以对这个文件进行编辑。
~$ touch test.txt

Standard Streams

  • 我们可以通过echo命令来打印文本信息,比如输入echo “Dataquest is awesome”,将会打印Dataquest is awesome。这个文本将会打印到一个名为标准输出(standard output或者stdout)的流中。从标准输入(standard input (stdin))流中获取输入信息,当程序运行出错时,将会把错误信息写入到标准差流(standard error (stderr))中。
  • 通常stdout和stderr会被显示在显示屏中,而标准输入将会从键盘输入。在这个例子中,echo是从stdin(键盘)中获取一个字符串,然后将其打印到stdout中,默认情况下,我们会看到这个stdout流,因为它被显示在显示屏上。整个交互的过程如下:

    这里写图片描述

使用stdout,stderr,stdin这三个标准流的原因是这可以使得接口抽象化。一个程序不用关心它是从文件,键盘,或者其他什么地方获取输入,也不用关心它的输出将会被显示,或者被存储在文件,或者其他什么地方。

~$ echo "All bears should juggle"                                       
All bears should juggle 

Redirection

  • 前面提到程序不用关心标准流去向何处,但是我们可以重定向(redirect )标准流以将它们连接到不同的来源。比如上面那个输出流,我们可以将其连接到一个文件,他就不会打印到屏幕上,而会存储在一个文件中。
  • 我们利用 > 这个符号进行重定向,比如echo “Dataquest is awesome” > dataquest.txt这条语句首先将Dataquest is awesome写到stdout中,然后重定向stdout到dataquest.txt中,最后的结果就是Dataquest is awesome这条语句将会被写入到dataquest.txt文件中。
~$ echo "All bears should juggle" > test.txt 
  • 上面这条语句将All bears should juggle写入到我们前面创建的空文件test.txt中。

Editing A File

  • 当然我们也可以直接在终端中编辑一个文件,而不用使用重定向。最简单的编辑命令是nano。nano test.txt将会打开test.txt进行编辑。输入ctrl+x将会停止编辑,当你停止时,系统会提示你是否保存,如果保存就输入Y,按entet就可以保存你的修改了。
~$ nano test.txt
# 然后就是在文件中做修改

File Permissions

在Unix中,每个文件和文件夹都有相关的权限。这些权限有三个范围:

  • owner – the user who created the file or folder.
  • group – users in the owner’s group. Users on unix systems can be placed into groups.
  • everyone – all other users on the system who aren’t the user or in
    the user’s group.

每个范围可以有三种权限:

  • read(r) – The ability to see what’s in a file. If defined on a folder, the ability to see what files are in a folder.
  • write(w) – The ability to modify a file. If a folder, the ability to delete, modify, and rename files in the folder.
  • execute(e) – The ability to run a file. Some files are executable, and need this permission to be run.

你可以通过ls -l命令来查看文件和文件夹的权限。比如:

 ~$ ls -l                                                          
total 4                                                           
-rw-r--r-- 1 dq dq 1 May  4 08:16 test.txt  
'''
# 这几个rw的对应关系如下:
-         rw-   r--    r--
Ignore    User  Group  Everyone
'''

Octal Notation

对于权限可以用八进制表示法(Octal Notation):

  • — ——no permissions, corresponds to 0.
  • –x —— execute only permission, corresponds to 1.
  • -w- —— write only permissions, corresponds to 2.
  • -wx —— write and execute permissions, corresponds to 3.
  • r– —— read only permissions, corresponds to 4.
  • r-x —— read and execute permissions, corresponds to 5.
  • rw- —— read and write permissions, corresponds to 6.
  • rwx —— grants read, write, and execute permissions, corresponds to 7.

其实就是x=1,w=2,r=4

  • 通过stat命令可以将-rw-r–r–转为0644
~$ stat test.txt                                                  
  File: ‘test.txt’                                                
  Size: 1               Blocks: 8          IO Block: 4096   regular file                                                            
Device: 100003h/1048579d        Inode: 2929        Links: 1       
Access: (0644/-rw-r--r--)  Uid: ( 1000/      dq)   Gid: ( 1000/dq)                                                            
Access: 2016-05-04 08:16:47.656025719 +0000                       
Modify: 2016-05-04 08:16:45.256025719 +0000                       
Change: 2016-05-04 08:16:45.256025719 +0000                       
 Birth: -  
  • 上面结果中从Acess中可以看到0644

Modifying File Permissions

  • 现在知道上面是文件权限了,继续学习如何修改文件的权限。我们可以使用chmod命令来实现这个功能。比如chmod 0664 test.txt意味着给owner用户读和写的权限。
~$ chmod 0760 test.txt 
  • 上面这段代码给予owner读写执行的权限,给予group读写的权限,不给everyone任何权限。

Moving Files

  • 通过mv这个命令可以将文件移动到其他目录下。比如输入mv test.txt /dq将会把test.txt移动到/dq目录下。这样做的前提是test.txt在当前目录下,否则要使用绝对路径。
~$ mkdir test                                                     
~$ mv test.txt test  
  • 上面这段代码在用户主目录下创建了一个test子目录,而test.txt是在用户主目录下的,因此可以直接mv过去。

Copying Files

  • 除了移动文件,我们还需要复制文件,我们利用cp命令可以复制文件。比如cp test.txt test2.txt的意思是将test.txt复制了一个副本名为test2.txt。
~$ cd test                                                        
~/test$ cp test.txt test2.txt   

File Extensions

  • Windows系统中不同的文件用扩展名区别,而Linux中不同的文件用媒体类型(media types)来区别,也叫MIME types。比如说MIME types是application/pdf表示该文件是pdf,MIME type 是image/png表示该文件是png图片。MIME type 字符串的前一部分(application, image)是类型,后一部分(pdf, png)是子类型。
  • MIME types存储在文件的metadata中,是作为文件的一部分存储的。因此linux系统才可以以合适的方式打开文件,当然你可以重命名文件或者移除文件的扩展名,并且你会经常看到没有扩展名的文件,比如test.
~$ ls                                                             
test                                                              
~$ cd test                                                        
~/test$ ls                                                        
test2.txt  test.txt                                               
~/test$ cd                                                        
~$ mv test/test.txt test/test_no_extension                        
~$ cd test                                                        
~/test$ ls                                                        
test2.txt  test_no_extension  
  • 上面这段代码将test.txt文件移动到另一个文件中去,并且这个新的文件没有扩展名。与前面mv不同的是这次的第二个参数是文件而前面是文件夹,在这里移动后,源文件没有了,新文件的内容和源文件相同,名称是第二个参数的名称。这也可以表明在Linux中文件是可以没有扩展名的。

Deleting A File

  • 在前面提到可以用rmdir删除一个目录,此处用rm可以删除一个文件。
~$ rm /home/dq/test/test2.txt   

The Root User

  • Linux系统有一个特殊的用户叫做root用户,你可以用sudo来执行root命令,将sudo添加到你要执行的命令前面即可。比如sudo rm test.txt这个命令将会切换为root用户然后进行删除。通常在当前用户没有删除这个文件的权限的时候切换到root用户进行这个操作,因为root用户默认对所有的文件都有权限。
  • 当然你切换到root用户是需要密码的,不然设置root用户也没有意义。
~$ sudo mkdir tt                                                  
sudo: unable to change to root gid: Operation not permitted 
  • 上面这段代码显示当前linux不允许执行sudo指令
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值