Linux文件操作
Linux严格区分大小写,所有目录和文件名都要区分大小写
Linux的目录结构
/叫做根目录,是最顶级的目录- 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 -als -lals -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.txtcp 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 worldls >> 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 选项的帮助文档更详细
