Linux文件操作

Linux严格区分大小写,所有目录和文件名都要区分大小写

Linux的目录结构

image-20221027214128453

  • / 叫做根目录,是最顶级的目录
  • Linux只有一个顶级目录:根目录/,而Windows有多个顶级目录,如C盘、D盘等,Linux不分盘
  • 路径描述的层次关系同样适用/来表示,Windows用\表示目录的层次关系
  • /home/note/a.txt,表示根目录下的 home 文件夹内有 note 文件夹,内有 a.txt,第一个 / 表示根目录,其他的 / 表示不同目录层次的分隔符号

当前工作目录和HOME目录

  • HOME目录指:用户在系统内的专属目录,类似于Windows的用户文件夹
  • Linux终端(命令行)启动后默认将HOME目录作为当前工作的目录,类似于Windows powershell和cmd打开后命令提示符显示的路径是用户文件夹

Linux命令的基本格式

command [-options] [parameter]

ls命令

功能:列出文件夹信息

语法:ls [-l -h -a] [参数]

  • 选项:
    • -l,以列表形式查看,竖向显示
    • -h,配合-l,以易于阅读的形式,列出文件大小,如显示K、M、G等单位,而不是默认不显示单位
    • -a,显示隐藏文件
    • 同时使用多个选项,例如:ls -l -a ls -la ls -al 上述三种写法没有区别,表示同时应用-l和-a选项
  • 参数:被查看的文件夹的路径,不提供参数,表示查看当前工作目录

隐藏文件、文件夹

在Linux中以.开头的,均是隐藏的。

默认不显示出来,需要-a选项才可查看到。

pwd命令

pwd,即Print Work Directory,功能:展示当前工作目录

语法:pwd

pwd命令,没有选项,没有参数,直接使用即可

cd命令

cd,即Change Directory,功能:切换工作目录

语法:cd [参数]

参数:目标目录,要切换去的地方,不提供默认切换到当前登录用户HOME目录

  • 没有选项,只有参数,表示目标路径
  • 使用参数,切换到指定路径
  • 不使用参数,切换工作目录到当前用户的HOME

HOME目录

每一个用户在Linux系统中都有自己的专属工作目录,称之为HOME目录。

  • 普通用户的HOME目录,默认在:/home/用户名,home目录可以用 ~ 表示

  • root用户的HOME目录,在:/root

相对路径、绝对路径

  • 相对路径,不以 /开头的称之为相对路径

    相对路径表示以当前目录作为起点,去描述路径,如test/a.txt,表示当前工作目录内的test文件夹内的a.txt文件

  • 绝对路径,以/开头的称之为绝对路径

    绝对路径从根开始描述路径

特殊路径符

  • .,表示当前,比如./a.txt,可以简写成a.txt,表示当前文件夹内的a.txt文件
  • ..,表示上级目录,比如..表示上级目录,../..表示上级的上级目录
  • ~,表示用户的HOME目录,即 /home/username目录,比如cd ~,即可回到用户HOME目录

mkdir命令

mkdir,即Make Directory

功能:创建文件夹

语法:mkdir [-p] 参数

  • 参数:被创建文件夹的路径
  • 选项:-p,可选,表示创建前置路径,如果某个目录的上级目录不存在,就需要使用 -p 这个选项

创建文件夹需要修改权限,请确保操作均在HOME目录内,不要在HOME外操作。涉及到权限问题,HOME外无法成功

touch命令

功能:创建文件

语法:touch 参数

  • 参数:被创建的文件路径

touch命令无选项,参数必填,表示要创建的文件路径,相对、绝对、特殊路径符均可以使用

cat命令

功能:查看文件内容

语法:cat 参数

  • 参数:被查看的文件路径

cat同样没有选项,只有必填参数,参数表示:被查看的文件路径,相对、绝对、特殊路径符都可以使用

more命令

功能:查看文件,可以支持翻页查看

语法:more 参数

  • 参数:被查看的文件路径
  • 在查看过程中:
    • 空格键翻页
    • q退出查看

more命令同样可以查看文件内容,同cat不同的是:

  • cat是直接将内容全部显示出来
  • more支持翻页,如果文件内容过多,可以一页页的展示

cp命令

cp,即copy

功能:复制文件、文件夹

语法:cp [-r] 参数1 参数2

  • 参数1,被复制的文件或文件夹
  • 参数2,要复制去的地方
  • 选项:-r,可选,复制文件夹时必须使用此选项

示例:

  • cp a.txt b.txt,复制当前目录下a.txt为b.txt
  • cp a.txt test/,复制当前目录a.txt到test文件夹内
  • cp -r test test2,复制文件夹test到当前文件夹内为test2存在

mv命令

mv,即move

功能:移动文件、文件夹,文件或文件夹重命名

语法:mv 参数1 参数2

  • 参数1:被移动的文件或文件夹
  • 参数2:要移动去的地方,参数2如果不存在,则会进行改名

rm命令

rm,即remove

功能:删除文件、文件夹

语法:rm [-r -f] 参数...参数

  • 参数:支持多个,每一个表示被删除的,空格进行分隔
  • 选项:-r,删除文件夹使用
  • 选项:-f,强制删除,不会给出确认提示,一般root用户会用到,普通用户-f选项没有意义

配合通配符 * 使用

rm命令支持通配符 *,用来做模糊匹配,符号* 表示通配符,即匹配任意内容(包含空),示例:

  • test*,表示匹配任何以test开头的内容
  • *test,表示匹配任何以test结尾的内容
  • *test*,表示匹配任何包含test的内容

举例:

  • 删除所有以test开头的文件或文件夹 rm -r test*
  • 删除所有以test结尾的文件或文件夹 rm -r *test
  • 删除所有包含test的文件或文件夹 rm -r *test*

root用户使用-f选项强制删除文件或文件夹

su - root 再输入密码 使用root用户(超级管理员)身份操作终端,此时命令提示符由 $ 变为 #

exit 退出root用户,此时命令提示符重新变成 $

root用户使用rm命令删除文件或文件夹时,都会在命令行提示是否删除(输入y表示确定,n表示取消),如果不想看到这个提示,可以使用-f选项强制删除

rm命令很危险,一定要注意,特别是切换到root用户的时候

which命令

功能:查看命令的程序本体文件路径。Linux每一个命令都有一个对应的文件,通过which可以查看这些文件的路径

语法:which 参数

  • 参数:被查看的命令

find命令

功能:搜索文件,类似于Windows文件资源管理器的搜索功能

按照文件名搜索

按文件名搜索:find 路径 -name 参数

  • 路径,搜索的起始路径
  • 参数,搜索的关键字,支持通配符*, 比如:*test表示搜索任意以test结尾的文件

例如:

  • find / -name "test" 从根目录开始查找所有文件名是test的文件

按照文件大小搜索

语法:

  • find 路径 -size +n[kMG]
  • find 路径 -size -n[kMG]

参数:

  • + - 表示大于和小于
  • n 表示大小数字
  • kMG 表示大小单位,k(小写字母)表示kb,M表示MB,G表示GB

示例:

  • 查找小于10KB的文件: find / -size -10k
  • 查找大于100MB的文件:find / -size +100M
  • 查找大于1GB的文件:find / -size +1G

grep命令

功能:过滤关键字

语法:grep [-n] 关键字 文件路径

  • 选项-n,可选,表示在结果中显示匹配的行的行号。
  • 参数,关键字,必填,表示过滤的关键字,带有空格或其它特殊符号,建议使用双引号将关键字包围起来
  • 参数,文件路径,必填,表示要过滤内容的文件路径,可作为内容输入端口

参数文件路径,可以作为管道符的输入

wc命令

功能:统计字节数、行数、单词数、字符数

语法:wc [-c -m -l -w] 文件路径

  • 选项,-c,统计bytes数量
  • 选项,-m,统计字符数量
  • 选项,-l,统计行数
  • 选项,-w,统计单词数量
  • 不使用任何选项时,同时显示行数、单词数、字符数
  • 参数,文件路径,被统计的文件,可作为内容输入端口

参数文件路径,可作为管道符的输入

管道符 |

功能:将符号左边的结果,作为符号右边的输入,凡是会在控制台输出内容的命令都可以放在管道符的左侧

示例:

  • cat a.txt | grep "you",将cat a.txt输出在控制台的内容,作为grep命令的输入,用来过滤you关键字,相当于 grep "you" a.txt
  • 嵌套 cat a.txt | grep "you" | grep "to" 按照从左到右的顺序执行过滤

echo命令

功能:输出内容,类似于python中的print()函数

语法:echo 参数

  • 参数:被输出的内容,双引号可有可无,如果输入的内容比较复杂还是建议使用双引号包裹

反引号

功能:被两个反引号包围的内容,会作为命令执行

示例:

echo `pwd`

以上命令将在控制台输出pwd命令返回的内容

重定向符

功能:将符号左边的结果,输出到右边指定的文件中去

  • >,表示覆写,删除文件原有内容,写入新内容,凡是可以在控制台输出内容的命令都可以放在 > 左侧
  • >>,表示追加,在原有内容之后另起一行写入新内容,用法和 > 相同

例如:

  • echo "hello world" > test.txt 覆写test.txt,即删除test.txt所有内容,写入hello world
  • ls >> test.txt 将ls命令输出的内容追加到test.txt文件中

tail命令

功能:查看文件尾部内容

语法:tail [-f -n] 参数

  • 参数:被查看的文件
  • 选项:-f,持续跟踪文件修改
  • 选项:-n,用数字替换掉n,指定查看最后n行的内容,如果不使用这个选项,默认查看最后10行的内容

head命令

功能:查看文件头部内容

语法:head [-n] 参数

  • 参数:被查看的文件
  • 选项:-n,查看的行数

vi/vim编辑器

vi是visual interface的简称, 是Linux中最经典的文本编辑器。vim是vi improved,即vi的增强版。二者都是Linux内置的文本编辑器,通过命令行直接使用。vim 是 vi 的加强版本,兼容 vi 的所有指令,不仅能编辑文本,而且还具有 shell 程序编辑的功能,可以不同颜色的字体来辨别语法的正确性,极大方便了程序的设计和编辑性。因此,一般直接使用vim

vi/vim的三种工作模式

  • 命令模式(Command mode) 命令模式下,所敲的按键编辑器都理解为命令,以命令驱动执行不同的功能。此模式下,不能自由进行文本编辑。
  • 输入模式(Insert mode) 也就是所谓的编辑模式、插入模式。 此模式下,可以对文件内容进行自由编辑。
  • 底线命令模式(Last line mode) 通常用于文件的保存、退出。

打开vi/vim编辑器

如果需要通过vi/vim编辑器编辑文件,请通过如下命令:

vi 文件路径
vim 文件路径

vim兼容全部的vi功能,后续全部使用vim命令

如果文件路径表示的文件不存在,那么此命令会创建新文件并编辑这个新文件。如果文件路径表示的文件存在,那么此命令用于编辑已有文件

通过vi/vim命令编辑文件,会打开一个新的窗口,此时这个窗口就是:命令模式窗口,命令模式是vi编辑器的入口和出口,进入vi编辑器会进入命令模式。

通过命令模式输入键盘指令,可以进入输入模式。输入模式需要退回到命令模式,然后通过命令可以进入底线命令模式

命令模式

  • 在命令模式内,按键盘 i ,进入输入模式,此时命令行最后一行变为 -- 插入 --
  • 按下 esc 将返回命令模式
  • 命令模式下,按下 yyp 将复制粘贴,类似于pycharm的 ctrl+d
  • dd 删除一行
  • u 撤销
  • 在命令模式中,按下 : 键,将进入底线命令模式
    • 底线命令模式中,输入 wq 保存并退出
模式 快捷键/操作 功能说明
命令模式 i 在当前光标位置进入输入模式
命令模式 a 在当前光标位置之后进入输入模式
命令模式 I 在当前行的开头,进入输入模式
命令模式 A 在当前行的结尾,进入输入模式
命令模式 o 在当前光标下一行进入输入模式
命令模式 O 在当前光标上一行进入输入模式
输入模式 esc 任何情况下输入esc都能回到命令模式
命令模式 键盘上、键盘k 向上移动光标
命令模式 键盘下、键盘j 向下移动光标
命令模式 键盘左、键盘h 向左移动光标
命令模式 键盘右、键盘l 向后移动光标
命令模式 0 移动光标到当前行的开头
命令模式 $ 移动光标到当前行的结尾
命令模式 pageup(PgUp) 向上翻页
命令模式 pagedown(PgDn) 向下翻页
命令模式 / 进入搜索模式
命令模式 n 向下继续搜索
命令模式 N 向上继续搜索
命令模式 dd 删除光标所在行的内容
命令模式 ndd n是数字,表示删除当前光标向下n行
命令模式 yy 复制当前行
命令模式 nyy n是数字,复制当前行和下面的n行
命令模式 p 粘贴复制的内容
命令模式 u 撤销修改
命令模式 ctrl + r 反向撤销修改
命令模式 gg 跳到首行
命令模式 G 跳到行尾
命令模式 dG 从当前行开始,向下全部删除
命令模式 dgg 从当前行开始,向上全部删除
命令模式 d$ 从当前光标开始,删除到本行的结尾
命令模式 d0 从当前光标开始,删除到本行的开头
底线命令模式 :wq 保存并退出
底线命令模式 :q 仅退出
底线命令模式 :q! 强制退出
底线命令模式 :w 仅保存
底线命令模式 :set nu 显示行号
底线命令模式 :set paste 设置粘贴模式

查看命令的帮助

可以通过:命令 --help查看命令的帮助手册

$ ls --help 
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
      --author               with -l, print the author of each file
  -b, --escape               print C-style escapes for nongraphic characters
      --block-size=SIZE      with -l, scale sizes by SIZE when printing them;
                             e.g., '--block-size=M'; see SIZE format below

  -B, --ignore-backups       do not list implied entries ending with ~
  -c                         with -lt: sort by, and show, ctime (time of last
                             change of file status information);
                             with -l: show ctime and sort by name;
                             otherwise: sort by ctime, newest first

  -C                         list entries by columns
      --color[=WHEN]         color the output WHEN; more info below
  -d, --directory            list directories themselves, not their contents
  -D, --dired                generate output designed for Emacs' dired mode
  -f                         list all entries in directory order
  -F, --classify[=WHEN]      append indicator (one of */=>@|) to entries WHEN
      --file-type            likewise, except do not append '*'
      --format=WORD          across -x, commas -m, horizontal -x, long -l,
                             single-column -1, verbose -l, vertical -C

      --full-time            like -l --time-style=full-iso
  -g                         like -l, but do not list owner
      --group-directories-first
                             group directories before files;
                             can be augmented with a --sort option, but any
                             use of --sort=none (-U) disables grouping

  -G, --no-group             in a long listing, don't print group names
  -h, --human-readable       with -l and -s, print sizes like 1K 234M 2G etc.
      --si                   likewise, but use powers of 1000 not 1024
  -H, --dereference-command-line
                             follow symbolic links listed on the command line
      --dereference-command-line-symlink-to-dir
                             follow each command line symbolic link
                             that points to a directory

      --hide=PATTERN         do not list implied entries matching shell PATTERN
                             (overridden by -a or -A)

      --hyperlink[=WHEN]     hyperlink file names WHEN
      --indicator-style=WORD
                             append indicator with style WORD to entry names:
                             none (default), slash (-p),
                             file-type (--file-type), classify (-F)

  -i, --inode                print the index number of each file
  -I, --ignore=PATTERN       do not list implied entries matching shell PATTERN
  -k, --kibibytes            default to 1024-byte blocks for file system usage;
                             used only with -s and per directory totals

  -l                         use a long listing format
  -L, --dereference          when showing file information for a symbolic
                             link, show information for the file the link
                             references rather than for the link itself

  -m                         fill width with a comma separated list of entries
  -n, --numeric-uid-gid      like -l, but list numeric user and group IDs
  -N, --literal              print entry names without quoting
  -o                         like -l, but do not list group information
  -p, --indicator-style=slash
                             append / indicator to directories
  -q, --hide-control-chars   print ? instead of nongraphic characters
      --show-control-chars   show nongraphic characters as-is (the default,
                             unless program is 'ls' and output is a terminal)

  -Q, --quote-name           enclose entry names in double quotes
      --quoting-style=WORD   use quoting style WORD for entry names:
                             literal, locale, shell, shell-always,
                             shell-escape, shell-escape-always, c, escape
                             (overrides QUOTING_STYLE environment variable)

  -r, --reverse              reverse order while sorting
  -R, --recursive            list subdirectories recursively
  -s, --size                 print the allocated size of each file, in blocks
  -S                         sort by file size, largest first
      --sort=WORD            sort by WORD instead of name: none (-U), size (-S),
                             time (-t), version (-v), extension (-X), width

      --time=WORD            select which timestamp used to display or sort;
                               access time (-u): atime, access, use;
                               metadata change time (-c): ctime, status;
                               modified time (default): mtime, modification;
                               birth time: birth, creation;
                             with -l, WORD determines which time to show;
                             with --sort=time, sort by WORD (newest first)

      --time-style=TIME_STYLE
                             time/date format with -l; see TIME_STYLE below
  -t                         sort by time, newest first; see --time
  -T, --tabsize=COLS         assume tab stops at each COLS instead of 8
  -u                         with -lt: sort by, and show, access time;
                             with -l: show access time and sort by name;
                             otherwise: sort by access time, newest first

  -U                         do not sort; list entries in directory order
  -v                         natural sort of (version) numbers within text
  -w, --width=COLS           set output width to COLS.  0 means no limit
  -x                         list entries by lines instead of by columns
  -X                         sort alphabetically by entry extension
  -Z, --context              print any security context of each file
      --zero                 end each output line with NUL, not newline
  -1                         list one file per line
      --help        display this help and exit
      --version     output version information and exit

The SIZE argument is an integer and optional unit (example: 10K is 10*1024).
Units are K,M,G,T,P,E,Z,Y,R,Q (powers of 1024) or KB,MB,... (powers of 1000).
Binary prefixes can be used, too: KiB=K, MiB=M, and so on.

The TIME_STYLE argument can be full-iso, long-iso, iso, locale, or +FORMAT.
FORMAT is interpreted like in date(1).  If FORMAT is FORMAT1<newline>FORMAT2,
then FORMAT1 applies to non-recent files and FORMAT2 to recent files.
TIME_STYLE prefixed with 'posix-' takes effect only outside the POSIX locale.
Also the TIME_STYLE environment variable sets the default style to use.

The WHEN argument defaults to 'always' and can also be 'auto' or 'never'.

Using color to distinguish file types is disabled both by default and
with --color=never.  With --color=auto, ls emits color codes only when
standard output is connected to a terminal.  The LS_COLORS environment
variable can change the settings.  Use the dircolors(1) command to set it.

Exit status:
 0  if OK,
 1  if minor problems (e.g., cannot access subdirectory),
 2  if serious trouble (e.g., cannot access command-line argument).

GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Report any translation bugs to <https://translationproject.org/team/>
Full documentation <https://www.gnu.org/software/coreutils/ls>
or available locally via: info '(coreutils) ls invocation'

查看命令的详细手册

可以通过:man 命令查看某命令的详细手册,比 --help 选项的帮助文档更详细