linux常用命令汇总之-文件相关

Linux中的命令的确是非常多,毕竟主要是以shell命令交互。虽然命令繁多,但是按我们日常常使用的并不多,故在此总结一下,方便一下以后的查看。

  • Linux的shell程序默认是bash 程序;
  • Linux命令格式包含三个部分,分别是: 命令 、 选项 、 参数 ;
  • Linux命令选项前为单个减号(-),后面一般为 单字符 ,选项前为双减号(--),后面一般为 单词;

# 文件目录操作

这可能是我们使用得最多的命令,也是Linux最基础的命令

  • pwd 命令查看用户的当前目录
  • cd 命令来切换目录
  • . 表示当前目录
  • ..表示当前目录的上一级目录(父目录)
  • -表示用 cd 命令切换目录前所在的目录
  • ~ 表示用户主目录的绝对路径名

# ls

ls命令就是list的缩写,默认ls用来打印出当前目录的清单(包括文件和子目录)

  • -a all显示所有文件及目录 (. 开头的隐藏文件也会列出)
  • -l 除文件名称外,将文件型态、权限、拥有者、文件大小等资讯详细列出
  • -r reverse将文件以相反次序显示(原定依英文字母次序)
  • -t time将文件依建立时间之先后次序列出
  • -F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
  • -R Recursion递归文件夹依序列出
#打印当前目录
ls      
README.md         docs              draft             node_modules
#打印指定目录
ls /bin 
[         cat       cp        dash      dd        echo
#打印详细信息
ls -l   
total 1224
-rw-r--r--    1 jason  staff      17 Mar 31  2020 README.md
drwxr-xr-x    6 jason  staff     192 Jan 15 16:16 docs
drwxr-xr-x   13 jason  staff     416 Jan 19 14:51 draft
drwxr-xr-x  940 jason  staff   30080 Jan 14 17:02 node_modules
#打印详细信息-逆序
ls -r  
node_modules      draft             docs              README.md
#区别目录与可执行文件
ls -F 
README.md          docs/              draft/             node_modules/

# ls高级用法

#列出当前目录中所有以“d”开头的目录的详细内容
ls -l d*    
docs:
@pages   _posts   index.md
#列出目前工作目录下所有名称是s 开头的档案,愈新的排愈后面
ls -ltr s* 
total 8
-rwxr-xr-x  1 jason  staff  161 Jan 14 18:16 deploy-test.sh
#在ls中列出文件的绝对路径
ls | sed "s:^:`pwd`/:" 
/Users/jason/IdeaProjects/nowhere.ink/README.md
/Users/jason/IdeaProjects/nowhere.ink/docs
/Users/jason/IdeaProjects/nowhere.ink/draft
/Users/jason/IdeaProjects/nowhere.ink/node_modules

# mkdir

mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录。

  • -m, --mode=模式,设定权限<模式> (类似 chmod),而不是 rwxrwxrwx 减 umask
  • -p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录;
  • -v, --verbose 每次创建新目录都显示信息
#创建权限为777的目录 
mkdir -m 777 test3
#展示信息
mkdir -v test
mkdir: created directory 'test'
#递归创建
mkdir -pv test2/test22
mkdir: created directory 'test2'
mkdir: created directory 'test2/test22'

# rmdir

移除目录,要求目录为空,删除某目录时也必须具有对父目录的写权限

  • -p 递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应的信息。
  • -v, --verbose 显示指令执行过程
rmdir test
rmdir -v test
rmdir -p test2/test22

# touch

生成一个空文件或更改文件的时间

touch log1.log log2.log #创建文件
ls -l

-rw-r--r--    1 jason  staff       0 Jan 19 23:05 log1.log
-rw-r--r--    1 jason  staff       0 Jan 19 23:05 log2.log

# cp

cp(英文全拼:copy file)命令主要用于复制文件或目录。

  • -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
  • -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
  • -f:覆盖已经存在的目标文件而不给出提示。
  • -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
  • -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
  • -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
  • -l:不复制文件,只是生成链接文件。
#复制log.log 到test文件夹中
cp log.log test

cp log.log test
#当目标文件存在时,会询问是否覆盖
# cp:是否覆盖“test/log.log”? 
#复制目录
cp -a test test2

# mv

mv(英文全拼:move file)命令用来为文件或目录改名、或将文件或目录移入其它位置。

  • -b: backup当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。
  • -i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。
  • -f: force如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。
  • -n: no不要覆盖任何已存在的文件或目录。
  • -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
mv file file1 #重命名
mv file dir #file移动到dir
mv dir dir1 #dir1存在则移至dir1中,否则重命名
mv file dir #出错
#将文件log1.txt,log2.txt,log3.txt移动到目录test3中
mv log1.txt log2.txt log3.txt test3
#移动当前文件夹下的所有文件到上一级目录
mv * ../
#将文件file1改名为file2,如果file2已经存在,则询问是否覆盖
mv -i log1.txt log2.txt
#将文件file1改名为file2,即使file2存在,也是直接覆盖掉
mv -f log1.txt log2.txt

注意

-f 这是个危险的选项,使用的时候一定要保持头脑清晰,一般情况下最好不用加上它。

# rm

rm(remove)命令用于删除一个文件或者目录。

  • -i interactive删除前逐一询问确认。
  • -f force即使原档案属性设为唯读,亦直接删除,无需逐一确认。
  • -r recursive将目录及以下之档案亦逐一删除。
rm  test.txt 
#rm:是否删除 一般文件 "test.txt"? y  
rm  homework  
#rm: 无法删除目录"homework": 是一个目录  
rm  -r  homework  
#rm:是否删除 目录 "homework"? y 
#强行删除,不提示
rm -f log1.log
#删除所有log
rm -i *.log
#递归删除test文件夹及其所有文件和目录
rm -rf  test 

警告

-rf 这是个危险的选项,使用的时候一定要保持头脑清晰,一般情况下最好不用加上它。很多在根目录执行这个命令当事故😄

# ln

ln(英文全拼:link files)命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。

当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。

  • -b 删除,覆盖以前建立的链接
  • -d 允许超级用户制作目录的硬链接
  • -f 强制执行
  • -i 交互模式,文件存在则提示用户是否覆盖
  • -n 把符号链接视为一般目录
  • -s 软链接(符号链接)
  • -v 显示详细的处理过程
# 给文件创建软链接,为log2013.log文件创建软链接link2013,如果log2013.log丢失,link2013将失效
ln -s log2013.log link2013

# find

find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

#将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
find . -name "*.c"
#将目前目录其其下子目录中所有一般文件列出
find . -type f
#将当前目录及其子目录下所有最近 20 天内更新过的文件列出:
find . -ctime -20
#所有文件长度为 0 的普通文件,并列出它们的完整路径
find . -type f -size 0 -exec ls -l {} \;
#将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
find . -name "*.c"

# cat

cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。

  • -n 或 --number:由 1 开始对所有输出的行数编号。
  • -b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
  • -s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
  • -v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。
  • -E 或 --show-ends : 在每行结束处显示 $。
  • -T 或 --show-tabs: 将 TAB 字符显示为 ^I。
  • -A, --show-all:等价于 -vET。
  • -e:等价于"-vE"选项;
  • -t:等价于"-vT"选项;
#把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里:
cat -n textfile1 > textfile2
#把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里:
cat -b textfile1 textfile2 >> textfile3

# more

more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。

  • -num 一次显示的行数
  • -d 提示使用者,在画面下方显示 [Press space to continue, 'q' to quit.] ,如果使用者按错键,则会显示 [Press 'h' for instructions.] 而不是 '哔' 声
  • -l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
  • -f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
  • -p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
  • -c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
  • -s 当遇到有连续两行以上的空白行,就代换为一行的空白行
  • -u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
  • +/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
  • +num 从第 num 行开始显示
  • fileNames 欲显示内容的文档,可为复数个数
#逐页显示 testfile 文档内容,如有连续两行以上空白行则以一行空白行显示。
more -s testfile

#从第 20 行开始显示 testfile 之文档内容。
more +20 testfile

# 常用操作

  • Enter 向下n行,需要定义。默认为1行
  • Ctrl+F 向下滚动一屏
  • 空格键 向下滚动一屏
  • Ctrl+B 返回上一屏
  • = 输出当前行的行号
  • :f 输出文件名和当前行的行号
  • V 调用vi编辑器
  • !命令 调用Shell,并执行命令
  • q 退出more

# less

less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。

#查看文件
less log2013.log
#结合ps查看进程信息并通过less分页显示
ps -ef |less
#查看命令历史使用记录并通过less分页显示
history | less
  • ctrl + F - 向前移动一屏

  • ctrl + B - 向后移动一屏

  • ctrl + D - 向前移动半屏

  • ctrl + U - 向后移动半屏

  • j - 向前移动一行

  • k - 向后移动一行

  • G - 移动到最后一行

  • g - 移动到第一行

  • q / ZZ - 退出 less 命令

  • v - 使用配置的编辑器编辑当前文件

  • h - 显示 less 的帮助文档

  • &pattern - 仅显示匹配模式的行,而不是整个文件

# tail

命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。

tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。

  • -f 循环读取
  • -q 不显示处理信息
  • -v 显示详细的处理信息
  • -c<数目> 显示的字节数
  • -n<行数> 显示文件的尾部 n 行内容
  • --pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
  • -q, --quiet, --silent 从不输出给出文件名的首部
  • -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
#notes.log 文件的最后 10 行
tail notes.log
#跟踪名为 notes.log 的文件的增长情况
tail -f notes.log

head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。

  • -q 隐藏文件名
  • -v 显示文件名
  • -c<数目> 显示的字节数。
  • -n<行数> 显示的行数。
#要显示 notes.log 文件的开头 10 行 
head notes.log
#显示 notes.log 文件的开头 5 行 
head -n 5 notes.log
#显示文件前 20 个字节:
head -c 20 notes.log
最近更新
01
echarts扇形模拟镜头焦距与可视化角度示意图
03-10
02
vite插件钩子
03-02
03
vite的依赖预构建
02-13
更多文章>