Linux及tmux、vim常用命令

Linux

关于Linux的简介、诞生、迭代,大家可以去网上查一查,这里不多做赘述了

Linux文件类型

非常重要的文件类型有: 普通文件目录文件链接文件设备文件管道文件Socket 套接字文件 等。

  • 普通文件(-):用于存储信息和数据, Linux 用户可以根据访问权限对普通文件进行查看、更改和删除。比如:图片、声音、PDF、text、视频、源代码等等。
  • 目录文件(d,directory file):目录也是文件的一种,用于表示和管理系统中的文件,目录文件中包含一些文件名和子目录名。打开目录事实上就是打开目录文件。
  • 符号链接文件(l,symbolic link):保留了指向文件的地址而不是文件本身。
  • 字符设备(c,char):用来访问字符设备比如键盘。
  • 设备文件(b,block):用来访问块设备比如硬盘、软盘。
  • 管道文件(p,pipe) : 一种特殊类型的文件,用于进程之间的通信。
  • 套接字文件(s,socket):用于进程间的网络通信,也可以用于本机之间的非网络通信。

每种文件类型都有不同的用途和属性,可以通过命令如lsfile等来查看文件的类型信息。

bash 复制代码
# 普通文件(-)
-rw-r--r--  1 user  group  1024 Apr 14 10:00 file.txt

# 目录文件(d,directory file)*
drwxr-xr-x  2 user  group  4096 Apr 14 10:00 directory/

# 套接字文件(s,socket)
srwxrwxrwx  1 user  group    0 Apr 14 10:00 socket

Linux目录树

Linux 使用一种称为目录树的层次结构来组织文件和目录。目录树由根目录(/)作为起始点,向下延伸,形成一系列的目录和子目录。

常见目录说明

  • /bin: 存放二进制可执行文件(ls、cat、mkdir 等),常用命令一般都在这里;
  • /etc: 存放系统管理和配置文件;
  • /home: 存放所有用户文件的根目录,是用户主目录的基点,比如用户 user 的主目录就是/home/user,可以用~user 表示;
  • /usr: 用于存放系统应用程序;
  • /opt: 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把 tomcat 等都安装到这里;
  • /proc: 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息;
  • /root: 超级用户(系统管理员)的主目录(特权阶级);
  • /sbin: 存放二进制可执行文件,只有 root 才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如 ifconfig 等;
  • /dev: 用于存放设备文件;
  • /mnt: 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统;
  • /boot: 存放用于系统引导时使用的各种文件;
  • /lib 和/lib64: 存放着和系统运行相关的库文件 ;
  • /tmp: 用于存放各种临时文件,是公用的临时文件存储点;
  • /var: 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等;
  • /lost+found: 这个目录平时是空的,系统非正常关机而留下"无家可归"的文件(windows 下叫什么.chk)就在这里。

常用文件管理命令

(1) ctrl c: 取消命令,并且换行
(2) ctrl u: 清空本行命令

**(3) tab键:**可以补全命令和文件名,如果补全不了快速按两下tab键,可以显示备选选项
(4) ls: 列出当前目录下所有文件,蓝色的是文件夹,白色的是普通文件,绿色的是可执行文件

  • ls -a:显示所有文件,包括隐藏文件
  • ls -l:显示详细信息
  • ls -lh:人性化输出详细信息

(5) pwd: 显示当前路径
(6) cd XXX: 进入XXX目录下, cd ... 返回上层目录

  • cd -:上一个目录和当前目录来回切换

(7) cp XXX YYY: 将XXX文件复制成YYY,XXX和YYY可以是一个路径,相当于复制+粘贴+重命名,比如cp .../a/text.txt .../b/text1.txt
(8) mkdir XXX: 创建目录XXX

  • mkdir a/b/c -p:创建多个文件夹a/b/c
  • mkdir a b c -p:创建三个单独的文件夹

(9) rm XXX(支持正则表达式): 删除普通文件; rm XXX -r: 删除文件夹

  • rm xxx yyy:删除两个文件
  • rm *.txt:删除文件以.txt结尾的所有文件
  • rm a/*:删除a文件夹中所有的文件
  • rm * -r:删除当前文件夹下的所有文件
  • rm /* -rf:不要用!!!会删掉虚拟机所有文件

(10) mv XXX YYY: 将XXX文件移动到YYY,和cp命令一样,XXX和YYY可以是一个路径;重命名也是用这个命令;相当于剪切+粘贴
(11) touch XXX: 创建一个文件
(12) cat XXX: 展示文件XXX中的内容
(13) 复制文本

windows/Linux下:Ctrl + insert,Mac下:command + c
(14) 粘贴文本

windows/Linux下:Shift + insert,Mac下:command + v

(15) 显示历史命令:history

tmux

操作

  1. tmux:新建一个session,其中包含一个window,window中包含一个pane,pane里打开了一个shell对话框

  2. 按下Ctrl+a后手指松开,然后按%:将当前pane左右半分成两个pane

  3. 按下Ctrl+a后手指松开,然后按 ":将当前pane上下半分成两个pane

  4. Ctrl+d:关闭当前pane;如果当前window的所有pane均已关闭,则关闭window;如果当前session的所有window均已关闭,则自动关闭session

  5. 鼠标点击可以选pane。

  6. 按下Ctrl+a后手指松开,然后按方向键:选择相邻的pane

  7. 鼠标拖动pane之间的分割线,可以调整pane之间分割线的位置

  8. 按住Ctrl+a的同时按方向键,可以调整pane之间分割线的位置

  9. 按下Ctrl+a后手指松开,然后按z:将当前pane全屏/取消全屏

  10. 按下Ctrl+a后手指松开,然后按d:挂起当前session

  11. tmux a:打开之前挂起的session

  12. 按下Ctrl+a后手指松开,然后按s:选择其他session

  • 上:选择上一项 session/window/pane
  • 下:选择下一项 session/window/pane
  • 右:展开当前项 session/window
  • 左:闭合当前项 session/window
  1. 按下Ctrl+a后手指松开,然后按c:在当前session中创建一个新的window

  2. 按下Ctrl+a后手指松开,然后按w:选择在其他window,操作方法与12完全相同

  3. 按下Ctrl+a后手指松开,然后按PageUp:翻阅当前panel内的内容

  4. 鼠标滚轮:翻阅当前pane内的内容。

  5. 在tmux中选中文本时,需要按住shift键。

  6. tmux中复制/粘贴文本的通用方式:

    • 按下Ctrl + a后松开手指,然后按[
    • 用鼠标选中文本,被选中的文本会被自动复制到tmux的剪贴板
    • 按下Ctrl + a后松开手指,然后按],会将剪贴板中的内容粘贴到光标处

vim

操作

  1. i:进入编辑模式
  2. ESC:进入一般命令模式
  3. h 或 左箭头键:光标向左移动一个字符
  4. j 或 向下箭头:光标向下移动一个字符
  5. k 或 向上箭头:光标向上移动一个字符
  6. l 或 向右箭头:光标向右移动一个字符
  7. n:n表示数字,按下数字后再按空格,光标会向右移动这一行的n个字符
  8. 0 或 功能键[Home]:光标移动到本行开头
  9. $ 或 功能键[End]:光标移动到本行末尾
  10. G:光标移动到最后一行
  11. :n 或 nG:n为数字,光标移动到第n行
  12. gg:光标移动到第一行,相当于1G
  13. n:n为数字,光标向下移动n行
  14. /word:向光标之下寻找第一个值为word的字符串。
  15. ?word:向光标之上寻找第一个值为word的字符串。
  16. n:重复前一个查找操作
  17. N:反向重复前一个查找操作
  18. :n1,n2s/word1/word2/g:n1与n2为数字,在第n1行与n2行之间寻找word1这个字符串,并将该字符串替换为word2
  19. :1,$s/word1/word2/g:将全文的word1替换为word2
  20. :1,$s/word1/word2/gc:将全文的word1替换为word2,且在替换前要求用户确认。
  21. v:选中文本
  22. d:删除选中的文本
  23. dd: 删除当前行
  24. y:复制选中的文本
  25. yy: 复制当前行
  26. p: 将复制的数据在光标的下一行/下一个位置粘贴
  27. u:撤销
  28. Ctrl + r:取消撤销
  29. 大于号 >:将选中的文本整体向右缩进一次
  30. 小于号 <:将选中的文本整体向左缩进一次
  31. :w 保存
  32. :w! 强制保存
  33. :q 退出
  34. :q! 强制退出
  35. :wq 保存并退出
  36. :set paste 设置成粘贴模式,取消代码自动缩进
  37. :set nopaste 取消粘贴模式,开启代码自动缩进
  38. :set nu 显示行号
  39. :set nonu 隐藏行号
  40. gg=G:将全文代码格式化
  41. :noh 关闭查找关键词高亮
  42. Ctrl + q:当vim卡死时,可以取消当前正在执行的命令
    异常处理:
    每次用vim编辑文件时,会自动创建一个.filename.swp的临时文件。
    如果打开某个文件时,该文件的swp文件已存在,则会报错。此时解决办法有两种:
    (1) 找到正在打开该文件的程序,并退出
    (2) 直接删掉该swp文件即可

补充

如何将服务器中的文件整个复制出来?

  1. 退出tmux
  2. cat filename:展示文件的内容
  3. 鼠标选中文本开头的若干字符
  4. 用滚轮滑到文件结尾
  5. 按住shift,同时鼠标点击文件结尾,此时会选中文件所有内容
  6. Windows/Linux下,按Ctrl+insert可以复制全文

ssh登录

基本用法

远程登录服务器:

bash 复制代码
ssh user@hostname
  • user:用户名
  • hostname:IP地域或域名

第一次登录时会提示:

bash 复制代码
The authenticity of host '123.57.47.211 (123.57.47.211)' can't be established.
ECDSA key fingerprint is SHA256:iy237yysfCe013/l+kpDGfEG9xxHxm0dnxnAbJTPpG8.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

输入yes,然后回车即可。

这样会将该服务器的信息记录在~/.ssh/known_hosts文件中。

然后输入密码即可登录到远程服务器中

默认登录端口号为22。如果想登录某一特定端口:

bash 复制代码
ssh user@hostname -p 22

配置文件

创建文件 ~/.ssh/config

然后在文件中输入:

Host myserver1
    HostName IP地址或域名
    User 用户名

Host myserver2
    HostName IP地址或域名
    User 用户名

之后再使用服务器时,可以直接使用别名myserver1myserver2

密钥登录

创建密钥:

ssh-keygen

然后一直回车即可。

执行结束后,~/.ssh/目录下会多两个文件:

  • id_rsa:私钥
  • id_rsa.pub:公钥

之后想免密码登录哪个服务器,就将公钥传给哪个服务器即可。

例如,想免密登录myserver服务器。则将公钥中的内容,复制到myserver中的~/.ssh/authorized_keys文件里即可。

也可以使用如下命令一键添加公钥:

bash 复制代码
ssh-copy-id myserver

执行命令

格式:

bash 复制代码
ssh user@hostname command

示例:

bash 复制代码
ssh user@hostname ls -a

或者

bash 复制代码
# 单引号中的$i可以求值
ssh myserver 'for ((i = 0; i < 10; i ++ )) do echo $i; done'

或者

bash 复制代码
# 双引号中的$i不可以求值
ssh myserver "for ((i = 0; i < 10; i ++ )) do echo $i; done"

scp传文件

基本用法

格式:

bash 复制代码
scp source destination

source路径下的文件复制到destination

一次复制多个文件:

bash 复制代码
scp source1 source2 destination

复制文件夹:

bash 复制代码
scp -r ~/tmp myserver:/home/acs/

将本地家目录中的tmp文件夹复制到myserver服务器中的/home/acs/目录下

scp -r ~/tmp myserver:homework/

将本地家目录中的tmp文件夹复制到myserver服务器中的~/homework/目录下

scp -r myserver:homework .

myserver服务器中的~/homework/文件夹复制到本地的当前路径下

指定服务器的端口号:

scp -P 22 source1 source2 destination

注意: scp-r -P等参数尽量加在sourcedestination之前。

使用scp配置其他服务器的vim和tmux

bash 复制代码
scp ~/.vimrc ~/.tmux.conf myserver:

管道

管道类似于文件重定向,可以将前一个命令的stdout重定向到下一个命令的stdin

要点

  1. 管道命令仅处理stdout,会忽略stderr
  2. 管道右边的命令必须能接受stdin
  3. 多个管道命令可以串联

与文件重定向的区别

  • 文件重定向左边为命令,右边为文件
  • 管道左右两边均为命令,左边有stdout,右边stdin

举例

统计当前目录下所有python文件的总行数,其中findxargswc等命令可以参考常用命令

find . -name '*.py' | xargs cat | wc -l

环境变量

Linux系统中会用很多环境变量来记录配置信息

环境变量类似于全局变量,可以被各个进程访问到。我们可以通过修改环境变量来方便地修改系统配置。

查看

列出当前环境下的所有环境变量:

env  # 显示当前用户的变量
set  # 显示当前shell的变量,包括当前用户的变量;
export  # 显示当前导出成用户变量的shell变量

输出某个环境变量的值:

echo $PATH

修改

环境变量的定义、修改、删除操作可以参考我写的Shell语法这一节的内容。

为了将对环境变量的修改应用到未来所有环境下,可以将修改命令放到~/.bashrc文件中。

修改完~/.bashrc文件后,记得执行source ~/.bashrc,来将修改应用到当前的bash环境下。

为何将修改命令放到~/.bashrc,就可以确保修改会影响未来所有的环境呢?

  • 每次启动bash,都会先执行~/.bashrc
  • 每次ssh登录远程服务器,都会启动一个bash命令行给我们
  • 每次tmux新开一个pane,都会启动一个bash命令行给我们
  • 所以未来所有新开的环境都会加载我们修改的内容

常见环境变量

  1. HOME:用户的家目录
  2. PATH:可执行文件(命令)的存储路径。路径与路径之间用:分隔。当某个可执行文件同时出现在多个路径中时,会选择从左到右数第一个路径中的执行。下列所有存储路径的环境变量,均采用从左到右的优先顺序
  3. LD_LIBRARY_PATH:用于指定动态链接库(.so文件)的路径,其内容是以冒号分隔的路径列表。
  4. C_INCLUDE_PATH:C语言的头文件路径,内容是以冒号分隔的路径列表。
  5. CPLUS_INCLUDE_PATH:CPP的头文件路径,内容是以冒号分隔的路径列表。
  6. PYTHONPATH:Python导入包的路径,内容是以冒号分隔的路径列表。
  7. JAVA_HOME:jdk的安装目录。
  8. CLASSPATH:存放Java导入类的路径,内容是以冒号分隔的路径列表。

常用命令

系统状况

  1. top:查看所有进程的信息 (Linux的任务管理器)
    • 打开后,输入M:按使用内存排序
    • 打开后,输入P:按使用CPU排序
    • 打开后,输入q:退出
  2. df -h:查看硬盘使用情况
  3. free -h:查看内存使用情况
  4. du -sh:查看当前目录占用的硬盘空间
  5. ps aux:查看所有进程
  6. kill -9 pid:杀死编号为pid的进程
    • 传递某个具体的信号:kill -s SIGTERM pid
  7. netstat -nt:查看所有网络连接
  8. w:列出当前登录的用户
  9. ping www.baidu.com:检查是否连网

文件权限

  1. chmod:修改文件权限
    • chmod +x xxx:给xxx添加可执行权限
    • chmod -x xxx:去掉xxx的可执行权限
    • chmod 777 xxx:将xxx的权限改成777
    • chmod 777 xxx -R:递归修改整个文件夹的权限

文件检索

  1. find /path/to/directory/ -name '*.py':搜索某个文件路径下的所有*.py文件
  2. grep xxx:从stdin中读入若干行数据,如果某行包含xxx,则输出该行;否则忽略该行
  3. wc:统计行数、单词数、字节数
    • 既可以从stdin中直接读入内容;也可以在命令行参数中传入文件名列表
    • wc -l:统计行数
    • wc -w:统计单词数
    • wc -c:统计字节数
  4. tree:展示当前目录的文件结构
    • tree /path/to/directory/:展示某个目录的文件结构
    • tree -a:展示隐藏文件
  5. ag xxx:搜索当前目录下的所有文件,检索xxx字符串
  6. cut:分割一行内容
    • stdin中读入多行数据
    • echo $PATH | cut -d ':' -f 3,5:输出PATH用:分割后第3、5列数据
    • echo $PATH | cut -d ':' -f 3-5:输出PATH用:分割后第3-5列数据
    • echo $PATH | cut -c 3,5:输出PATH的第3、5个字符
    • echo $PATH | cut -c 3-5:输出PATH的第3-5个字符
  7. sort:将每行内容按字典序排序
    • 可以从stdin中读取多行数据
    • 可以从命令行参数中读取文件名列表
  8. xargs:将stdin中的数据用空格或回车分割成命令行参数
    • find . -name '*.py' | xargs cat | wc -l:统计当前目录下所有python文件的总行数

查看文件内容

  1. more:浏览文件内容
    • 回车:下一行
    • 空格:下一页
    • b:上一页
    • q:退出
  2. less:与more类似,功能更全
    • 回车:下一行
    • y:上一行
    • Page Down:下一页
    • Page Up:上一页
    • q:退出
  3. head -3 xxx:展示xxx的前3行内容
    • 同时支持从stdin读入内容
  4. tail -3 xxx:展示xxx末尾3行内容
    • 同时支持从stdin读入内容

用户相关

  1. history:展示当前用户的历史操作。内容存放在~/.bash_history

工具

  1. md5sum:计算md5哈希值

    • 可以从stdin读入内容

    • 也可以在命令行参数中传入文件名列表

  2. time command:统计command命令的执行时间

  3. ipython3:交互式python3环境。可以当做计算器,或者批量管理文件。

    • ! echo "Hello World"!表示执行shell脚本
  4. watch -n 0.1 command:每0.1秒执行一次command命令

  5. tar:压缩文件

    • tar -zcvf xxx.tar.gz /path/to/file/*:压缩

    • tar -zxvf xxx.tar.gz:解压缩

    • tar -zxvf xxx.tar.gz -C yyy:可以将 xxx.tar.gz 解压到指定目录 yyy

  6. diff xxx yyy:查找文件xxxyyy的不同点

安装软件

  1. sudo command:以root身份执行command命令
  2. apt-get install xxx(Ubuntu):安装软件
  3. yum -y install xxx(Centos):安装软件
  4. pip install xxx --user --upgrade:安装python包
相关推荐
饮啦冰美式5 分钟前
22.04Ubuntu---ROS2使用rclcpp编写节点
linux·运维·ubuntu
wowocpp5 分钟前
ubuntu 22.04 server 安装 和 初始化 LTS
linux·运维·ubuntu
Huaqiwill7 分钟前
Ubuntun搭建并行计算环境
linux·云计算
wclass-zhengge9 分钟前
Netty篇(入门编程)
java·linux·服务器
Lign1731411 分钟前
ubuntu unrar解压 中文文件名异常问题解决
linux·运维·ubuntu
vip4511 小时前
Linux 经典面试八股文
linux
大霞上仙1 小时前
Ubuntu系统电脑没有WiFi适配器
linux·运维·电脑
Karoku0661 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
为什么这亚子2 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
布值倒区什么name2 小时前
bug日常记录responded with a status of 413 (Request Entity Too Large)
运维·服务器·bug