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指令