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包
相关推荐
山川生色30 分钟前
本机上装好的ubuntu 全部的开发软件 如何备份以后移到另一台电脑上 还不会出现引导错误?
运维·服务器·postgresql
Sagice40 分钟前
CVE-2019-13272(Linux本地内核提权)
linux·运维·服务器·网络·安全
Kendra9191 小时前
RHCE SELINUX安全管理
linux
白书宇2 小时前
19.QT程序简单的运行脚本
linux·arm开发·嵌入式硬件·物联网·arm
宁静致远20213 小时前
Linux驱动开发(速记版)--设备树插件
linux·驱动开发·嵌入式linux
Winston Wood3 小时前
Linux中的共享内存
linux·内存·共享内存·进程通信·性能
xnuscd3 小时前
els学习
运维·学习·jenkins
疯狂吧小飞牛3 小时前
elasticsearch单节点模式部署
运维·elasticsearch
努力的Andy4 小时前
Linux(Ubuntu)升级openssh至9.6版本
linux·安全·ubuntu