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