目录

Linux相关语法

常用文件管理命令

一、命令介绍

ㅤㅤ1. Ctrl c:取消命令,并且换行

ㅤㅤ2. Ctrl u:清空本行命令

ㅤㅤ3. tab键:可以补全命令和文件名,如果补全不了快速按两下tab键,可以显示备选选项

ㅤㅤ4. ls:列出当前目录下所有文件,蓝色的是文件夹,白色的是普通文件,绿色的是可执行文件

ㅤㅤㅤ●ㅤls -a:查看所有文件包括隐藏文件(以.开头的文件就是隐藏文件)

ㅤㅤㅤ●ㅤls -l:查看当前路径下文件的读、写、执行权限

ㅤㅤㅤ●ㅤls | wc -l:查看ls下有多少个文件

ㅤㅤ5. pwd:显示当前路径

ㅤㅤ6. cd XXX:进入XXX目录下,cd ..返回上层目录

ㅤㅤㅤ●ㅤ.:当前目录..:上级目录

ㅤㅤㅤ●ㅤ~:家目录,回回到路径/home/acs

ㅤㅤㅤ●ㅤcd -:返回改变路径前的路径,比如当前在/home/acs/homework然后cd** **/这个时候就处于/目录下,然后cd -就会回到改变路径前的路径也就是/home/acs/homework

ㅤㅤ7. cp XXX YYY:将XXX文件复制成YYYXXXYYY可以是同一个路径,比如../dir_c/a.txt,表示上层目录下的dir_c文件夹下的文件a.txt

ㅤㅤㅤ●ㅤcp XXX YYY -rXXX目录(文件夹)复制到YYY

ㅤㅤㅤ●ㅤ非当前路径重命名方法:cp a.txt ../b.txt

ㅤㅤ8. mkdir XXX:创建目录(文件夹)XXX

ㅤㅤㅤ●ㅤmkdir -p:-p:如果文件夹不存在,则创建`

ㅤㅤ9. rm XXX:删除普通文件; rm XXX -r:删除文件夹

ㅤㅤㅤ●ㅤ支持正则表达式,删除所有.txt类型文件:rm *.txt

ㅤㅤㅤ●ㅤ删除所有文件(不包括文件夹):rm *

ㅤㅤㅤ●ㅤ正则表达式删除所有文件夹:rm * -r即可

ㅤㅤ10. mv XXX YYY:将XXX文件移动到YYY下,和cp命令一样,XXXYYY可以是同一个路径;重命名也是用这个命令

ㅤㅤㅤ●ㅤ非当前路径移动方法:mv a.txt ../b.txt

ㅤㅤ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:查看历史输入指令

ㅤㅤ16. tree:以树形显示文件目录结构

tmux相关操作

功能:

​ (1) 分屏。 ​ (2) 允许断开Terminal连接后,继续运行进程。 结构: ​ 一个tmux可以包含多个session,一个session可以包含多个window,一个window可以包含多个pane。 ​ 实例:

        tmux:
            session 0:
                window 0:
                    pane 0
                    pane 1
                    pane 2
                    ...
                window 1
                window 2
                ...
            session 1
            session 2
            ...

操作:

​ (1) tmux:新建一个session,其中包含一个windowwindow中包含一个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之间的分割线,可以调整分割线的位置。 ​ (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 ​ (13) 按下Ctrl + a后手指松开,然后按c:在当前session中创建一个新的window。 ​ (14) 按下Ctrl + a后手指松开,然后按w:选择其他window,操作方法与(12)完全相同。 ​ (15) 按下Ctrl + a后手指松开,然后按PageUp:翻阅当前pane内的内容。 ​ (16) 鼠标滚轮:翻阅当前pane内的内容。 ​ (17) 在tmux中选中文本时,需要按住shift键。(仅支持Windows和Linux,不支持Mac,不过该操作并不是必须的,因此影响不大) ​ (18) tmux中复制/粘贴文本的通用方式: ​ (1) 按下Ctrl + a后松开手指,然后按[ ​ (2) 用鼠标选中文本,被选中的文本会被自动复制到tmux的剪贴板 ​ (3) 按下Ctrl + a后松开手指,然后按],会将剪贴板中的内容粘贴到光标处

vim相关操作

功能:

​ (1) 命令行模式下的文本编辑器。 ​ (2) 根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能。 ​ (3) 使用方式:vim filename ​ 如果已有该文件,则打开它。 ​ 如果没有该文件,则打开个一个新的文件,并命名为filename

模式:

​ (1) 一般命令模式 ​ 默认模式。命令输入方式:类似于打游戏放技能,按不同字符,即可进行不同操作。可以复制、粘贴、删除文本等。 ​ (2) 编辑模式 ​ 在一般命令模式里按下i,会进入编辑模式。 ​ 按下ESC会退出编辑模式,返回到一般命令模式。 ​ (3) 命令行模式 ​ 在一般命令模式里按下:/?三个字母中的任意一个,会进入命令行模式。命令行在最下面。 ​ 可以查找、替换、保存、退出、配置编辑器等。

操作:

​ (1) i:进入编辑模式 ​ (2) ESC:进入一般命令模式 ​ (3) h 或 左箭头键:光标向左移动一个字符 ​ (4) j 或 向下箭头:光标向下移动一个字符 ​ (5) k 或 向上箭头:光标向上移动一个字符 ​ (6) l 或 向右箭头:光标向右移动一个字符 ​ (7) n<Space>:n表示数字,按下数字后再按空格,光标会向右移动这一行的n个字符 ​ (8) 0 或 功能键[Home]:光标移动到本行开头 ​ (9) $ 或 功能键[End]:光标移动到本行末尾 ​ (10) G:光标移动到最后一行 ​ (11) :n 或 nG:n为数字,光标移动到第n行 ​ (12) gg:光标移动到第一行,相当于1G ​ (13) n<Enter>: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文件即可

shell语法

3.1 概论

shell是我们通过命令与操作系统沟通的语言

shell脚本可以直接在命令行中执行,也可以将一套逻辑组织成一个文件,方便复用

Ac Terminal中的命令行可以看成是一个shell脚本在逐行执行

Linux中常见的shell脚本有很多种,常见的有:

ㅤㅤ●ㅤBourne Shell(/usr/bin/sh或/bin/sh)

ㅤㅤ●ㅤBourne Again Shell(/bin/bash)

ㅤㅤ●ㅤC Shell(/usr/bin/csh)

ㅤㅤ●ㅤK Shell(/usr/bin/ksh)

ㅤㅤ●ㅤzsh

ㅤㅤ●ㅤ...

Linux系统中一般默认使用bash,所以接下来讲解bash中的语法

文件开头需要写#! /bin/bash,指明bash为脚本解释器

3.1.1 学习技巧

ㅤㅤ不要死记硬背,遇到含糊不清的地方,可以在终端里实际运行一遍。

3.1.2 脚本示例

新建一个test.sh文件,内 c容如下:

#! /bin/bash

echo "Hello World!"
3.1.3 运行方式
作为可执行文件
chmod +x test.sh # 使脚本具有可执行权限

./test.sh # 当前路径下执行
Hello World! # 脚本输出

/home/acs/test.sh # 绝对路径下执行
Hello World! # 脚本输出

~/test.sh # 家目录路径下执行
Hello World! # 脚本输出
用解释器执行
bash test.sh
Hello World! # 脚本输出

3.2 注释

3.2.1 单行注释

每行中#之后的内容均是注释

# 这是一行注释
echo "Hello World!" # 这也是注释
3.2.2 多行注释

格式:

:<<EOF
注释1
注释2
注释3
EOF
其中EOF可以替换成其它任意字符串 例如:

:<<abc
注释4
注释5
注释6
abc

:<<!
注释7
注释8
注释9
!

3.3 变量

3.3.1 定义变量

定义变量,不需要加$符号, 例如:

name1='zst' # 单引号定义字符串
name2="zst" # 双引号定义字符串
name3=zst # 也可以不加引号, 同样表示字符串
3.3.2 使用变量

使用变量,需要加上符号,或者符号,或者{}符号 花括号是可选的, 主要是为了帮助解释器识别变量边界

name=zst
echo $name # 输出 zst
echo ${name} # 输出 zst
echo ${name}acwing # 输出 zstacwing
3.3.3 只读变量

使用readonly或者declare可以将变量变为只读

name=zst
readonly name
declare -r name # 两种写法均可

name=abc # 会报错,因为此时name是只读变量
3.3.4 删除变量

unset可以删除变量

name=zst
unset name
echo $name # 输出空行
3.3.5 变量类型
  1. 自定义变量(局部变量)子进程不能访问的变量

  2. 环境变量(全局变量)子进程可以访问的变量

自定义变量改成环境变量:
name=zst # 定义自定义变量
export name # 第一种方法改环境变量
declare -x name # 第二种方法改环境变量
环境变量改为自定义变量:
export name=zst # 定义环境变量
declare +x name # 改为自定义变量

目前tmux中就是一个bash

name=zst # 定义自定义变量
export name # 将自定变量修改为环境变量
# 或者是 declare -x name

bash # 进入一个新的子进程
echo $name # 输出 zst
exit # 退出当前子进程

declare +x name # 将环境变量修改为自定义变量
bash # 进入一个新的子进程
echo $name # 输出 空行
exit # 退出当前子进程
3.3.6 字符串

字符串可以用单引号,也可以用双引号,也可以不用引号

单引号和双引号的区别:

单引号总的内容会原样输出,不会执行、不会取变量;

双引号中的内容可以用执行、可以取变量;

name=zst # 不用引号
echo 'hello, $name \"hh\"' # 单引号字符串,输出 hello, $name \"hh\"
echo "hello, $name \"hh\"" # 双引号字符串, 输出 hello, zst "hh"

获取字符串长度

name="zst"
echo ${#name} # 输出 3

提取子串

name="hello, zst"
echo ${name:0:5} # 提取从 0 开始的 5 个字符

ssh相关操作

4.1 ssh 登录

4.1.1 基本用法

远程登录服务器:

ssh user@hostname

ㅤㅤ●ㅤuser:用户名

ㅤㅤ●ㅤhostname:IP地址或域名

第一次登录时会提示:

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文件中

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

logout:退出当前服务器

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

ssh user@hostname -p 22

4.1.2 配置文件

创建文件~/.ssh/config

然后在文件中输入:

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

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

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

4.1.3 密钥登录

创建密钥:

ssh-keygen

然后一直回车即可

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

ㅤㅤ●ㅤid_rsa:私钥

ㅤㅤ●ㅤid_rsa.pub:公钥

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

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

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

ㅤㅤssh-copy-id myserver

4.1.4 执行命令

命令格式:

ssh user@hostname command

例如:

ssh user@hostname ls -a

或者

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

或者

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

4.2 scpscp 传文件

4.2.1 基本用法

命令格式:

scp source destination

source路径下的文件复制到destination

一次复制多个文件:

scp source1 source2 destination

复制文件夹:

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配置其他服务器的vimtmux

scp ~/.vimrc ~/.tmux.conf myserver:

(将AcwingAcwing本地的tmuxtmuxvimvim配置安装到自己的服务器上,可以使自己的服务器支持鼠标,操作也更加方便)

GitGit相关操作

AcwingAcwing代码托管平台(基于GitLabGitLab)

1.1 GitGit基本概念

  • 工作区:仓库的目录。工作区是独立于各个分支的。
  • 暂存区:数据暂时存放的区域,类似于工作区写入版本库前的缓存区。暂存区是独立于各个分支的。
  • 版本库:存放所有已经提交到本地仓库的代码版本
  • 版本结构:树结构,树中每个节点代表一个代码版本。

1.2 GitGit常用命令

1.2.1 全局设置

git config --global user.name xxx:设置全局用户名,信息记录在~/.gitconfig文件中

git config --global user.email xxx@xxx.com:设置全局邮箱地址,信息记录在~/.gitconfig文件中

git init:将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中

1.2.2 常用命令

git add XX :将XX文件添加到暂存区

git add .:将所有修改的文件加入暂存区

git commit -m “给自己看的备注信息”:将暂存区的内容提交到当前分支

git status:查看仓库状态

git log:查看当前分支的所有版本

git push -u (第一次需要-u以后不需要) :将当前分支推送到远程仓库

git clone git@git.acwing.com:xxx/XXX.git:将远程仓库XXX下载到当前目录下

git branch:查看所有分支和当前所处分支

1.2.3 查看命令

git diff XX:查看XX文件相对于暂存区修改了哪些内容 git status:查看仓库状态 git log:查看当前分支的所有版本 git log --pretty=oneline:用一行来显示 git reflog:查看HEAD指针的移动历史(包括被回滚的版本) git branch:查看所有分支和当前所处分支 git pull:将远程仓库的当前分支与本地仓库的当前分支合并

1.2.4 删除命令

git rm --cached XX:将文件从仓库索引目录中删掉,不希望管理这个文件 git restore --staged xx:==将xx从暂存区里移除==,并移动到工作区 git checkout — XX或git restore XX:==将XX文件尚未加入暂存区的修改全部撤销==

git restore:不指明任何文件,则直接从工作区最新修改回滚到暂存区的版本,如果暂存区,没有东西,则回滚到HEADHEAD指向的这个版本

1.2.5 代码回滚

git reset --hard HEAD^ 或git reset --hard HEAD~ :将代码库回滚到上一个版本 git reset --hard HEAD^^:往上回滚两次,以此类推 git reset --hard HEAD~100:往上回滚100个版本

git reset --hard 版本号:回滚到某一特定版本

1.2.6 远程仓库

git remote add origin git@git.acwing.com:xxx/XXX.git:将本地仓库关联到远程仓库 git push -u (第一次需要-u以后不需要) :将当前分支推送到远程仓库 git push origin branch_name:将本地的某个分支推送到远程仓库 git clone git@git.acwing.com:xxx/XXX.git:将远程仓库XXX下载到当前目录下 git push --set-upstream origin branch_name:设置本地的branch_name分支对应远程仓库的branch_name分支 git push -d origin branch_name:删除远程仓库的branch_name分支 git checkout -t origin/branch_name 将远程的branch_name分支拉取到本地 git pull :将远程仓库的当前分支与本地仓库的当前分支合并 git pull origin branch_name:将远程仓库的branch_name分支与本地仓库的当前分支合并 git branch --set-upstream-to=origin/branch_name1 branch_name2:将远程的branch_name1分支与本地的branch_name2分支对应

1.2.7 分支命令

git branch branch_name:创建新分支 git branch:查看所有分支和当前所处分支 git checkout -b branch_name:创建并切换到branch_name这个分支 git checkout branch_name:切换到branch_name这个分支 git merge branch_name:将分支branch_name合并到当前分支上 git branch -d branch_name:删除本地仓库的branch_name分支 git push --set-upstream origin branch_name:设置本地的branch_name分支对应远程仓库的branch_name分支 git push -d origin branch_name:删除远程仓库的branch_name分支 git checkout -t origin/branch_name 将远程的branch_name分支拉取到本地 git pull :将远程仓库的当前分支与本地仓库的当前分支合并 git pull origin branch_name:将远程仓库的branch_name分支与本地仓库的当前分支合并 git branch --set-upstream-to=origin/branch_name1 branch_name2:将远程的branch_name1分支与本地的branch_name2分支对应

1.2.8 stash暂存

git stash:将工作区和暂存区中尚未提交的修改存入栈中 git stash apply:将栈顶存储的修改恢复到当前分支,但不删除栈顶元素 git stash drop:删除栈顶存储的修改 git stash pop:将栈顶存储的修改恢复到当前分支,同时删除栈顶元素 git stash list:查看栈中所有元素

Thrift

thriftthrift作用:服务器之间的交互,不同服务器之间可以使用不同语言,根据对应的结构定义接口,提供serverserver,以及请求(client)(client),抽象的说,在两个服务器之间建立一条有向边,ThriftThrift也被称为RPCRPC框架。

具体使用

参照官方文档

管道

概念

管道类似于文件重定向(但是和文件重定向不一样),可以将前一个命令的stdout重定向到下一个命令的stdin

要点

管道命令仅处理stdout,会忽略stderr。 管道右边的命令必须能接受stdin。 多个管道命令可以串联。 与文件重定向的区别 文件重定向左边为命令,右边为文件。 管道左右两边均为命令,左边有stdout,右边有stdin

举例

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

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

环境变量

概念

LinuxLinux系统中会用很多环境变量来记录配置信息。 环境变量类似于全局变量,可以被各个进程访问到。我们可以通过修改环境变量来方便地修改系统配置。

查看

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

env # 显示当前用户的变量 set # 显示当前shell的变量,包括当前用户的变量; export # 显示当前导出成用户变量的shell变量 输出某个环境变量的值:

echo $PATH

修改

环境变量的定义、修改、删除操作可以参考3. shell语法——变量这一节的内容。

为了将对环境变量的修改应用到未来所有环境下,可以将修改命令放到~/.bashrc文件中。 修改完~/.bashrc文件后,记得执行source ~/.bashrc,来将修改应用到当前的bash环境下。

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

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

常见环境变量

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

常用命令

系统状况

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

文件权限

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

文件检索

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

查看文件内容(不如Vim)

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

用户相关

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

工具

md5sum:计算md5哈希值 可以从stdin读入内容 也可以在命令行参数中传入文件名列表; time command:统计command命令的执行时间 ipython3:交互式python3环境。可以当做计算器,或者批量管理文件。 ! echo "Hello World":!表示执行shell脚本 watch -n 0.1 command:每0.1秒执行一次command命令 tar:压缩文件 tar -zcvf xxx.tar.gz /path/to/file/*:压缩 tar -zxvf xxx.tar.gz:解压缩 diff xxx yyy:查找文件xxxyyy的不同点

安装软件

sudo command:以root身份执行command命令 apt-get install xxx:安装软件 pip install xxx --user --upgrade:安装python

Comment seems to stuck. Try to refresh?✨