Linux 终端中快捷键和命令历史功能
- 搜索历史命令(使用
Ctrl + R
) - 按 Enter 执行找到的命令,或按
Esc
返回编辑模式。
补全命令和路径(Tab 键补全)
- 命令补全 :按
Tab
键 - 多选补全 :如果有多个可能的补全项,按
Tab
两次
使用 history
命令查看历史命令
-
清除历史命令 :
history -c
-
查看特定历史命令的输出 :
history | grep <pattern>
-
例如,查找所有包含
git
的命令:history | grep git
历史命令快捷键
-
Up
和Down
键 :上下箭头可以浏览命令历史,按Up
键可以查看以前执行的命令,按Down
键可以回到未来的命令。 -
Ctrl + P
:相当于按Up
键,查看上一个命令。 -
Ctrl + N
:相当于按Down
键,查看下一个命令。
命令行编辑技巧
-
Ctrl + A
:移动光标到命令行的开始位置。 -
Ctrl + E
:移动光标到命令行的末尾位置。 -
Ctrl + U
:删除光标之前的所有字符。 -
Ctrl + K
:删除光标之后的所有字符。 -
Ctrl + W
:删除光标前的一个单词。 -
Ctrl + Y
:粘贴最后一次删除的内容。 -
Ctrl + D
:删除光标位置的字符(类似于按Backspace
)。 -
Ctrl + L
:清屏,相当于执行clear
。
补全历史命令(使用 reverse-search
)
在使用 Ctrl + R
反向搜索时,如果你没有找到你想要的命令,可以通过按 Ctrl + S
向前搜索历史命令。
linux处理目录的常用命令
ls(英文全拼:list files): 列出目录及文件名
选项与参数:
- -a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
- -d :仅列出目录本身,而不是列出目录内的文件数据(常用)
- -l :长数据串列出,包含文件的属性与权限等等数据;(常用)
cd(英文全拼:change directory):切换目录
#使用绝对路径切换到 runoob 目录
[root@www ~]# cd /root/runoob/
#使用相对路径切换到 runoob 目录 --一个英文点忽略绝对位置
[root@www ~]# cd ./runoob/
# 表示回到自己的家目录,亦即是 /root 这个目录
[root@www runoob]# cd ~
# 表示去到目前的上一级目录,亦即是 /root 的上一级目录的意思;
[root@www ~]# cd ..
pwd(英文全拼:print work directory):显示目前的目录
选项与参数:
- -P :显示出确实的路径,而非使用链接 (link) 路径。
实例:单纯显示出目前的工作目录:
[root@www ~]# pwd
/root <== 显示出目录啦~
实例显示出实际的工作目录,而非链接档本身的目录名而已。
mkdir(英文全拼:make directory):创建一个新的目录
选项与参数:
- -m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
- -p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!
实例:请到/tmp底下尝试创建数个新目录看看:
[root@www ~]# cd /tmp
[root@www tmp]# mkdir test <==创建一名为 test 的新目录
[root@www tmp]# mkdir test1/test2/test3/test4
mkdir: cannot create directory `test1/test2/test3/test4':
No such file or directory <== 没办法直接创建此目录啊!
[root@www tmp]# mkdir -p test1/test2/test3/test4
rmdir(英文全拼:remove directory):删除一个空的目录
删除 runoob 目录
[root@www tmp]# rmdir runoob/
将 mkdir 实例中创建的目录(/tmp 底下)删除掉!
[root@www tmp]# rmdir test <==可直接删除掉,没问题
[root@www tmp]# rmdir test1 <==因为尚有内容,所以无法删除!
rmdir: `test1': Directory not empty
rm(英文全拼:remove): 删除文件或目录
选项与参数:
-
-f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
-
-i :互动模式,在删除前会询问使用者是否动作
-
-r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
[root@www tmp]# rm -i bashrc rm: remove regular file `bashrc'? y
如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名!
cp(英文全拼:copy file): 复制文件或目录
选项与参数:
-
**-i:**若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
[root@www ~]# cp ~/.bashrc /tmp/bashrc
[root@www ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n <==n不覆盖,y为覆盖 -
**-a:**相当於 -pdr 的意思:archive"(归档),至於 pdr 请参考下列说明;
-
**-p:**连同文件的属性一起复制过去,而非使用默认属性(备份常用);
作用:在复制文件时,同时复制文件的属性,而不是使用系统的默认属性。
解释:每个文件都有一些元数据(metadata),比如:
-
-
修改时间 (Modification Time)
-
访问时间 (Access Time)
-
所有者和所属组 (Ownership)
-
权限模式 (Permissions)
加上 -p 后,新复制出来的文件会拥有和源文件完全相同的上述属性。这对于备份来说至关重要,因为您希望备份文件保留原始的时间戳和权限。
-
-
**-r:**递归持续复制,用於目录的复制行为;当您需要复制一个目录(文件夹)时,必须使用这个选项。
projectA/
├── main.c
└── docs/
└── readme.txt
错误的做法 (不加 -r):
codeBash
[root@www ~]# cp projectA /tmp/
cp: omitting directory 'projectA' <== 系统会提示,这是一个目录,我跳过了它
结果:复制失败。
正确的做法 (加上 -r):
codeBash
[root@www ~]# cp -r projectA /tmp/
结果:在 /tmp 目录下会创建一个 projectA 目录,其内容和结构与原始目录完全相同。
-
**-d:**若来源档为链接档的属性(link file),则复制链接档属性而非文件本身;
-
**-f:**为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
-
**-l:**进行硬式链接(hard link)的链接档创建,而非复制文件本身;
|--------------|------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|
| 操作 | cp source.txt copy.txt (普通复制) | cp -l source.txt link.txt (创建硬链接) |
| 背后动作 | 1. 创建一个新的 Inode。<br>2. 分配新的数据块。<br>3. 将 source.txt 的内容逐字节复制 到新的数据块中。<br>4. 创建新文件名 copy.txt 指向这个新的 Inode。 | 1. 不创建 新的 Inode。<br>2. 不分配 新的数据块。<br>3. 直接创建一个新文件名 link.txt,让它指向 source.txt 已经存在的那个 Inode。 |
| 磁盘空间 | 占用双倍空间。如果 source.txt 是 1GB,那么复制后总共占用 2GB。 | 几乎不占用额外空间(只增加一个文件名的存储空间,可以忽略不计)。 |
| 关系 | source.txt 和 copy.txt 是两个完全独立的文件。修改一个不会影响另一个。 | source.txt 和 link.txt 是同一个文件的两个不同名字 。它们指向相同的 Inode 和数据。修改任何一个,另一个的内容会同步改变。 |
| Inode 编号 | 两者的 Inode 编号不同。 | 两者的 Inode 编号完全相同。 |
| 删除行为 | 删除 source.txt 不会影响 copy.txt。 | 删除 source.txt 不会影响 link.txt。系统会检查 Inode 的"链接数",只有当链接数变为 0 时,才会真正删除文件数据。 |
mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
选项与参数:
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
- -u :若目标文件已经存在,且 source 比较新,才会升级 (update)
复制一文件,创建一目录,将文件移动到目录中
[root@www ~]# cd /tmp
[root@www tmp]# cp ~/.bashrc bashrc
[root@www tmp]# mkdir mvtest
[root@www tmp]# mv bashrc mvtest
目录 /data/longren/jingui/代码
修改为 /data/longren/jingui/Code
如果你没有足够的权限进行修改(例如没有写权限
sudo mv /data/longren/jingui/代码 /data/longren/jingui/Code
移动文件:
将文件 file1.txt
移动到目录 dir1/
中:
mv file1.txt dir1/
重命名文件:
将文件 oldname.txt
重命名为 newname.txt
:
mv oldname.txt newname.txt
强制移动文件,不做提示:
将文件 file1.txt
移动到 /home/user/
目录,并强制覆盖目标位置已有的同名文件:
mv -f file1.txt /home/user/
移动多个文件到一个目录:
将文件 file1.txt
和 file2.txt
移动到 dir1/
目录:
mv file1.txt file2.txt dir1/
使用 -i
选项提示覆盖:
在将 file1.txt
移动到 /home/user/
时,如果目标文件已经存在,则会提示是否覆盖:
mv -i file1.txt /home/user/
命令:
mv /data/longren/jingui/代码 /data/longren/jingui/Code``
解释:
-
/data/longren/jingui/代码
是原目录路径。 -
/data/longren/jingui/Code
是你要改成的新目录名。
Linux 文件内容查看
cat 由第一行开始显示文件内容
选项与参数:
- -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
- -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
- -E :将结尾的断行字节 $ 显示出来;
- -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
- -T :将 [tab] 按键以 ^I 显示出来;
- -v :列出一些看不出来的特殊字符
tac 从最后一行开始显示0可以看出 tac 是 cat 的倒着写!
nl 显示的时候,顺道输出行号!
选项与参数:
- -b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
-b t :如果有空行,空的那一行不要列出行号(默认值); - -n :列出行号表示的方法,主要有三种:
-n ln :行号在荧幕的最左方显示;
-n rn :行号在自己栏位的最右方显示,且不加 0 ;
-n rz :行号在自己栏位的最右方显示,且加 0 ; - -w :行号栏位的占用的位数。
实例一:用 nl 列出 /etc/issue 的内容
[root@www ~]# nl /etc/issue
1 CentOS release 6.4 (Final)
2 Kernel \r on an \m
head 只看头几行
-
-n :后面接数字,代表显示几行的意思
[root@www ~]# head /etc/man.config
默认的情况中,显示前面 10 行!若要显示前 20 行,就得要这样:
[root@www ~]# head -n 20 /etc/man.config
tail 只看尾巴几行
-
-n :后面接数字,代表显示几行的意思
-
-f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
[root@www ~]# tail /etc/man.config
默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:
[root@www ~]# tail -n 20 /etc/man.config
more 一页一页的显示文件内容
你有几个按键可以按的:
- 空白键 (space):代表向下翻一页;
- Enter :代表向下翻『一行』;
- /字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
- :f :立刻显示出档名以及目前显示的行数;
- q :代表立刻离开 more ,不再显示该文件内容。
- b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
linux文件修改/加权限
在 Linux 中,可以使用 chmod
命令来更改文件或目录的权限。
linux文件修改
创建文件:
-
touch filename.txt
-
echo "content" > filename.txt
使用
touch
命令来创建一个空文件:touch filename.txt
或者使用
echo
命令创建文件并写入内容:echo "Hello, World!" > filename.txt
进入文件编辑:
-
nano filename.txt
-
vim filename.txt
使用
nano
编辑文件:nano filename.txt
nano
是一个简单易用的文本编辑器。使用
vim
编辑文件:vim filename.txt
创建内容并编辑文件:
-
nano
:按Ctrl + O
保存,Ctrl + X
退出。 -
vim
:按:wq
保存并退出,:q!
不保存退出。使用
nano
编辑文件:-
在打开的
nano
编辑器中,直接输入你想要的内容。例如:This is a test file. Line 2: More content here.
-
保存文件:
-
按
Ctrl + O
来保存文件。 -
然后按 Enter 确认保存。
-
-
退出文件:
- 按
Ctrl + X
来退出编辑器。
- 按
使用
vim
编辑文件:-
打开文件后,按
i
进入插入模式,开始编辑文件内容。This is a test file. Line 2: More content here.
-
保存文件并退出:
-
按
Esc
退出插入模式。 -
输入
:wq
并按 Enter 来保存文件并退出。
-
-
仅保存文件(不退出):
- 按
Esc
,然后输入:w
,按 Enter。
- 按
-
退出文件(不保存):
- 按
Esc
,然后输入:q!
,按 Enter。
- 按
-
修改文件:
-
nano
:编辑后Ctrl + O
保存,Ctrl + X
退出。 -
vim
:编辑后:wq
保存并退出。使用
nano
修改文件:-
打开文件:
nano filename.txt
进入插入模式,修改文件内容。 -
保存并退出:
Ctrl + O
(保存),然后按Ctrl + X
(退出)。
使用
vim
修改文件:-
打开文件:
vim filename.txt
-
按
i
进入插入模式,修改文件内容。 -
保存并退出:
Esc
-> 输入:wq
(保存并退出)。
-
删除文件:
-
rm filename.txt
-
rm -f filename.txt
(强制删除) -
rm -r directory_name/
(删除目录及内容)删除单个文件:
rm filename.txt
强制删除文件(如果文件不可删除):
rm -f filename.txt
删除目录及其内容:
rm -r directory_name
强制删除目录及其内容:
rm -rf directory_name
linux加权限基本语法:
chmod [选项] 权限 文件/目录
chmod
权限总结:
-
r(读):可以查看文件内容。
-
w(写):可以修改文件内容。
-
x(执行):可以执行文件(如果文件是可执行程序)。
其他选项:
-
-v
:显示更改权限的详细信息。 -
-c
:仅在权限更改时显示信息。
1. 给文件增加读、写、执行权限:
假设文件名为 file.txt
,你想给文件所有者、同组用户和其他用户都增加读、写和执行权限:
chmod 777 file.txt
这意味着所有人都拥有读、写、执行权限。
2. 给文件增加执行权限:
给 file.sh
文件添加执行权限:
chmod +x file.sh
3. 给文件增加读、写、执行权限:
假设文件名为 file.txt
,你想给文件所有者、同组用户和其他用户都增加读、写和执行权限:
chmod 777 file.txt
这意味着所有人都拥有读、写、执行权限。
4. 给文件增加执行权限:
给 file.sh
文件添加执行权限:
chmod +x file.sh
如果你想将 /data/code
目录下的所有文件和子目录的权限都设置为 777
,你可以使用 chmod
命令配合 -R
(递归)选项来实现。
命令:
chmod -R 777 /data/code
sudo chmod -R 777 /code
注意:chmod 777 /code 只是给文件夹加权限而不是整个文件夹里面的文件
- 分享
- 添加收藏
- 点赞 0