目录
Linux命令在我们开发人员中是必不可少的一个东西,如果实操比较少的话,需要主动去记忆,可是就因为实操比较少,所以又容易忘记。这就形成了一个坏循环。
本文将Linux命令分门别类地整理出来,方便自己、方便大家,不用刻意记忆,收藏之后等到需要的时候直接查阅即可,就像一个字典一样。等大家用的多了,自然也就记得住了。
前言
连接Linux服务器的客户端工具有很多,一般我们使用的是XShell、SecureCRT、Putty、terminus(免费与收费都有)、tabby(免费)等,免费的一些有FinalShell(国产免费,操作命令与文件合一)、MobaXterm(操作命令与文件合一)等。
一、目录介绍
1.1. 目录结构
linux系统没有盘符,一切从根目录/开始,如下图:
根目录下所有子目录:
分别是:
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
1.2. 目录含义
目录 | 含义 |
bin | binary的缩写,此目录下存放的是二进制可执行文件,存放着所有的linux系统命令 |
boot | 该目录下存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件 |
dev | device的缩写,该目录存放Linux的设备文件。在Linux中访问设备的方式和访问文件的方式是相同的 |
etc | 存储配置文件的目录,以后网卡配置文件,权限配置文件都在这里。该目录存放的是系统管理所需要的配置文件和子目录 |
home | 存放所有普通用户的主目录的位置。Linux中,每一个用户都有一个自己的目录,目录以用户的账号命名。 |
lib | 该目录存放的是系统最基本的动态链接共享库,类似于Windows中的DLL文件 |
lib64 | |
media | 该目录下存放的是 Linux自动识别的一些设备,如:U盘、光驱等等。。。 |
mnt | 该目录可以让用户临时挂载别的文件系统,比如光驱。。。 |
opt | 该目录存放服务器额外安装的一些软件,比如mysql、nginx,docker.....,该目录默认是空的 |
proc | 该目录是一个虚拟目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 |
root | 超级管理员root用户的主目录 |
run | 该目录下存放系统启动以来的信息。如果系统重启,这个目录下的文件应该被删掉或清除 |
sbin | system binary的缩写,此目录下存放的是用于系统管理的二进制文件,是系统管理员专用的 |
srv | 该目录存放 服务启动之后需要提取的数据 |
sys | 该目录下安装了Linux2.6内核中新出现的一个文件系统sysfs |
tmp | 该目录用来存放一些临时文件 |
usr | (unix shared resources)资源共享目录,所有用户都可以操作的目录,以后我们安装软件就安装到这里usr/local,这样所有用户都可以使用软件 |
usr/bin | 用户使用的应用程序 |
usr/sbin | 超级用户使用的比较高级的管理程序和系统守护程序 |
var | 该目录下存放经常被修改的东西,比如各种的日志文件 |
lost+found | 这个目录下一般是空的,当系统非法关机后,这里就存放了一些文件 |
符号 | 含义 |
/ | 根目录 |
. | 当前目录 |
.. | 上一级目录 |
~ | 返回当前用户主目录 |
- | 返回上一次目录 |
二、文件、目录的创建、删除、复制、移动、重命名
# 创建文件
touch test.txt
# 创建文件夹
mkdir test
# 创建多级目录,如果父目录不存在会先创建父目录再创建子目录
mkdir -p /usr/local/software
# 创建多级目录,同时创建多个目录,以英文逗号分割,中间不能有空格
mkdir -p /usr/local/{software,file,image}
# 在当前目录下创建多个目录
mkdir -p {software,file,image}
# 删除文件
rm -f file_name
# 删除当前目录下所有以test开头的文件
rm -f test*
# 删除文件夹
rm -rf dir_name
# 删除当前目录下所有以test开头的文件夹及其子文件夹
rm -rf test*
# -r 就是向下递归,无论有多少级目录,一并删除;
# -f 就是直接强行删除,不做任何提示的意思
# 复制文件
# 复制一份test文件,新文件名为test1
cp test test1
# 复制software目录及其子目录下的文件
cp -r software soft
# 移动文件
# 将test文件移动到/home/file目录下
mv test /home/file/
# 重命名
# 将test文件重命名为demo
mv test demo
注意:
不要随便使用rm -rf强制删除一些文件或者文件夹,若是产生误操做,基本不能被找回
三、Linux社区提供的方法
# 1.删除当前目录下的文件
rm -f *blog
# 2.最经典的方法,删除当前目录下的全部类型的文件——递归
find . -type f -delete
# 或
find . -type f -exec rm -f {} \
# 3.用find命令查找普通文件并删除or用find命令的处理动作将其删除
find . -type f | xargs rm -f
# 4.用于参数列表过长,要删除的文件太多
rm -f `find . -type f`
# 5.删除所有普通文件
# 用for循环语句删除指定目录下的全部类型的文件
for delete in `ls -l`;do rm -f * ;done
四、查找文件
# 查找文件
whereis filename
# which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
# 也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
# 查看可执行文件的位置
# 查找java安装目录
which java
# 查找Nginx安装目录
which nginx
# 在指定目录下查找文件
# 从根目录开始查找test.txt文件
find / -name test.txt
# 从当前目录下开始查找test.txt文件
find ./ -name test.txt
# 定位文件
locate filename
五、查看、编辑文件
查看文件一般有三种命令,分别是:cat、less、more,编辑文件一般是vi、vim。
5.1. cat命令
# 查看test文件的内容
# cat test.txt
# 查看文件的内容,并对所有输出行进行编号(包括空白行)
cat -n filename
# 用法和 -n 差不多,但是不对空白行编号
cat -b filename
# 遇到有连续两行或两行以上的空白行,就代换为一行的空白行
cat -s filename
# 在输出内容的每一行后面加一个$符号(包括空白行)
cat -e filename
# 创建新文件
cat >test.txt
# 在原文件的末尾追加内容
cat >>test.txt
# 合并多个文件:将file1 和file2 合并成一个新的文件file
# 如果file以前有内容,则先会清除它们然后再写入合并后的内容
cat file1 file2 > file
# 合并多个文件,不清楚file文件内容
cat file1 file2 >> file
5.2. less命令
# 查看文件内容
less test.txt
# 显示行号
less -N test.txt
输入less查看文件之后的操作:
G(z)到文件末尾
g到文件开头
?字符串:向上搜索“字符串”
/字符串:向下搜索“字符串”
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一行
回车键 滚动一页
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页j 下一行
k 上一行
5.2.1. 实操实例一
# 1.带行号显示test文件
less -N test.txt
# 2.显示文件末尾的内容
G
# 3.回到文件开头
g
# 4.向下搜索
/
# 5.查看下一个(自上而下搜索,此时下一个是向下的)
n
# 6.查找上一个
N
5.2.2. 实操实例二
# 1.带行号显示test文件
less -N test.txt
# 2.显示文件末尾的内容
G
# 3.向上搜索
?
# 4.查看下一个(自下而上搜索,此时下一个是向上的)
n
# 5.查找上一个
N
注意:
less的退出命令是按ESC,然后英文冒号,最后q回车。
或者ZZ
less命令的其他常用操作:
# 分页查看历史操作命令,查看之后的操作通less
history | less
5.3. more命令
Linux中 more命令功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上。more命令和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容。
# 查看test文件内容,按分页显示
more test.txt
# 从第n行开始显示
more +n test.txt
输入more之后的操作:
空格键 (space):下一页
Enter:代表向下翻n行,需要定义,默认为1行。
q:代表立刻离开 more ,不再显示该文件内容。
=:输出当前行号
有了cat和less之后,基本上more命令就很少使用了,我个人在工作中使用最多的就是cat和less。
5.4. vi、vim命令
vi、vim命令是我们在Linux中编辑文件中最常用的命令。vim 是一个全屏幕纯文本编辑器,是 vi 编辑器的增强版。它们的操作是一样的,不同的是有一些Linux系统中并没有vim命令,或者说是没有安装vim命令,此时就要使用vi命令来操作。
vim有三种模式,分别是:命令模式、插入模式、末行模式(编辑模式)。
命令模式:是主要输入快捷键的模式。命名模式要想进入输入模式,可以使用 a i o 等快捷键来进入。
i 在当前光标前插入字符
a 在当前光标后插入字符
o 在当前光标下一行插入字符
vim命令的光标移动我们一般使用的是上下左右的箭头,其实还有比较快捷的指令:
h:左移
l:右移
j:下移
k:上移
# 编辑test文件
vim test.txt
vim命令的退出:
都是先按ESC,然后英文冒号,接着输入不同的指令有不同的效果。
q:不报错退出,一般是文件没有修改时使用
q!:强制退出,不保存,一般是修改了文件,但是不想修改了
wq:保存退出
wq!:强制保存退出
^ 移动到行首
$ 移动到行尾
G 移动到最后一行
gg 移动到第一行
:n 移动到第n行
nG 移动到第n行
:set nu 显示行号
:set nonu 取消行号
# D和dd的区别是:D只能删除非空行,dd可以删除空行和非空行;
# D删除了空行之后必须移动光标才能删除下一行,而dd可以连续删除,
# 也就是删除了一行之后会把下方的内容移动到被删除的那一行,所以可以继续删除。
# 而D只是删除了一行内容,其他的内容未移动。
D 删除一行(非空行)
dd 删除一行
2dd 删除光标(含)所在的下方2行
3dd 删除光标(含)所在的下方3行
ndd 删除光标(含)所在的下方n行
x 删除光标所在字符
nx 删除n个字符
u 撤销,一次撤销一个操作,可以一直撤销到最开始无操作的时候
ctrl + r 反撤销,一次反撤销一个操作,可以一直撤销到最开始撤销的时候
yy 复制
nyy 复制n行
p 粘贴(小写p,在当前光标所在行下方粘贴)
P 粘贴(大写P,光标所在行上方粘贴)
r 替换光标所在处的字符
R 从光标所在处开始替换字符,按 esc 键结束
# 上下分屏编辑两个文件
vim -o test1.txt test2.txt
# Ctrl + w 然后按上下箭头切换上下两个文件
# 左右分屏编辑两个文件
vim -o test1.txt test2.txt
# Ctrl + w 然后按左右箭头切换左右两个文件
5.5. head、tail
# 查看test文件的前10行(默认是10行)
head test.txt
# 查看test文件的前30行
head -30 test.txt
# 查看test文件的后10行(默认是10行)
tail test.txt
# 查看test文件的后30行
tail -30 test.txt
权限
# 赋予其他用户读写权限
chmod o+rw test.txt
# 赋予所有用户读写权限
chmod a+rw test.txt
# 赋予所有用户执行权限
chmod a+x test.txt
检索
# 检索进程名称为nginx的第二个参数,也就是进程号,并输出。
# awk目前普遍使用的是gawk,类似于vim
# awk是一种强大的文本处理工具
ps -ef | grep nginx | gawk '{print $2}'
# 检索进程名称为nginx的第二个参数,也就是进程号,
# 并赋值给processId变量,脚本如下
# 注意:=左右不能有空格
#! bin/bash
processId=`ps -ef | grep nginx | gawk '{print $2}'`
echo $processId
# 查看Linux版本信息
cat /etc/redhat-release
# 查看CPU信息
lscpu
# 修改主机名
hostnamectl set-hostname master
# 查看主机名
hostname
# 查看修改结果,该命令是用来查看操作系统、内核版本等信息
hostnamectl status
# 设置 hostname 解析
echo "127.0.0.1 $(hostname)" >> /etc/hosts
解压Zip文件:
unzip jboss-as-7.1.1.Final.zip -d /opt/jboss
解压后,当前文件不做变更(解压),解压到指定目录。
rpm:Linux rpm 命令用于管理套件。
rpm(英文全拼:redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。
参考:Linux的rpm命令
tar:Linux tar(英文全拼:tape archive )命令用于备份文件。
tar 是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。
tar -zxvf file_name.tar.gz
netstat:Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
# 查看端口使用情况
netstat -anp | grep 8080
# 查看所有已经使用的端口的情况
netstat -nultp
ps:ps命令将某个进程显示出来。PS是LINUX下最常用的也是非常强大的进程查看命令
# 查看父进程.
ps -ef | grep <进程名>
# 检查java 进程是否存在
ps -ef | grep java
# 在显示的输出中,第三列就是该进程的父进程PID,然后可以再使用ps命令来查看父进程的名称
ps -ef | grep <父进程PID>
# 查看线程
ps hH p <pid>
ps -ef | grep java的显示结果
字段含义如下:
UID PID PPID C STIME TTY TIME CMDzzw 14124 13991 0 00:38 pts/0 00:00:00 grep --color=auto dae
UID :程序被该 UID 所拥有
PID :就是这个程序的 ID
PPID :则是其上级父程序的ID
C :CPU使用的资源百分比
STIME :系统启动时间
TTY :登入者的终端机位置
TIME :使用掉的CPU时间。
CMD :所下达的是什么指令
中间的|是管道命令 是指ps命令与grep同时执行
grep:Linux grep 命令用于查找文件里符合条件的字符串。grep命令是查找,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
# 在当前目录中,查找后缀有.log字样的文件中包含 test 字符串的文件,并打印出该字符串的行
grep test *.log
# 以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所# # 有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容
grep -r update /etc/acpi
# 反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。
# 查找文件名中包含 test 的文件中不包含test 的行
grep -v test *test*
#查找文件名中包含test 的文件中不包含test 的行
grep-v test*
文件输出:
文件描述符
首先,我们说一下文件描述符。
Linux中文件描述符英文简称为fd,全程为File descriptor。Linux系统预留了三个文件描述符,分别为:0、1、2。其中:
- 0-标准输入(stdin),从键盘获得输入,/proc/self/fd/0
- 1-标准输出(stdouot),输出到屏幕(即控制台),/proc/self/fd/1
- 2-标准错误(stderr),输出到屏幕(即控制台),/proc/self/fd/2
也就是说,默认情况下,0是指从键盘获得输出的内容,1代表普通内容输出到屏幕上,2代表错误信息输出到屏幕上。
/dev/null代表Linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。
# 把标准输出的内容输出到null,也就是黑洞中,结果就是废弃掉所有的标准输出
1 > /dev/null
# 把错误输出的内容输出到null...
2 > /dev/null
如果1和2连起来处理:
# 把标准输出重定向到黑洞,然后把标准错误重定向到标准输出1。
# 也就是说,标准输出和错误输出都进了黑洞,等于日志全部抛弃。
>/dev/null 2>&1
# 等同于
1>/dev/null 2>&1
# 把标准错误重定向到标准输出1,也就是屏幕上。
# 把标准输出重定向到黑洞,也就是放弃了。
# 最终的意思是,标准日志都抛弃了,只把错误的信息显示到屏幕上。
2>&1 >/dev/null
# 粘贴复制代码自带空格与缩进
# 输入内容之前,先输入以下命令
:set paste
# 输入内容之后再输入以下命令结束
:set nopaste
> stdout.log
六、清空文件
6.1 cat命令
cat /dev/null > fileName
6.2 vim、vi命令
使用vi/vim命令打开文件后,输入"%d"清空,后保存即可。但当文件内容较大时,处理较慢。
vim fileName
# 打开之后输入以下命令
:%d
# 按ESC,然后保存即可
:wq
七、du
在Linux服务器上,可以使用一下命令查看du的使用说明:
du --help
不止 du 命令,很多 Linux 命令都可以使用 --help 来查看使用说明。
查看 du 的命令帮助之后,我们可以可以看到:
Usage: du [OPTION]... [FILE]...
下面介绍几个常用参数。
# 查看当前文件夹所有文件大小
du -a
# 查看当前文件夹总计大小
du -c
# 以上显示的都是kb,一般我们使用ll或者ls -l显示的是字节,也就是Byte
# 下面的参数可以以人类刻度的格式输出大小,比如,1k、2M、3G
du -h
# 分别计算命令中每个参数所占的总用量,说白了就是只计算一个总数,一般和h参数一起使用
du -s
# 以人类可读的方式输出当前文件夹下总大小
du -sh
# 显示指定层次目录的大小
du -d 数字
# 比如
du -d 1
# 这个命令等同于 --max-depth=N
# 如果 --max-depth=0,则等于 --summarize,而--summarize是s参数的长命令
# 也就是说,du --max-depth=0 等效于 du -s
# 一般地,以人类可读的参数h,如果和其他参数联合使用,而后面的参数有值要输入
# 那么就需要将需要输入取值的参数放后面,可以和取值匹配
# 如果我们输入 du -dh 2 是会报错的,应该输入
du -hd 2