文章目录
1. 快捷键
在开始学习linux
命令之前,需要掌握部分快捷键,它将贯穿整个linux
使用生涯,如下所示:
-
Ctrl + Insert
:复制(有可能会和windows
切换字体的快捷键发生冲突) -
Shift + Insert
:粘贴 -
Alt + Insert
:粘贴选择内容 -
通过上下方向键 ↑ ↓ 来调取过往执行过的 Linux 命令。
-
命令或参数仅需输入前几位就可以用
Tab
键补全。 -
Ctrl + R
:用于查找使用过的命令(history
命令用于列出之前使用过的所有命令,然后输入 ! 命加上编号( !2 )就可以直接执行该历史命令)。 -
Ctrl + L
:清除屏幕并将当前行移到页面顶部。 -
Ctrl + C
:中止当前正在执行的命令。 -
Ctrl + U
:从光标位置剪切到行首。 -
Ctrl + K
:从光标位置剪切到行尾。 -
Ctrl + W
:剪切光标左侧的一个单词。 -
Ctrl + Y
:粘贴Ctrl + U | K | Y
剪切的命令。 -
Ctrl + A
:光标跳到命令行的开头。 -
Ctrl + E
:光标跳到命令行的结尾。 -
Ctrl + D
:关闭 Shell 会话。
2. pwd
即Print Working Directory
显示当前目录的路径
[root@by~] pwd
/root
3. which
查看命令的可执行文件所在路径。
linux下,每一条命令其实都对应一个可执行程序,在终端中输入命令,按回车的时候,就是执行了对应的那个程序, which命令本身对应的程序也存在于Linux中。
总的来说一个命令就是一个可执行程序。
[root@by ~] which java
/opt/jdk1.8.0_151/bin/java
4. ls
ls
是list files
的缩写,它列出文件和目录,是linux
最常用的命令之一。
常用参数如下:
-
-a 显示所有文件和目录包括隐藏的
-
-l 显示详细列表
-
-h 适合人类阅读的
-
-t 按文件最近一次修改时间排序
-
-i 显示文件的inode (inode是文件内容的标识)
[root@by home] ls
tomcat
[root@by home] ls -alht
total 12K
dr-xr-xr-x. 21 root root 4.0K Jun 15 16:01 ..
drwxr-xr-x 4 root root 4.0K Apr 23 2021 tomcat
drwxr-xr-x. 3 root root 4.0K Apr 23 2021
[root@by home] ls -l
total 4
drwxr-xr-x 4 root root 4096 Apr 23 2021 tomcat
[root@by home] ls -h
tomcat
[root@by home] ls -i
1704133 tomcat
5. cd
cd
是change directory
的缩写,表示切换目录。
cd / --> 跳转到根目录
cd ~ --> 跳转到家目录
cd .. --> 跳转到上级目录
cd ./home --> 跳转到当前目录的home目录下
cd /home/tomcat--> 跳转到根目录下的home目录下的tomcat目录
cd --> 不添加任何参数,也是回到家目录
【注意】 输入cd /ho + 单次tab键
会自动补全路径 + 两次tab键
会列出所有可能的目录列表。
6. cat
一次性显示文件所有内容,更适合查看小的文件。
常用参数如下:
- -n 显示行号。
[root@by manager] cat log.file
7. less
分页显示文件内容,更适合查看大的文件。
[root@by manager] less log.file
快捷操作如下:
-
空格键:前进一页(一个屏幕);
-
b 键:后退一页;
-
回车键:前进一行;
-
y 键:后退一行;
-
上下键:回退或前进一行;
-
d 键:前进半页;
-
u 键:后退半页;
-
q 键:停止读取文件,中止
less
命令; -
= 键:显示当前页面的内容是文件中的第几行到第几行以及一些其它关于本页内容的详细信息;
-
h 键:显示帮助文档;
-
/ 键:进入搜索模式后,按
n
键跳到一个符合项目,按N
键跳到上一个符合项目,同时也可以输入正则表达式匹配。
8. head
显示文件的开头几行(默认是10行)
[root@by manager] head log.file
常用参数如下:
- -n 指定行数,比如
head log.file -n 2
9. tail
显示文件的结尾几行(默认是10行)
[root@by manager] tail log.file
常用参数如下:
-
-n 指定行数,比如
tail log.file -n 2
-
-f 会每过1秒检查下文件是否有更新内容,也可以用
-s
参数指定间隔时间tail -f -s 4 log.file
10. touch
创建一个文件
## 创建test.txt文件
[root@by manager] touch test.txt
11. mkdir
创建一个目录
# 创建config目录
[root@by manager] mkdir config
常用参数如下:
- -p 递归的创建目录结构,比如
mkdir -p one/two/three
12. cp
拷贝文件和目录
cp file file_copy --> file 是目标文件,file_copy 是拷贝出来的文件
cp file one --> 把 file 文件拷贝到 one 目录下,并且文件名依然为 file
cp file one/file_copy --> 把 file 文件拷贝到 one 目录下,文件名为file_copy
cp *.txt folder --> 把当前目录下所有 txt 文件拷贝到 folder 目录下
常用参数如下:
- -r 递归的拷贝,常用来拷贝一整个目录
13. mv
移动(重命名)文件或目录,与cp
命令用法相似。
mv file one --> 将 file 文件移动到 one 目录下
mv new_folder one --> 将 new_folder 文件夹移动到one目录下
mv *.txt folder --> 把当前目录下所有 txt 文件移动到 folder 目录下
mv file new_file --> file 文件重命名为 new_file
14. sudo
以 root 身份运行命令。
sudo date --> 当然查看日期是不需要sudo的这里只是演示,sudo 完之后一般还需要输入用户密码的
15. su
切换用户,需要 root 用户权限
sudo su --> 切换为root用户(exit 命令或 CTRL + D 快捷键都可以使普通用户切换为 root 用户)
su by --> 切换为普通用户
su - --> 切换为root用户
16. chown
改变文件的所有者,需要root
身份才能运行。
chown lion file.txt --> 把其它用户创建的file.txt转让给lion用户
chown lion:bar file.txt --> 把file.txt的用户改为lion,群组改为bar
常用参数如下:
- -R 递归设置子目录和子文件,比如
chown -R by:by /home/frank
把frank
文件夹的用户和群组都改为by
。
17. chmod
修改访问权限。
chmod 740 file.txt
常用参数如下:
- -R 可以递归地修改文件访问权限,例如
chmod -R 777 /home/by
修改权限比较简单,但理解其深层次的意义才是最重要的。
下面我们来系统的学习 Linux 的文件权限。
[root@by ~]# ls -l
drwxr-xr-x 5 root root 4096 Apr 13 2020 climb
lrwxrwxrwx 1 root root 7 Jan 14 06:41 hello2.c -> hello.c
-rw-r--r-- 1 root root 149 Jan 13 06:14 hello.c
其中drwxr-xr-x
表示文件或目录的权限,它具体代表如下:
-
d :表示目录,就是说这是一个目录,普通文件是 - ,链接是 l 。
-
r : read 表示文件可读。
-
w : write 表示文件可写,一般有写的权限,就有删除的权限。
-
x : execute 表示文件可执行。
-
- :表示没有相应权限。
权限的整体是按用户来划分的,如下图所示:
现在再来理解这句权限drwxr-xr-x
的意思:
-
它是一个文件夹;
-
它的所有者具有:读、写、执行权限;
-
它的群组用户具有:读、执行的权限,没有写的权限;
-
它的其它用户具有:读、执行的权限,没有写的权限。
现在理解了权限,我们使用chmod
来尝试修改权限。
chmod
它不需要是root
用户才能运行的,只要你是此文件所有者,就可以用chmod
来修改文件的访问权限。
18. find
用于查找文件,它会去遍历你的实际硬盘进行查找,而且它允许我们对每个找到的文件进行后续操作,功能非常强大。
find <何处> <何物> <做什么>
-
何处:指定在哪个目录查找,此目录的所有子目录也会被查找。
-
何物:查找什么,可以根据文件的名字来查找,也可以根据其大小来查找,还可以根据其最近访问时间来查找。
-
做什么:找到文件后,可以进行后续处理,如果不指定这个参数, find 命令只会显示找到的文件。
- 根据文件名查找
find -name "file.txt" --> 当前目录以及子目录下通过名称查找文件
find . -name "syslog" --> 当前目录以及子目录下通过名称查找文件
find / -name "syslog" --> 整个硬盘下查找syslog
find /var/log -name "syslog" --> 在指定的目录/var/log下查找syslog文件
find /var/log -name "syslog*" --> 查找syslog1、syslog2 ... 等文件,通配符表示所有
find /var/log -name "*syslog*" --> 查找包含syslog的文件
【注意】find
命令只会查找完全符合何物
字符串的文件,而locate
会查找所有包含关键字的文件。
- 根据文件大小查找
find /var -size +10M --> /var 目录下查找文件大小超过 10M 的文件
find /var -size -50k --> /var 目录下查找文件大小小于 50k 的文件
find /var -size +1G --> /var 目录下查找文件大小查过 1G 的文件
find /var -size 1M --> /var 目录下查找文件大小等于 1M 的文件
- 根据文件最近访问时间查找
find -name "*.txt" -atime -7 --> 近 7天内访问过的.txt结尾的文件
- 仅查找目录或文件
find . -name "file" -type f --> 只查找当前目录下的file文件
find . -name "file" -type d --> 只查找当前目录下的file目录
- 操作查找结果
find -name "*.txt" -printf "%p - %u\n" --> 找出所有后缀为txt的文件,并按照 %p - %u\n 格式打印,其中%p=文件名,%u=文件所有者
find -name "*.jpg" -delete --> 删除当前目录以及子目录下所有.jpg为后缀的文件,不会有删除提示,因此要慎用
find -name "*.c" -exec chmod 600 {} \; --> 对每个.c结尾的文件,都进行 -exec 参数指定的操作,{} 会被查找到的文件替代,\; 是必须的结尾
find -name "*.c" -ok chmod 600 {} \; --> 和上面的功能一直,会多一个确认提示
19. yum
linux
下软件是以包的形式存在,一个软件包其实就是软件的所有文件的压缩包,是二进制的形式,包含了安装软件的所有指令。
Red Hat
家族的软件包后缀名一般为.rpm
, Debian
家族的软件包后缀是.deb
。
linux
的包都存在一个仓库,叫做软件仓库,它可以使用yum
来管理软件包。
yum
是CentOS
中默认的包管理工具,适用于Red Hat
一族。可以理解成Node.js
的npm
。
yum update | yum upgrade 更新软件包
yum search xxx 搜索相应的软件包
yum install xxx 安装软件包
yum remove xxx 删除软件包
20. grep
全局搜索一个正则表达式,并且打印到屏幕。简单来说就是,在文件中查找关键字,并显示关键字所在行。
基础语法如下:
grep text file # text代表要搜索的文本,file代表供搜索的文件
常用参数如下:
-
-i 忽略大小写,
grep -i path /etc/profile
-
-n 显示行号,
grep -n path /etc/profile
-
-v 只显示搜索文本不在的那些行,
grep -v path /etc/profile
-
-r 递归查找,
grep -r hello /etc
,linux
中还有一个rgrep
命令,作用相当于grep -r
但我们经常是配合 ps
、find
、history
等指令来用,如下代码所示:
# 查看以 nohup指令开头的指令集
[root@presto_sugon ~] history | grep nohup
617 nohup java -jar admin.jar > log.file 2>&1 &
767 history | grep nohup
768 nohup java -jar admin.jar > log.file 2>&1 &
# 查看admin.jar的进程
[root@by~] ps -ef | grep admin.jar
root 30320 1 0 09:15 ? 00:02:04 java -jar admin.jar
root 56881 56590 0 17:06 pts/0 00:00:00 grep --color=auto admin.jar
# 查找admin.jar的位置
[root@by~] find / -name admin.jar
/root/jqp/admin.jar
/root/test/admin.jar
20. history
查看指令的历史记录
# 查看以 nohup指令开头的指令集
[root@presto_sugon ~] history | grep nohup
617 nohup java -jar admin.jar > log.file 2>&1 &
767 history | grep nohup
768 nohup java -jar admin.jar > log.file 2>&1 &
21. wc
word count 的缩写,用于文件的统计。
它可以统计单词数目、行数、字符数,字节数等。
基础语法如下:
[root@by] wc test.txt
7 8 50 test.txt
-
第一个7,表示行数;
-
第二个8,表示单词数;
-
第三个50,表示字节数。
常用参数如下:
-
-l 只统计行数,
wc -l test.txt
。 -
-w 只统计单词数,
wc -w test.txt
。 -
-c 只统计字节数,
wc -c test.txt
。 -
-m 只统计字符数,
wc -m test.txt
。
22. >>,>,2>>
- 输出重定向
>
>
表示重定向到新的文件, 比如cut -d , -f 1 notes.csv > name.csv
,它表示通过逗号剪切notes.csv
文件(剪切完有3个部分)获取第一个部分,重定向到name.csv
文件。
我们来看一个具体示例,学习它的使用,假设我们有一个文件notes.csv
,文件内容如下:
Mark1,951/100,很不错1
Mark2,952/100,很不错2
Mark3,953/100,很不错3
执行如下命令:
cut -d , -f 1 notes.csv > name.csv
输出如下内容:
Mark1
Mark2
Mark3
【注意】 使用>
要注意,如果输出的文件不存在它会新建一个,如果输出的文件已经存在,则会覆盖。因此执行这个操作要非常小心,以免覆盖其它重要文件。
- 输出重定向
>>
表示重定向到文件末尾,因此它不会像>
命令这么危险,它是追加到文件的末尾(当然如果文件不存在,也会被创建)。
再次执行cut -d , -f 1 notes.csv >> name.csv
,则会把名字追加到name.csv
里面,如下所示:
Mark1
Mark2
Mark3
Mark1
Mark2
Mark3
我们平时读的log
日志文件其实都是用这个命令输出的。
- 输出重定向
2>
标准错误输出
cat not_exist_file.csv > res.txt 2> errors.log
-
当我们
cat
一个文件时,会把文件内容打印到屏幕上,这个是标准输出。 -
当使用了
> res.txt
时,则不会打印到屏幕,会把标准输出写入文件res.txt
文件中。 -
2> errors.log
当发生错误时会写入errors.log
文件中。
- 输出重定向
2>>
标准错误输出(追加到文件末尾)同>>
相似。
- 输出重定向
2>&1
标准输出和标准错误输出都重定向都一个地方
cat not_exist_file.csv > res.txt 2>&1 # 覆盖输出
cat not_exist_file.csv >> res.txt 2>&1 # 追加输出
23. ps
用于显示当前系统中的进程,ps
命令显示的进程列表不会随时间而更新,是静态的,是运行ps
命令那个时刻的状态或者说是一个进程快照。
[root@lion ~] ps
PID TTY TIME CMD
1793 pts/0 00:00:00 bash
4756 pts/0 00:00:00 ps
-
PID:进程号,每个进程都有唯一的进程号
-
TTY:进程运行所在的终端
-
TIME:进程运行时间
-
CMD:产生这个进程的程序名,如果在进程列表中看到有好几行都是同样的程序名,那么就是同样的程序产生了不止一个进程
常用参数如下
-
-ef 列出所有进程。
-
-efH 以乔木状列举出所有进程。
-
-u 列出此用户运行的进程。
-
-aux 通过
CPU
和内存使用来过滤进程ps -aux | less
。 -
-aux --sort -pcpu 按
CPU
使用降序排列,-aux -sort -pmem
表示按内存使用降序排列。 -
-axjf 以树形结构显示进程,
ps -axjf
它和pstree
效果类似。
# 查看admin.jar的进程
[root@by~] ps -ef | grep admin.jar
root 30320 1 0 09:15 ? 00:02:04 java -jar admin.jar
root 56881 56590 0 17:06 pts/0 00:00:00 grep --color=auto admin.jar
24. top
获取进程的动态列表。
top - 07:20:07 up 25 days, 10:41, 1 user, load average: 0.30, 0.10, 0.07
Tasks: 67 total, 1 running, 66 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1882072 total, 552148 free, 101048 used, 1228876 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1594080 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
956 root 10 -10 133964 15848 10240 S 0.7 0.8 263:13.01 AliYunDun
1 root 20 0 51644 3664 2400 S 0.0 0.2 3:23.63 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
-
top - 07:20:07 up 25 days, 10:41, 1 user, load average: 0.30, 0.10, 0.07 相当
w
命令的第一行的信息。 -
展示的这些进程是按照使用处理器 %CPU 的使用率来排序的。
25. kill
结束一个进程, kill + PID
。
kill 956 # 结束进程号为956的进程
kill 956 957 # 结束多个进程
kill -9 7291 # 强制结束进程
26. nohup
使进程不受挂断(关闭终端等动作)的影响。
启动admin.jar
项目,即便退出linux
窗口,也不会挂断admin.jar
服务。同时将信息输入到同目录下的log.file
文件中。
nohup java -jar admin.jar > log.file 2>&1 &
27. systemd(systemctl)
systemd
是一个Linux
系统基础组件的集合,提供了一个系统和服务管理器,运行为PID 1
并负责启动其它程序。
[root@lion ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 51648 3852 ? Ss Feb01 1:50 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
通过命令也可以看到PID
为1的进程就是systemd
的系统进程。
systemd 常用命令(它是一组命令的集合):
systemctl start nginx # 启动服务
systemctl stop nginx # 停止服务
systemctl restart nginx # 重启服务
systemctl status nginx # 查看服务状态
systemctl reload nginx # 重载配置文件(不停止服务的情况)
systemctl enable nginx # 开机自动启动服务
systemctl disable nginx # 开机不自动启动服务
systemctl is-enabled nginx # 查看服务是否开机自动启动
systemctl list-unit-files --type=service # 查看各个级别下服务的启动和禁用情况
28. tar
创建一个 tar 归档。
tar -cvf sort.tar sort/ # 将sort文件夹归档为sort.tar
tar -cvf archive.tar file1 file2 file3 # 将 file1 file2 file3 归档为archive.tar
常用参数如下:
-
-cvf 表示
create
(创建)+verbose
(细节)+file
(文件),创建归档文件并显示操作细。 -
-tf 显示归档里的内容,并不解开归档。
-
-rvf 追加文件到归档,
tar -rvf archive.tar file.txt
。 -
-xvf 解开归档,
tar -xvf archive.tar
。
29. gzip / gunzip
“压缩/解压”归档,默认用gzip
命令,压缩后的文件后缀名为 .tar.gz
。
gzip archive.tar # 压缩
gunzip archive.tar.gz # 解压
30. ifconfig
查看ip
网络相关信息,如果命令不存在的话, 执行命令yum install net-tools
安装。
[root@lion ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.31.24.78 netmask 255.255.240.0 broadcast 172.31.31.255
ether 00:16:3e:04:9c:cd txqueuelen 1000 (Ethernet)
RX packets 1592318 bytes 183722250 (175.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1539361 bytes 154044090 (146.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
参数解析如下:
-
eth0
对应有线连接(对应你的有线网卡),就是用网线来连接的上网。eth
是Ethernet
的缩写,表示“以太网”。有些电脑可能同时有好几条网线连着,例如服务器,那么除了eht0
,你还会看到eth1 、 eth2
等。 -
lo
表示本地回环(Local Loopback
的缩写,对应一个虚拟网卡)可以看到它的ip
地址是127.0.0.1
。每台电脑都应该有这个接口,因为它对应着“连向自己的链接”。这也是被称之为“本地回环”的原因。所有经由这个接口发送的东西都会回到你自己的电脑。看起来好像并没有什么用,但有时为了某些缘故,我们需要连接自己。例如用来测试一个网络程序,但又不想让局域网或外网的用户查看,只能在此台主机上运行和查看所有的网络接口。例如在我们启动一个前端工程时,在浏览器输入127.0.0.1:3000
启动项目就能查看到自己的web
网站,并且它只有你能看到。 -
wlan0
表示无线局域网(上面案例并未展示)。
30. wget
可以使我们直接从终端控制台下载文件,只需要给出文件的HTTP或FTP地址。
wget [参数][URL地址]
wget http://www.minjieren.com/wordpress-3.1-zh_CN.zip
wget
非常稳定,如果是由于网络原因下载失败, wget
会不断尝试,直到整个文件下载完毕。
常用参数如下:
- -c 继续中断的下载。
31. vim
- 打开 Vim
在终端命令行中输入 vim
回车后 Vim
就会被运行起来,也可以用 Vim 来打开一个文件,只需要在 vim
后面再加文件名。如 vim file.name
,如果文件不存在,那么会被创建。
- 插入
进入文件之后,此时处于交互模式,可以通过输入 i
进入插入模式。
- 移动
在 Vim
的交互模式下,我们可以在文本中移动光标。
-
h 向左移动一个字符
-
j 向下移动一个字符
-
k 向上移动一个字符
-
i 向右移动一个字符
当然也可以使用四个方向键进行移动,效果是一样的。
- 跳至行首和行末
-
行首:在交互模式下,为了将光标定位到一行的开始位置,只需要按下数字键
0
即可,键盘上的Home
键也有相同效果。 -
行末:在交互模式下,为了将光标定位到一行的末尾,只需要按下美元符号键
$
即可,键盘上的End
键也有相同效果。
- 按单词移动
在交互模式下,按字母键 w
可以一个单词一个单词的移动。
- 退出文件
在交互模式下,按下冒号键:
进入命令模式,再按下 q
键,就可以退出了。
如果在退出之前又修改了文件,就直接想用:q
退出 Vim
,那么 Vim
会显示一个红字标明错误信息。此时我们有两个选择:
- 保存并退出
:wq
或:x
; - 不保存且退出
:q!
。