Linux shell 学习笔记(1)— 文件和目录(查看、创建、复制、软硬链接、重命名及删除操作)
1. 启动 shell
/etc/passwd 文件包含了所有系统用户账户列表以及每个用户的基本配置信息:
christine:x:501:501:Christine Bresnahan:/home/christine:/bin/bash
其中 /bin/bash 该字段指定了用户使用的 shell 程序。在前面的 /etc/passwd 样例条目中,用户 christine 使用 /bin/bash 作为自己的默认 shell 程序。这意味着当 christine 登录 Linux 系统后,bash shell会自动启动。
man 命令:
当使用 man 命令查看命令手册页的时候,这些手册页是由分页程序(pager)来显示的。可以通过点击空格键进行翻页,或是使用回车键逐行查看。另外还可以使用箭头键向前向后滚动手册页的内容,可以点击q键退出。
大多数命令都可以接受 -help 或 --help 选项。
2. 文件系统
Linux 使用正斜线(/)而不是反斜线(\)在文件路径中划分目录。在 Linux 中,反斜线用来标识转义字符。
绝对文件路径
绝对文件路径总是以正斜线(/)作为起始,指明虚拟文件系统的根目录。
相对文件路径
相对文件路径允许用户指定一个基于当前位置的目标文件路径。相对文件路径不以代表根目
录的正斜线(/)开头,而是以目录名(如果用户准备切换到当前工作目录下的一个目录)或是一个特殊字符开始。
有两个特殊字符可用于相对文件路径中:
- 单点符(.),表示当前目录;
- 双点符(…),表示当前目录的父目录;
3. 文件和目录列表
ls 命令输出的列表是按字母排序的(按列排序而不是按行排序)
带 -F 参数的 ls 命令轻松区分文件和目录
$ ls -F
Desktop/ Downloads/ Music/ Pictures/ Templates/ Videos/
Documents/ examples.desktop my_script* Public/ test_file
$
-F 参数在目录名后加了正斜线(/),在可执行文件(比如上面的my_script文件)的后面加个星号。在Linux上,隐藏文件通常是文件名以点号开始的文件,-a 参数可将其显示出来。
-R 参数是 ls 命令可用的另一个参数,叫作递归选项。它列出了当前目录下包含的子目录中的文件。
-l 参数会产生长列表格式的输出,默认显示的是文件修改时间
$ ls -l
total 48
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Desktop
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Documents
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Downloads
-rw-r--r-- 1 christine christine 8980 Apr 22 13:36 examples.desktop
...
每一行都包含了关于文件(或目录)的下述信息:
文件类型,比如目录(d)、文件(-)、字符型文件(c)或块设备(b);
文件的权限;
文件的硬链接总数;
文件属主的用户名;
文件属组的组名;
文件的大小(以字节为单位);
文件的上次修改时间;
文件名或目录名。
当用户指定特定文件的名称作为过滤器时,ls 命令只会显示该文件的信息。
$ ls -l my_script
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script
$
ls 命令能够识别标准通配符,并在过滤器中用它们进行模式匹配:
- 问号(?)代表一个字符;
- 星号(*)代表零个或多个字符;
- 中括号([ ])表示一个字符位置并给出多个可能的选择;
- 感叹号 (!) 表示将将不需要的内容排除在外;
$ ls -l my_s*t
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_scrapt
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script
$
$ ls -l my_scr[ai]pt
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_scrapt
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script
$
$ ls -l f[a-i]ll
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fall
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fell
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fill
$
$ ls -l f[!a]ll
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fell
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fill
-rw-rw-r-- 1 christine christine 0 May 21 13:44 full
$
4. 处理文件
4.1 创建文件
touch filename
touch 命令创建了你指定的新文件,并将你的用户名作为文件的属主。注意,文件的大小是零,因为touch命令只创建了一个空文件。
4.2 复制文件
cp source destination
当 source 和 destination 参数都是文件名时,cp 命令将源文件复制成一个新文件,并且以destination 命名。新文件就像全新的文件一样,有新的修改时间。destination 可以为目录。
cp 命令的 -R 参数威力强大。可以用它在一条命令中递归地复制整个目录的内容。
$ ls -Fd *ScriptsScripts/$ ls -l Scripts/total 25-rwxrw-r-- 1 christine christine 929 Apr 2 08:23 file_mod.sh-rwxrw-r-- 1 christine christine 254 Jan 2 14:18 SGID_search.sh-rwxrw-r-- 1 christine christine 243 Jan 2 13:42 SUID_search.sh$$ cp -R Scripts/ Mod_Scripts$ ls -Fd *ScriptsMod_Scripts/ Scripts/$ ls -l Mod_Scriptstotal 25-rwxrw-r-- 1 christine christine 929 May 21 16:16 file_mod.sh-rwxrw-r-- 1 christine christine 254 May 21 16:16 SGID_search.sh-rwxrw-r-- 1 christine christine 243 May 21 16:16 SUID_search.sh$
在执行 cp –R 命令之前,目录 Mod_Scripts 并不存在。它是随着 cp –R 命令被创建的,整个Scripts 目录中的内容都被复制到其中。注意,在新的 Mod_Scripts 目录中,所有的文件都有对应的新日期。Mod_Scripts 目录现在已经成为了 Scripts 目录的完整副本。
ls -d 只列出目录本身的信息,不列出其中的内容。
$ ls -Fd public/
public//$ ls -F public/
2018/ baidusitemap.xml css/ index.html search.xml
archives/ categories/ favicon.ico js/ sitemap.xml
atom.xml CNAME fonts/ page/ tags/
4.3 链接文件
如需要在系统上维护同一文件的两份或多份副本,除了保存多份单独的物理文件副本之外,还可以采用保存一份物理文件副本和多个虚拟副本的方法。这种虚拟的副本就称为链接。链接是目录中指向文件真实位置的占位符。
在Linux中有两种不同类型的文件链接:
符号链接-软链接
符号链接就是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同。
要为一个文件创建符号链接,原始文件必须事先存在。然后可以使用ln命令以及**-s选项**来创建符号链接。
$ ls -l data_file -rw-rw-r-- 1 christine christine 1092 May 21 17:27 data_file $ $ ln -s data_file sl_data_file $ $ ls -l *data_file -rw-rw-r-- 1 christine christine 1092 May 21 17:27 data_file lrwxrwxrwx 1 christine christine 9 May 21 17:29 sl_data_file -> data_file $
在上面的例子中,注意符号链接的名字sl_data_file位于ln命令中的第二个参数位置上。显示在长列表中符号文件名后的->符号表明该文件是链接到文件data_file上的一个符号链接。
符号链接sl_data_file只有9个字节,而data_file有1092个字节。这是因为sl_data_file仅仅只是指向data_file而已。它们的内容并不相同,是两个完全不同的文件。
另一种证明链接文件是独立文件的方法是查看 inode 编号。文件或目录的inode编号是一个用于标识的唯一数字,这个数字由内核分配给文件系统中的每一个对象。要查看文件或目录的inode编号,可以给ls命令加入-i参数。
$ ls -i *data_file 296890 data_file 296891 sl_data_file $
硬链接
硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言是同一个文件。引用硬链接文件等同于引用了源文件。要创建硬链接,原始文件也必须事先存在,只不过这次使用 ln 命令时不再需要加入额外的参数了。
$ ls -l code_file -rw-rw-r-- 1 christine christine 189 May 21 17:56 code_file $ $ ln code_file hl_code_file $ $ ls -li *code_file 296892 -rw-rw-r-- 2 christine christine 189 May 21 17:56 code_file 296892 -rw-rw-r-- 2 christine christine 189 May 21 17:56 hl_code_file $
带有硬链接的文件共享inode编号。这是因为它们终归是同一个文件。还要注意的是,链接计数(列表中第三项)显示这两个文件都有两个链接。另外,它们的文件大小也一模一样。
4.4 重命名文件
在Linux中,重命名文件称为移动(moving),mv命令可以将文件和目录移动到另一个位置或重新命名。
a. 可以使用mv来移动文件的位置;
b. 可以使用mv命令移动文件位置并修改文件名称;
c. 可以使用mv命令移动整个目录及其内容;
在使用 mv 的过程中,文件的时间戳和inode编号都没有改变。改变的只有位置和名称。
4.5 删除文件
bash shell中删除文件的命令是rm,-i命令参数提示你是不是要真的删除该文件。bash shell中没有回收站或垃圾箱,文件一旦删除,就无法再找回。
$ rm -i fall
rm: remove regular empty file 'fall'? y
$
rm命令的另外一个特性是,如果要删除很多文件且不受提示符的打扰,可以用**-f参数强制删除。**
5. 处理目录
5.1 创建目录
在Linux中创建目录很简单,用mkdir命令即可
要想同时创建多个目录和子目录,需要加入-p参数:
$ mkdir -p New_Dir/Sub_Dir/Under_Dir
$
$ ls -R New_Dir
New_Dir:
Sub_Dir
New_Dir/Sub_Dir:
Under_Dir
New_Dir/Sub_Dir/Under_Dir:
$
5.2 删除目录
默认情况下,rmdir命令只删除空目录,要删除含有整个文件的目录,可以使用:
a、可以在整个非空目录上使用rm命令。使用**-r选项**使得命令可以向下进入目录,删除其中的文件,然后再删除目录本身。
b、一口气删除目录及其所有内容的终极大法就是使用带有-r参数和-f参数的rm命令
6. 查看文件
6.1 查看文件类型
file命令能够探测文件的内部,并决定文件是什么类型
$ file my_file
my_file: ASCII text
file命令不仅能确定文件中包含的文本信息,还能确定该文本文件的字符编码,ASCII。
$ file New_Dir
New_Dir: directory
可以使用file命令作为另一种区分目录的方法
$ file sl_data_file
sl_data_file: symbolic link to 'data_file'
file命令甚至能够告诉你它链接到了哪个文件上
$ file my_script
my_script: Bourne-Again shell script, ASCII text executable
file命令对脚本文件的返回结果。尽管这个文件是ASCII text,但因为它是一个脚本文件,所以可以在系统上执行(运行)
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.24,
[...]
file命令能够确定该程序编译时所面向的平台以及需要何种类型的库。
6.2 查看整个文件
cat 命令
-n 参数会给所有的行加上行号
$ cat -n test1 1 hello 2 3 This is a test file. 4 5 6 That we'll use to test the cat command.
-b 参数只给有文本的行加上行号
$ cat -b test1 1 hello 2 This is a test file. 3 That we'll use to test the cat command.
more 命令
more命令会显示文本文件的内容,但会在显示每页数据之后停下来。可以通过按空格键或回车键以逐行向前的方式浏览文本文件。浏览完之后,按q键退出。
less 命令
less命令的操作和more命令基本一样,一次显示一屏的文件文本。除了支持和more命令相同的命令集,它还包括更多的选项。其中一组特性就是less命令能够识别上下键以及上下翻页键(假设你的终端配置正确)。
6.3 查看部分文件
tail 命令
tail命令会显示文件最后几行的内容(文件的“尾部”)。默认情况下,它会显示文件的末尾10行。可以向tail命令中加入**-n参数来修改所显示的行数**。
$ tail -n 2 log_file
line19
Last line - line20
-f参数是tail命令的一个突出特性。它允许你在其他进程使用该文件时查看文件的内容。tail命令会保持活动状态,并不断显示添加到文件中的内容。
head 命令
head命令,会显示文件开头那些行的内容。默认情况下,它会显示文件前10行的文本:
它也支持-n参数,这样就可以指定想要显示的内容了。这两个命令都允许你在破折号后面输入想要显示的行数(即不需要 输入 -n 参数)
$ head -5 log_file
line1
line2
line3
line4
line5
Linux shell 学习笔记(1)— 文件和目录(查看、创建、复制、软硬链接、重命名及删除操作)相关推荐
- Linux shell 学习笔记(5)— 文件权限(添加、修改、删除用户及创建、修改群组)
1. Linux的安全性 Linux 安全系统的核心是用户账户.每个能进入 Linux 系统的用户都会被分配唯一的用户账户.用户对系统中各种对象的访问权限取决于他们登录系统时用的账户. 用户权限是通过 ...
- Linux shell 学习笔记(2)— 监测程序、磁盘空间和处理文件(ps -ef、top、kill、df、du 、grep、tar)
1. 监测程序 1.1 检查进程 默认情况下,ps 命令只会显示运行在当前控制台下的属于当前用户的进程. $ ps PID TTY TIME CMD 3081 pts/0 00:00:00 bash ...
- Linux shell 学习笔记(4)— linux 环境变量(全局变量、局部变量及变量持久化)
1. 环境变量概念及分类 bash shell 用一个叫作环境变量(environment variable)的特性来存储有关 shell 会话和工作环境的信息(这也是它们被称作环境变量的原因).这项 ...
- Linux shell 学习笔记(11)— 理解输入和输出(标准输入、输出、错误以及临时重定向和永久重定向)
1. 理解输入和输出 1.1 标准文件描述符 Linux 系统将每个对象当作文件处理.这包括输入和输出进程.Linux 用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一 ...
- Linux命令学习笔记(一)目录操作
目录操作 在桌面建立一个名为test的文件夹 clear 清除屏幕 pwd 查看当前工作目录 cd /home 进入 '/ home' 目录' cd ~ 打开当前用户目录 cd / 根目录 cd - ...
- 【Linux】Linux Shell 学习笔记:什么是Linux?
I Linux 简介 Linux系统简介 (biancheng.net) Linux和UNIX的关系及区别 (biancheng.net) Linux内核_百度百科 (baidu.com) [什么是 ...
- Linux shell 学习笔记(6)— vim 编辑器使用方法及技巧
1. 检查 vim 软件包 1.1 CentOS 发行版 $ alias vi alias vi='vim' $ $ which vim /usr/bin/vim $ $ ls -l /usr/bin ...
- APUE 学习笔记(三) 文件和目录
1. 文件类型 文件类型信息包含在 struct stat 里的 st_mode 成员 (1)普通文件,unix内核并不区分文本文件和二进制文件 (2)目录文件,这种文件包含了其他文件的名字以及指向这 ...
- Linux shell 学习笔记(8)— 使用结构化命令(if-then 语句、数值比较、字符串比较、文件比较、case 语句)
1. 使用 if-then 语句 最基本的结构化命令就是if-then语句.if-then语句有如下格式. if command then commands fi 或者 if command; t ...
最新文章
- 【行走的Offer收割机】记一位朋友斩获BAT技术专家Offer的面试经历
- 7-2 然后是几点 (C语言)
- Linux下使用rsync最快速删除海量文件的方法
- Linux Shell 脚本知识点
- Linux疑难杂症解决方案100篇(二十)-万字长文带你读懂正则表达式(建议收藏)
- iOS Application Security
- 【技术角度看问题之一】ARM到底是个啥?
- java关键字super_Java关键字(六)——super
- 新的特洛伊木马程序SectopRAT用以控制浏览器会话
- SSD 网络基本原理记录
- 官网USB读卡器移植(TF卡SDIO模式 + SPI-flash)
- 防止iOS自动识别数字为电话号码
- Android Studio记录一个错误:解析软件包时出现问题
- 清北学堂学习笔记 第一期
- JavaScript中getElementsByName
- 软件测试技术课程总结(五)软件测试流程
- python生成简单名片二维码(不带图片)
- RPF收付款核销与财务管理系统
- 一张纸一直对折,按顺序打印
- 微信测试是否被删软件,3个小妙招,教你悄无声息检测微信被删好友
热门文章
- restTemplate http请求报错:no suitable HttpMessageConverter found for response type and content type
- 2021-2027年中国医疗护理行业深度研究及发展趋势报告
- 2022-2028年中国顺丁橡胶行业发展模式分析及市场分析预测报告
- python2 安装faiss-gpu 报错 faiss/faiss/python/swigfaiss.i:241: Error: Unable to find ‘faiss/impl/platfo
- SpringBoot2.x 不反回空值属性
- Windows10快捷应用指令
- SpringCloud Alibaba微服务实战(二) - Nacos服务注册与restTemplate消费
- Pandas_transform的用法
- AIFramework框架Jittor特性(下)
- TensorFlow反向传播算法实现