Linux常用命令
linux-shell-baseLinux常用命令
写在前面:此笔记是对之前txt版笔记的整理总结
基础知识
主要的文件夹:
-
根目录:
/
,所有文件都在它里面 -
用户工作目录/家目录/主目录:
/home/user
,其中user
为用户名,每一个用户都会对应一个user文件夹;这个目录也是打开文件图标默认显示的目录 -
/bin
和/usr/bin
:可执行二进制文件,包含Linux中常用的一些命令 -
/etc
:当前系统内的配置文件,不建议在此目录下存放其它文件 -
/root
:拥有最大权限的目录,一般用户不能对其进行操作
打开终端的方式:
-
右键->
在终端中打开
-
点击屏幕左侧的终端图标
-
CTRL
+alt
+t
终端命令格式:command [-options] [parameter]
-
command
:命令 -
-options
:选项(可选,可以是多个),通常以-
开头注:如果有多个选项
-r -f -l
,可以简写成-rfl
,通常选项的顺序不影响结果 -
parameter
:参数(可选,可以是多个),通常没有-
终端中的快捷键:
-
CTRL
+l
:清屏,即清除终端上的已经执行过的命令行。也可使用命令clear
-
tab
:自动补全,包括命令和文件名称。如想删除一个名为2.txt
的文件夹,当当前目录下只有它是以2开头时,就可以输入rm 2
后按tab键,就能自动补全。如果有多个项目都以输入的文字开头,按tab就会列出所有以该文字开头的项目 -
上下键
↑
↓
:查看之前写过的指令 -
CTRL
+shift
+c
复制CTRL
+shift
+v
粘贴 -
CTRL
+c
:在终端中停止正在执行的进程 -
CTRL
+shift
+=
调大终端窗口大小CTRL
+shift
+-
调小注:有些系统中使用
CTRL
+-
调小
常用命令
查询一个命令的使用方法和存放位置
使用方法:
-
man 命令名称
打开查询界面后,按
回车
会往下翻一行,空格
翻一屏,f
显示下一屏,b
显示上一屏,q
退出查询界面,想要在查询界面搜索某内容就输入/想查的内容
,例如输入/-l
,会将查询界面中所有-l
显示高亮(注意/
是主键盘右下的,不是小键盘上面的) -
命令名称 --help
有的命令使用这种方式查询时会显示中文
# 查询ls命令
man ls
ls --help
存放位置:which 命令名称
显示文件和目录
-
pwd
:查看当前所在目录 -
tree
:以树状图列出当前目录的内容(包含的文件),若想查看当前路径下某文件夹的内容,就在后面直接加上文件夹名例如在主目录文件夹中打开终端,输入
tree snap
,就是查看主目录中snap文件夹包含的文件 -
ls
:以列表方式列出当前目录的内容显示的文件名有不同颜色:蓝色–目录,白色–文件,绿色–可执行文件,红色–压缩包
-
ls -a
:显示所有文件(包含隐藏文件,以.
开头) -
ls -l
:以更详细的方式显示文件 -
ls -h
:用K/M显示文件大小,一般与-l
联用,即ls -l -h
/ls -lh
从左往右的列分别为:类型的描述、文件权限、硬链接数、文件所属的用户、文件所属的组、文件大小、修改时间、文件夹名称
-
类型的描述:开头的第一个字母,分为
-
文件、d
目录、l
链接文件 -
文件权限:第2-9个字母
-
硬链接数:该文件有几个快捷方式
-
文件大小默认以字节为单位
-
-
切换工作目录
cd 绝对/相对路径
-
cd .
:打开下级目录(只能在当前文件夹中只有一个文件夹时使用) -
cd ..
/cd ../
:打开上级目录 -
cd
/cd ~
:直接回到主目录 -
cd /
:打开根目录 -
cd -
:表示返回上一次打开的目录
创建目录
-
mkdir 文件夹路径
-
mkdir -p 文件夹路径
递归创建
例如:
-
mkdir test
:在当前目录下创建一个test文件夹 -
mkdir ./test/a
:就是在当前目录的test文件夹内创建a文件夹 -
mkdir -p a/b/c
:在当前目录下创建一个a,再在a里面创建一个b,最后在b里面创建一个c
创建和打开文件
-
创建文件:
touch 文件路径
例如:
touch 1.txt
:在当前目录下创建一个名为1的txt文件touch 2.txt 3.txt 4.txt
:一次性创建多个文件 -
打开文件:
gedit 文件路径
,使用方法同上文件关闭前不能继续在该终端下写其它内容,注意该指令不在所有Linux系统中通用(如sendos就没有)
删除文件和文件夹
rm 文件路径
:删除之后不能恢复(用终端指令删除不会经过回收站),例如rm 1.txt
-
rm -i
:在删除前有个提示,让你再次确认是否删除,输入y继续删除,输入n不删除注:这个提示在sendos系统中是默认有的,但在Ubuntu中没有
-
rm -f
:强制删除,在任何系统中都不再提示是否删除 -
rm -r
:递归删除一个文件夹及其中的所有内容
拷贝
cp 源文件路径 目标文件路径
cp 2.txt test2 # 把2.txt拷贝到test2文件夹内
cp 2.txt test2/2.txt # 把2.txt内容覆盖拷贝到test2里的2.txt内
注:如果test2中已有2.txt,则会覆盖;如果没有2.txt就创建一个并拷贝内容
-
cp -i
:如果需要进行覆盖会提示一下,也是y覆盖、n不覆盖 -
cp -f
:强制覆盖不提示 -
cp -v
:显示拷贝过程,如cp -v 2.txt test2
时会多显示一行'2.txt'->'test2/2.txt'
-
cp -r
:递归拷贝(想拷贝的是一个文件夹时使用),如cp -r test2 test1
就是把test2里面的文件拷贝到test1文件夹内 -
cp -a
:通常在拷贝文件夹时使用,保留权限、属性等
移动文件和文件夹
mv 源文件路径 目标文件路径
mv a/2.txt . # 把a文件夹中的2.txt移动到终端目录下内
mv 3.txt 2.txt # 把3.txt重命名为2.txt
注意:mv移动时也是默认覆盖同名文件
-
mv -i
:如果需要进行覆盖会提示一下,也是y覆盖、n不覆盖(若选择不覆盖则不会执行移动操作) -
mv -v
:显示移动过程 -
mv -f
:强制覆盖不提示
注:mv
没有-r
操作,可以直接移动文件夹,如mv test1 a/test1
/mv test1 a
就是把test1文件夹移动到a文件夹中,注意是移动整个文件夹而不是只移动其中的内容,结果是a中会有一个test1文件夹与原test1文件夹相同
显示日历/日期
-
cal系列:显示日历
-
cal -3
:显示上个月这个月下个月的日历 -
cal -y
:显示这年的日历 -
cal -j
:以“今年的第多少天”形式显示日历 -
cal 年份
:显示该年的日历,例如cal 2000
就是显示2000年的
-
-
date系列:显示日期、星期、时间
-
date "+%Y"
:显示是哪年
其中
%Y
还可以替换成%m
月、%d
日、%H
时、%M
分、%S
秒、%F
年-月-日、%T
时-分-秒,中间还可以加其它字符date "+%Y年" # 2023年 date "+%Y年%m月" # 2023年9月 date "+%Y%m" # 202309 date "+%F" # 2023-09-02 date "+%F %T" # 2023-09-02 12:30:47
-
查看历史指令
-
history n
:(n为整数)显示最近n条历史指令 -
!n
:(n为整数)执行编号为n的历史指令
history # 最近30条历史指令
!805 # 执行编号为805的历史指令
查看或合并文件内容
cat 文件路径
:直接把文件内容输出到命令行中,而使用gedit
命令打开文件时会阻塞
-
cat -n
:在文件内容前显示行数(编号),包括空行 -
cat -b
:在非空行前显示行数,注意这里不会给空行进行编号,12345只从非空行开始写 -
cat -s
:把两行及以上的空行合并成1行显示
注:可以添加多个文件路径,同时打开,例如cat 1.txt 2.txt
就是把1.txt
和2.txt
中的内容一起显示出来,若添加编号选项也会连续编号
分页查看文件内容
more 文件路径
:每次只显示一页(当文件内容很多时,会出现快速滚屏,无法看清文件内容)
相关按键:
-
显示下一页:
空格键
/CTRL
+f
/f
可以 -
往下翻一行:回车键
-
后退一页:
CTRL
+b
/b
-
退出显示:
q
命令参数:
-
more +5
:从第5行开始显示文件内容 -
more -p
:先清屏再显示文件内容 -
more -s
:把两行及以上的空行合并成1行显示
注:more 1.txt 2.txt
也可以一起显示两个文件,但与cat
不同,more
会在显示的内容前标注文件名
关机重启
-
reboot
或shutdown -r
:重启 -
shutdown 15:10
:在15:10关机 -
shutdown +20
:20分钟后关机 -
shutdown -h now
:立刻关机 -
shutdown -c
:取消关机
注:
-
尽可能少用关机指令
-
执行这些关机或取消关机的命令时,会给其它用户发送提示
进阶操作
数据流和管道命令
输入流:从键盘或文件中读取内容到内存中
输出流:从计算机内存中把数据写入到文件/显示器上
重定向:改变数据流原来的默认走向,有两种方式
-
命令 > 文件
:将命令输出内容覆盖写到文件中 -
命令 >> 文件
:将命令输出内容追加写到文件中
例如echo "abc"
会在命令行中输出”abc”,而echo "abc" > 2.txt
会把”abc”写到2.txt
内(覆盖原内容),并且命令行中不会显示”abc”;echo "abc" >> 2.txt
不会覆盖,会在文件原最后一行的下一行接着写”abc”
其它有输出的命令也可以使用>
和>>
,例如ls -l > ls.txt
就是把ls -l
在终端中输出的内容写到ls.txt中
管道命令:指令1|指令2|指令3...
,将指令1
的输出信息,输入给指令2
,再把指令2
的输出给指令3
,以此类推
例如,ls -l /
可以显示根目录文件信息、more
后面加上文件内容可以让其分屏显示,则ls -l / |more
就可以把根目录信息分屏显示
链接
类似于Windows下的快捷方式,分为软链接和硬链接
对于一个文件,在系统中有一块区域存储其中的内容,而打开这个文件就是通过文件名来找到这块存储区域的过程:
-
软链接:建立一个快捷方式,它通过指向文件名来访问存储区域,删除这个快捷方式对文件无影响;软链接大小与文件大小不同
-
硬链接:给一个文件起多个名字,每个文件名都指向这块存储区域,如文件名原为
2.txt
,给它创建硬链接3.txt
和4.txt
,此时删除2/3/4.txt中的任意一个对文件都无影响,只有当最后一个文件名被删除时,该文件才被彻底删除;硬链接大小与文件大小相同,当然这个相同指的是查看文件大小时输出相同,该文件仍然只有1份,不是将这个文件复制了多份
也可以说:
-
软链接相当于Windows里面的快捷方式
-
硬链接相当于一个指针,它指向文件的存储区域。删除硬链接就是删除指针,当最后一个指向某块内存的指针被删除时,该内存将被释放(文件被删除);如果还有其它指针指向,那么删除其中一个指针对这块内存(文件)无影响。查看大小就是查看指针指向的内存大小
其它区别:
-
软链接可以跨文件系统,而硬链接不行
-
软链接可以对一个不存在的文件进行链接,而硬链接不行
-
软链接可以对目录(文件夹)进行链接,而硬链接不行
-
删除源文件后,软链接不能使用,而硬链接仍可使用
创建方式:ln
命令
-
ln 1.txt h1.txt
:给1.txt
创建名为h1.txt
的硬链接 -
ln -s 1.txt s1.txt
:给1.txt
创建名为s1.txt
的软链接
新创建的链接可以像一个普通文件一样使用,例如cat s1.txt
等
文件搜索
grep
命令:在shell-base中已经介绍过
find
命令:find 文件路径 选项 参数
-
find ./ -name 1.txt
:在当前目录下查找名为1.txt
的文件(包括目录中的文件夹内) -
find ./ -name '*.txt'
:查找所有后缀为txt
的文件(与正则表达式配合使用) -
find ./ -size +15M
:查找大于15M的文件 -
find ./ -size +15M -size -30M
:查找15-30M的文件 -
find ./ -perm 777
:查找权限为777的文件或目录
归档和压缩
压缩:把文件中相同的信息用一个字符代替,使文件占用空间变小
归档:把一些文件放在一起成一个包,不进行压缩操作
.tar
/.tar.gz
:”.tar”是归档文件名的固定后缀,”.tar.gz”就是既归档又压缩
-
tar -cvf 归档文件名 文件1 文件2...
:把指定文件归档,归档后原文件不删除。例如tar -cvf 2-3.tar 2.txt 3.txt
就是把2.txt
和3.txt
都放到2-3.tar
中 -
tar -zcvf 归档文件名 文件1 文件2...
:把指定文件归档并压缩。例如tar -zcvf 2-3.tar.gz 2.txt 3.txt
-
tar -xvf 归档文件名 -C 目录
:将归档文件解档至指定目录(也可不指定),原文件不删除。例如tar -xvf 2-3.tar
就是把2-3.tar
解档至当前目录 -
tar -zxvf 归档文件名 -C 目录
:将归档并压缩的文件解档至指定目录。例如tar -zxvf 2-3.tar.gz -C a
就是把2-3.tar.gz
解档后的文件放到a
文件夹下
.zip
:另一种压缩格式
-
zip -r a.zip a
:把a
文件夹压缩到a.zip
中,若只是压缩文件则不需加-r
(表示递归压缩),原文件/文件夹也不会消失 -
unzip a.zip -d test
:把a.zip解压到test目录下,也可不指定路径
在这两种压缩方式中,.tar.gz
压缩后的文件最小,因此更常用
软件的安装和卸载
-
源代码安装:
make install 源代码安装包
优点:可以根据实际配置安装,性能好,最稳定
缺点:用源代码编译很麻烦
-
dpkg安装deb包:
sudo dpkg -i xxx.deb
优点:安装包可以通过直接运行的方式来安装
缺点:存在包依赖的问题,需要手动下载很多安装包
-
apt-get方法(最常用):
sudo apt-get install xxx
是最简单方便的安装方式,系统自动下载安装,但必须要有软件源(联网或搭建软件源)
以下介绍apt-get方法:
更换默认下载源:
-
对原下载源进行备份:
sudo cp /etc/apt/sources.list sources.bak2
-
访问Ubuntu清华镜像站,选择Ubuntu版本,将下面代码框中内容复制
-
打开下载源文件:
sudo gedit /etc/apt/sources.list
,CTRL+a全选,CTRL+v粘贴 -
更新源:
sudo apt-get update
例:vim的安装和删除
-
安装:
sudo apt-get install vim
-
删除:
sudo apt-get remove vim
文件权限与用户管理
文件的权限
在显示文件和目录中提到,ls -l
方式可以更详细地展示文件,其中的文件权限由9个字母表明,如rwxr-xr-x
,它可以分成三组:
-
第一组
rwx
:文件拥有者的权限 -
第二种
r-x
:文件所属组的权限 -
第三组
r-x
:其它用户的权限
每组3个字母的含义:
-
r
:可读 -
w
:可写 -
x
:可执行(可以在终端中运行)
在Linux中,每创建一个用户时,都会创建一个与用户同名的组,该用户可以把其它用户拉进他的组里面
文件拥有者:创建这个文件的用户,对该文件有最高权限。假设用户a
、b
和c
在一个组内,a
为该文件的拥有者,则b
和c
对该文件的权限就是文件所属组的权限,而不在该组内的用户就是其它用户的权限
规定:用u
表示文件拥有者,g
为同组用户,o
为其它用户,a
为所有用户
修改权限
chmod 操作 文件路径
其中操作
参数由三个字母组成:
-
第一个字母:更改谁对该文件的权限,取值为上面提到的
u
/g
/o
/a
-
第二个字母:
+
增加权限/-
撤销权限/=
设定权限 -
第三个字母:
r
/w
/x
(如果前面是=
,这里应是三个字母,设定权限是设定一个完整的权限)
对于一个文件夹,添加-R
参数可以让其中的文件都获得相同的权限
注:操作参数也可以写成3个数字,表示设定完整的权限,每个数字对应着权限9个字母中的3个
-
r
:4 -
w
:2 -
x
:1 -
无权限:0
把3个字母代表的数字加和,就得到完整权限对应的数字。例如:rwx
-7、r-x
-5、r--
-4、---
-0、rw-
-6
例:
chmod u+x 2.txt # 把拥有者对2.txt文件增加可执行的权限(常用)
chmod a=r-x 2.txt # 把所有人对2.txt文件的权限设为r-x
chmod 755 2.txt # 设定权限为rwx r-x r-x
chomd u=,g=,o= 2.txt # --- --- ---
# chmod u=7 2.txt # 不能这样写
chmod 777 a # 修改文件夹a的权限为rwxrwxrwx
chmod 777 -R a # 修改文件夹a和它里面文件/文件夹的权限为rwxrwxrwx
root权限
是Linux系统的最高权限,很多操作(如安装应用、在根目录下增删改文件等)都需要root权限
-
sudo 命令
:在执行该命令时临时提升权限。例如sudo touch /1.txt
就可以在根目录下创建文件 -
sudo -s
/su root
:永久提升权限(之后在该终端执行的所有命令都将获得root权限)特征:命令行前缀由用户名变为root、
/$
变为/#
,就是切换到了root权限输入
su 用户名
可以切换回原来的用户
注:提升到root权限时都需输入密码。正常情况下可以使用backspace
来删除输入的字符,有时要使用CTRL
+backspace
;如果要全部删除,可以尝试esc
+backspace
或ctrl
+u
修改用户密码和root密码:
-
sudo passwd
:设置root密码 -
passwd
:修改当前用户的密码(就是锁屏时候输的密码) -
passwd 用户名
:修改指定用户的密码
注:root权限下修改用户密码时,不需要输入root密码
退出登录
exit
:
-
如果是在终端中使用默认用户,且也没切换过用户,输入exit就是退出终端
-
如果登录过其它用户,输入exit就是返回上一个用户。例如使用a用户获取了root权限,又切换到了b用户,此时输入exit就是返回root用户,再exit会返回a用户,再exit就是退出终端
可以看成是一个栈的结构(先进先出,后进后出),每切换到一个用户就是往栈里加一个元素,当前权限就是栈顶元素的用户权限,exit就是pop出一个元素,直到栈中无元素就退出终端
查看登录用户
who
:
-
who
:显示登录用户、登录时间(最近一次)及IP地址 -
who -q
:只显示登录用户及数量 -
who -u
:多显示了该用户最近一次操作系统距现在的时间
远程操作
远程登录
在Linux下安装openssh:sudo apt-get install openssh-server
在windows端安装openssh,之后添加环境变量c:/windows/system32/openssh
cmd中输入ssh Linux用户名@LinuxIP地址
(例如ssh teacher@1.1.1.1
),输入用户密码后即可连接成功
获取Linux系统IP地址:点击Ubuntu中右上角有线已连接
->有线设置
->网络
->有线
那栏里面的设置按钮,其中ipv4地址就是Linux系统IP地址
远程拷贝
-
上传:把Windows上的文件拷贝到Linux上
在cmd中输入:
scp 本地路径 Linux用户名@LinuxIP地址:远程路径
(例如scp D:/01.txt xxx@1.1.1.1:/home/xxx/scp_test.txt
),输入密码后即可拷贝 -
下载:把Linux上的文件下载到Windows上
在cmd中输入:
scp Linux用户名@LinuxIP地址:远程路径 本地路径
(例如scp xxx@1.1.1.1:/home/xxx/test/ls.txt D:/test.txt
),输入密码后即可拷贝
注:上传和下载之前都不必使用ssh登录
vim
vi(visual interface)是Linux内嵌的一种文本编辑程序,可以进行文本操作,但不能改字体、格式、段落等;vim是vi的升级版,在大多数Linux版本里,使用vi默认就是使用vim
vi界面可分为命令
、文本输入
、末行
三种模式:
-
命令模式(默认):不能编辑,在左下角显示文件名/没有内容,在其它模式下按
esc
键可进入 -
编辑模式:在命令模式下输入
i
/a
/o
/c
/r
/s
都可进入,之后用户输入的任何字符都会作为文件内容保存并显示在屏幕上 -
末行模式(ex转义模式):在命令模式下按冒号
:
进入,此时在窗口左下角显示冒号,该模式下可以对文件进行操作(如把编辑缓冲区的内容写入文件),执行完末行命令后会自动回到命令模式
具体使用:在终端中输入vi 1.txt
,若存在就打开,不存在则创建
大体操作流程:进入编辑模式->在里面输入内容->输入完成后按esc
回到命令模式->再按:
进入末行模式,进行保存退出等操作
-
进入编辑模式的命令
-
i
在光标前插入 -
a
在光标后插入 -
I
在行首插入 -
A
在行末插入 -
o
在光标所在行的下一行插入一行空行 -
O
在光标所在行的上一行插入一行空行
-
-
末行模式的命令
-
w
表示保存 -
q
退出 -
wq
保存并退出vi -
q!
强制退出不保存 -
wq!
强制保存退出
例:想要保存并退出,就在命令模式下输入
:wq
-
-
命令模式
-
移动光标:可以使用方向键,也可以按键
-
h
左 -
l
右 -
j
下 -
k
上 -
H
屏幕第一行 -
L
屏幕最后一行 -
gg
文档第一行 -
G
文档最后一行 -
M
中间行 -
^
行首 -
$
行末 -
{
向上移动一段 -
}
向下移动一段 -
w
去下一个单词的首字母 -
b
去上一个单词的首字母 -
翻屏的命令同终端(
CTRL
+f
/CTRL
+b
向前/后翻屏)
-
-
删除内容:
-
x
删除光标选中的字符 -
X
删除光标前一个字符 -
dd
删除光标所在整行 -
ndd
删除n行(如2dd
就是删除两行,从光标所在行开始删) -
d
删除光标所在行的光标之前的字符 -
D
删除删除光标所在行的光标之后(包括光标所在字符)的字符 -
dw
删除光标所在的单词(单词间以空格/换行相隔)
-
-
撤销:
-
u
撤销操作 -
CTRL
+r
反撤销(重做)
-
-
重复指令:
.
重复上一步的命令 -
移动命令:
>>
使光标及其之后的字符向右移动移动距离,<<
是向左 -
复制粘贴:
-
yy
复制光标所在行内容 -
nyy
复制光标之后的n行(包括光标所在行) -
p
粘贴
-
-
替换内容:
-
r
替换当前字符 -
R
替换光标之后的字符(输入rx
就是把当前字符替换成x)
-
-
查找:
/str
,其中str
为想查找的字符串(如输入/x
后回车,就能找到第一个x),之后-
n
找下一个str -
N
找上一个str
-
-
补充:末行模式下也可进行替换(不常用)
-
%s/abc/123/g
:把文件中所有的abc替换成123 -
%s/abc/123
:只替换每行第一次出现的abc -
1,3s/abc/123/g
:就是把1-3行的abc替换