Linux 常用命令
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
认识 Linux 目录结构
Linux 系统中磁盘上的文件和目录被组成一棵目录树每个节点都是目录或文件
Linux 是一个树形目录结构。Linux 上没有盘符概念不分 C 盘等根目录 \
的地位相当与 Java 的 Object
——几个特殊的目录
/
称为根目录.
称为当前目录..
称为当前目录的上级目录
——绝对路径 vs 相对路径
形如/usr/share/tomcat/logs/ 以根目录开头的称为绝对路径
形如./logs 以 . 或者 … 开头的为相对路径
使用 tab 键补全
我们敲的所有的 Linux 命令都可以使用 tab 键来尝试补全加快效率
——使用 ctrl + c 重新输入
如果命令或者目录敲错了可以 ctrl + c 取消当前的命令
——关于 XShell 下的复制粘贴
复制ctrl + insert (有些同学的 insert 需要配合 fn 来按)
粘贴shift + insert
ctrl + c / ctrl + v 是不行的
——Ctrl+ l 清空屏幕内容
1、ls
语法 ls
[选项] [目录或文件] ls–list
功能 对于目录该命令列出该目录下的所有子目录与文件。对于文件将列出文件名以及其他信息。类似于在 windows 上双击某个目录把它打开看看目录里有啥
常用选项 Linux 的命令很多都支持 “选项"在命令后面跟上 -
以及一些 特殊的字母 / 单词来开启不同的功能
-
a 列出目录下的所有文件包括以 . 开头的隐含文件。
-
d 将目录象文件一样显示而不是显示其下的文件。 如ls –d 指定目录
-
k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
-
l
列出文件的详细信息。 -
r 对目录反向排序。
-
t 以时间排序。
-
R 列出所有子目录下的文件。(递归)
——其中白色的是普通文件蓝色的是目录浅蓝是快捷方式
——相对路径
——这里 /
是 Linux 上的特殊目录称为 “根目录” 相当于 windows 的 “此电脑”。这里的这些目录就相当于 “系统文件”这些内容在机器上构成了一个 N 叉树的结构
列出文件的详细信息
——小写的 L表示使用列表的方式来列出目录中的内容
ls -l /
这是咱们最常用的命令一般直接使用 ll
来替代l => ls -l 的缩写形式
2、pwd
语法 pwd
功能 显示用户当前所在的目录 。在使用命令行的时候有的时候目录结构比较复杂容易不记得自己在哪了 (迷路了)
——显示出了当前目录所对应的绝对路径~~
在 windows 上就是以盘符开头的路径就是绝对路径E:\DevTools…
在 Linux 上是以 /
开头 (根目录) 就是绝对路径~~
表示当前处于 根目录下的 root 目录中
3、cd
change directory 切换目录cd 和 ls 是工作中最高频使用的命令
ls, cd, pwd 操作目录的一些常见命令起到了类似于 “文件资源管理器” 这样的功能
语法 cd 目录名这个路径可以是绝对路径 以 / 开头的也可以是相对路径 以 . 或 … 开头的 其中 . 有时可以省略
功能 改变工作目录。将当前工作目录改变到指定的目录下
举例
cd ..
: 返回上级目录
cd ~
进入用户家目
cd -
返回最近访问目录
——cd 就相当于 win 鼠标双击目录进行切换了
切换回 /root
[root@VM-16-7-centos /]# cd /root
[root@VM-16-7-centos ~]# pwd
/root
——相对路径..
表示当前路径的上级路径
cd ./root 也可以简写为 cd root
可用 Tab 键补全
如果只有一个匹配的选项直接就补全了如果有多个选项需要双击 tab能列出所有的匹配结果
4、touch
语法 touch [选项]… 文件…
功能 touch 命令参数可更改文档或目录的日期时间 包括存取时间和更改时间或者新建一个不存在的
文件。
——例如touch hello.txt如果存在文件更新文件访问时间
没有提示说明成功了如果出错了会有报错信息。当前处在哪个目录下 (pwd 的结果是什么)此时文件就创建在哪里~
5、cat
语法 cat [选项] [文件] concatenate
功能 查看目标文件的内容
常用选项
-n
对输出的所有行编号
cat hello.txt
6、echo
打印内容到控制台也可以用于写文件
echo 'hello'
是打印字符串echo 'hello' > hello.txt
就是重定向把当前的字符串给写到文件里了~~>
是覆盖>>
是拼接
此处的读写文件只是能进行简单的读写不能进行复杂的编辑
7、vim
vim 是一个知名的文本编辑器前面学习的 cat, less, head, tail 等命令只能查看文本不能编辑文本使用 vim 就可以进行编辑了
vim 就相当于 Linux 上默认的记事本但是使用起来比记事本难度大
vim 最关键的概念模式 (mode)vim主要是引入了海量的快捷键因此为了支持这么多的快捷键就需要使用模式来区分别的编辑器。别的编辑器快捷键主要是通过组合键 ctrl shift alt… 组合键的效率不如单个按键
- 创建文件 / 打开文件
- 进入插入模式
- vim 打开文件后默认是普通模式 (normal mode)普通模式下键盘的按键表示一些特殊功能的快捷键 (例如按下 j 并不是
输入字母 “j”而是表示光标往下移动一行 - 需要进入插入模式 (insert mode) 才能进行文本编辑
- 使用
i
键可以进入到插入模式 (左下角提示 --INSERT-- ) 然后就可以像记事本一样正常编辑了
- vim 打开文件后默认是普通模式 (normal mode)普通模式下键盘的按键表示一些特殊功能的快捷键 (例如按下 j 并不是
- 保存
- 在插入模式下不能保存文件需要先回到 普通模式按下 Esc 回到普通模式 vim 有十几种模式都是通过
Esc
回到普通模式) - 在普通模式下输入
:w
再按下回车即可保存文件
- 在插入模式下不能保存文件需要先回到 普通模式按下 Esc 回到普通模式 vim 有十几种模式都是通过
- 退出
- 在插入模式下不能退出需要先回到 普通模式
- 在普通模式下输入
:q
再按下回车即可退出
也可以直接使用:wq
同时执行保存和退出
如果 vim 没有正确关闭在下次启动的时候会报错提示你上次没正确关闭可以直接按 D
就是删除未保存的内容R
就是恢复之前的编辑内容
熟练使用 Vim 能够大大提高代码编辑效率主流的开发工具 (比如 IDEA, VSCode 等) 都支持 Vim 风格的快捷键
遗憾的是熟练使用 Vim 并不是一件容易的事情可能需要长达几年的练习但是我们只要使用 vim 编辑服务器上的配置文件或者查看服务器的日志文件 就够用了。C++ 的 vim 要讲很多用 vim 作为主力开发工具vim是可以用来写代码的vim 是可以搭配很多插件来提供一些语法高亮代码补全
8、mkdir
语法 mkdir [选项] dirname…
功能 在当前目录下创建一个目录make directory
常用选项
-p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在加上此选项后系统将自动建立好那些尚不存在的目录即一次可以建立多级目录
创建多个目录
递归建立多个目录
当使用 mkdir 连续创建很多目录之后就容易搞不清楚目录结构可以通过一个 tree 这样的命令来直观的看到目录是如何构成的!!!
前面说的命令都是 Linux 自带的tree 不是是属于第三方提供的命令要单独下载安装!!
yum install tree
90 年代就有这个包管理器了yum 相当于 “应用商店"称为 “包管理器”应用商店也是仿照包管理器来发明出来的~~
9、rm
语法 rm [-f-i-r-v] [dirName/dir]
功能 删除文件或目录remove
常用选项
- -f 即使文件属性为只读(即写保护)亦直接删除
- -i 删除前逐一询问确认
- -r 删除目录及其下所有文件
——删除文件
——删除目录rm -r 目录名
才能删除目录-r 选项表示 “递归”。一个目录里可以有文件还可以有子目录这个删除就是把里面的所有内容都删了
理解递归删除的过程
先手动创建如下目录结构:
test
├── a
│ ├── a1
│ │ ├── 1.txt
│ │ └── 2.txt
│ └── a2
├── b
│ ├── b1`
│ │ ├── 1.txt
│ │ └── 2.txt
│ └── b2
└── c
使用 rm -ri 命令删除 test, 观察删除的顺序
——在刚才的删除操作中有提示问是否真的删除使用 -f
选项就可以直接删除不提示~~
重要注意事项
千万不要运行 rm -rf / , 尤其是在公司的生产服务器上
rm -rf /把你整个磁盘上的所有文件都删了包括系统文件 (你自己的系统启动需要的文件)
如果你这个机器上是有重要数据的话就完了
windows 有个回收站删的东西是先进入了回收站还能后悔!!
linux 上是没有回收站的 (也可以有)直接删除文件无法被恢复!! 一定要想清楚你当前这个东西是不是真的能删!!
和数据库 drop table/database 一样
mkdir, ls 等 linux命令其实就是一些特定的可执行文件能敲这个命令运行其实就是 linux 在执行这些文件的内容…
rm -rf / 所有的文件目录都没了包括上述的创建目录指令…
rm -rf/ 等同于 rm -rf /。 表示通配符可以代表任意字符串~~**
但是仍然经常有人会真的敲这个命令 (不是故意的不小心敲出来的)
1)、rm -rf / root/abc.txt
本来我想删除的是 /root/abc.txt
普通文件不小心多敲了个空格~~
rm 就会认为你是要删除两个目录!! /
./root/abc.txt
2)、Linux shell 脚本
DIR = abc.txt
…(其他代码)
rm -rf /${DIR}
万一执行到这个代码的时候DIR 因为一些原因没有被定义那么此处不会报错而是把 DIR 视为空字符串
仍然会生成 rm -rf 这样的命令!!!
10、mv
语法 mv (move) [选项] 源文件或目录 目标文件或目录
功能
1.) 视 mv 命令中第二个参数类型的不同是目标文件还是目标目录mv 命令将文件重命名或将其移至一个新的目录中。
2.) 当第二个参数类型是文件时mv 命令完成文件重命名此时源文件只能有一个也可以是源目录名它将所给的源文件或目录重命名为给定的目标文件名。
3.) 当第二个参数是已存在的目录名称时源文件或目录参数可以有多个mv命令将各参数指定的源文件均移至目标目录中。
常用选项
-f force 强制的意思如果目标文件已经存在不会询问而直接覆盖
-i 若目标文件 (destination) 已经存在时就会询问是否覆盖
——将 hello.txt 移入 aaa 目录
——..
表示将文件移回上级目录
——将 hello.txt 文件名改为 java.txt
11、cp
语法 cp (copy) [选项] 源文件或目录 目标文件或目录
功能 复制文件或目录粘贴
说明 cp 指令用于复制文件或目录如同时指定两个以上的文件或目录且最后的目的地是一个已经存在的目录则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录而最后的目的地并非一个已存在的目录则会出现错误信息
常用选项
-f 或 --force 强行复制文件或目录 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
-r 如果拷贝的是目录需要递归处理将指定目录下的文件与子目录一并处理否测回报错。 若源文件或目录的形态不属于目录或符号链接则一律视为普通文件处理
-R 或 --recursive递归处理将指定目录下的文件及子目录一并处理
——复制 java.txt 到 java2.txt文件内容一样
man
Linux 的命令有很多参数我们不可能全记住我们可以通过查看联机手册获取帮助。
语法 man [选项] 命令
常用选项
-k 根据关键字搜索联机帮助
num 只在第 num 章节找
man man 能够看到 man 手册中的若干个章节及其含义
例man ls
less
语法 less [参数] 文件
功能 查看文件内容不会立刻把所有文件内容加载到内存中 也能进行查找
选项
j k / 方向键向上向下滚动屏幕
-N 显示每行的行号
/字符串向下搜索“字符串”的功能
n重复前一个搜索与 / 或 ? 有关
q退出
head
语法 head [参数]… [文件]…
功能 head 用来显示档案的开头至标准输出中默认head命令打印其相应文件的开头10行。
选项
-n<行数> 显示的行数
tail
语法 tail [必要参数] [选择参数] [文件]
功能 用于显示指定文件末尾内容不指定文件时作为输入信息进行处理。常用查看日志文件。
选项
-f 循环读取
-n<行数> 显示行数
举例 有一个文件共有 100 行内容请取出第 50 行内容
# 方法1
head -n50 test > tmp # 将前50行装入临时文件 tmp
tail -n1 tmp # 得到中间行
# 方法2
head -n50 test | tail -n1
关于重定向
Linux 的很多指令如 cat head tail 等都是默认输出到 “标准输出” 中也就是显示器上的。可以通过 > 这样的符号把本来要输出到标准输出上的内容写到特定文件中这样的操作称为 “重定向”
重定向有三种方式
1、标准输入重定向(<)
# 先构造一个文件, 里面添加一些内容. cat < test.txt
2、标准输出重定向 (>)
cat test.txt > test2.txt
3、标准错误重定向 (2>)注意 2 和 > 之间不能有空格
# 尝试删除一个不存在的文件 rm aaa > test.txt # 输出结果, 这个提示并没有被重定向到 test.txt 文件中. rm: cannot remove ‘aaa’: No such file or directory # 正确做法 rm aaa 2> test.txt
标准输入标准输出标准错误是三个特殊的文件每个进程在启动的时候都会默认打开。分别对应到键盘显示器显示器这样的设备
在 Java 中分别对应到 System.in , System.out , System.err
关于管道
管道是一种古老的 “进程间通信” 方式在 Linux 指令中可以使用
|
作为管道标记
意思是将前一个指令标准输出的内容作为第二个指令的标准输入内容
date
date 指定格式显示时间 date +"%Y-%m-%d %H:%M:%S"
date 用法 date [OPTION]… [+FORMAT]
-
在显示方面使用者可以设定欲显示的格式格式设定为一个加号后接数个标记
- %H : 小时(00…23)
- %M : 分钟(00…59)
- %S : 秒(00…61)
- %X : 相当于 %H:%M:%S
- %d : 日 (01…31)
- %m : 月份 (01…12)
- %Y : 完整年份 (0000…9999)
- %F : 相当于 %Y-%m-%d
-
时间戳
- 时间->时间戳date +%s
- 时间戳->时间date -d@1508749502
- Unix时间戳英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp是从 1970 年 1 月 1 日UTC/GMT的午夜开始所经过的秒数不考虑闰秒
grep
语法 grep [参数]… [文件]…
功能 用于查找文件中是否包含指定字符串并显示对应的行
选项
-n<行数> 显示的行数
-w 全字匹配要求整个单词都完全相同的结果才能匹配出来而不仅仅是一个单词的一部分
-r 递归查找可以搜索多级目录下的所有文件
–color 高亮查找到的结果
–include 指定查找某些文件
–exclude 指定排除某些文件
ps
语法 ps [参数]…
功能 用于查看当前系统上运行的进程
选项
a 显示一个终端的所有进程
u 以用户为主的格式来显示程序状况
x 显示所有程序不以终端机来区分
举例
ps aux # 显示系统上所有的进程
ps aux | grep "进程名"
ps aux | grep "进程id"
netstat
语法 netstat [参数]…
功能 查看系统上的网络状态
选项
-a 显示所有正在或不在侦听的套接字
-n 显示数字形式地址而不是去解析主机、端口或用户名
-p 显示套接字所属进程的PID和名称
举例
netstat -anp
netstat -anp | grep "进程名"
netstat -anp | grep "端口号"
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |