zsh简介
- 官网:Zsh
- Zsh 属于 Shell 的一种,和 Bash 一样,但比 Bash 更好用,Zsh 完全兼容 Bash,拥有极其丰富的插件,其强大的自动补全参数、文件名以及自定义功能,可以大大提高我们使用 Linux 的效率。
-
查看 Linux 支持哪些 shell
cat /etc/shells
查看 Linux 当前使用 shell
echo $SHELL
Bash简介
bash(GNU Bourne-Again Shell)是最常用的一种shell,是当前大多数Linux发行版的默认Shell。
Shell简介
shell是一个命令语言解释器,是用户和Linux内核之间的运行在终端中的文本互动接口程序。
Shell相当于是一个翻译,把我们在计算机上的操作或我们的命令,翻译为计算机可识别的二进制命令,传递给内核,以便调用计算机硬件执行相关的操作;同时,计算机执行完命令后,再通过Shell翻译成自然语言,呈现在我们面前;
当用户成功登入系统后shell就启动了,并始终作为你与系统内核的交互手段直至你退出系统;
其他的shell还有:sh、bash、zsh、ksh、rsh、csh等。
shell命令可以分为以下三类:
- 内建函数(built-in function):shell自带的功能
- 可执行文件(executable file):保存在shell之外的脚本,提供了额外的功能。
- 别名(alias):给某个命令的简称
vim 简介
- 官网:welcome home : vim online
- Vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
Vim其实是vi的功能增强版,vim = vi + IMproved。.vimrc文件为Vim的配置文件,默认在home目录下,相关配置可见文件描述;
zsh 与 vim 基本配置
1.安装zsh和vim,安装后对zsh和vim进行配置使用;如下复制安装好的目录到home根目录
2.执行配置文件替换
./LINUX_TOOL/install.sh
脚本配置如下:
# 为原来文件备份
mv $HOME/.vim $HOME/.vim_backup
mv $HOME/.vimrc $HOME/.vimrc_backup
mv $HOME/.oh-my-zsh $HOME/.oh-my-zsh_backup
mv $HOME/.zshrc $HOME/.zshrc_backup
mv $HOME/.tmux.conf $HOME/.tmux.conf_backup
# 在$HOME下创建快捷方式
tool_path=$(cd "$(dirname "$0")"; pwd)
ln -s $tool_path/vim/.vim $HOME/
ln -s $tool_path/vim/.vimrc $HOME/
ln -s $tool_path/zsh/.oh-my-zsh $HOME/
ln -s $tool_path/zsh/.zshrc $HOME/
ln -s $tool_path/zsh/.tmux $HOME/
ln -s $tool_path/zsh/.tmux/.tmux.conf $HOME/
# 在$HOME下创建tmux工作区间保存目录
rm -rf $HOME/.tmux_workspace_save
mkdir $HOME/.tmux_workspace_save
# 在$HOME下创建undo历史保存目录
rm -rf $HOME/.undo_history
mkdir $HOME/.undo_history
#自动安装zshell autojump插件
python $HOME/.oh-my-zsh/custom/plugins/autojump/install.py
3. Zsh主题应用(根据个人喜好)
source ~/.zshrc
zsh使用介绍
主题切换
不同的主题可以自行切换。甚至可以将 ZSH_THEME 的值写为 random 。这样每次打开都会是一款随机主题,总有一个适合你。
//显示当前主题名
echo $ZSH_THEME
自动补全
虽然 Bash 下,tab 是一个好用的命令补全键,但 oh-my-zsh 提供了更加强大的命令补全工具,很多时候,只需要输入一条命令,然后按 tab,oh-my-zsh 就可以自动给你补全该条命令其他的参数。
也可以使用 alias 命令设置别名(.zshrc中加入)。
示例:
alias vi="vim"
alias s="source ~/.zshrc"
目录穿越
我们经常会遇到这样一个场景:先进入一个很深的目录,然后又换到另一个目录下的,如果要返回之前的某个目录,通常我们会使用 cd - 返回最近一次目录,或者使用 history 去查找更早之前的目录,不过 oh-my-zsh 给我们提供了强大的 d 命令,有了它,可以简化以上步骤。
d 命令会列出我们最近进入的目录历史,并且会给这些目录加上序号,只需要输入对应目录的序号,即可重新进入该目录,如下图所示,d 命令列出了我最近进入的几个目录,其中序号为 2 的目录是我的 LINUX_TOOL目录,直接输入 2,立马跳回到 LINUX_TOOL 所在目录。
也可以使用 hash -d 设置路径别名,进入相应路径只需要 cd ~xxx。
注意:
修改.zshrc配置文件后,需要重新加载( source ~/.zshrc )或重新启动才会生效
Bash Shell使用介绍
基本命令
cd命令: 用于切换当前工作目录。 | cd /home/user1将当前工作目录切换到/home/user1。 cd ../user2:切换到当前目录的上一级目录并进入user2。 cd ./代表当前目录 |
ls命令:用于列出指定目录中的文件和子目录。 | ls /home/user1将列出/home/user1目录下的所有文件和子目录。 ls -l:以详细列表的方式显示目录内容。 ls -a:显示全部文件,包括隐藏文件。 ls -h:以人类可读的格式显示文件大小。 |
cp命令:用于复制文件或目录。 | cp file1 file2将文件file1复制为file2。 cp -r dir1 dir2将目录dir1及其内容复制到dir2。 |
mv命令:用于移动或重命名文件或目录。 | mv file1 file2将文件file1移动到file2。 mv file1 dir1将文件file1移动到目录dir1中。 |
rm命令:用于删除文件或目录。 | rm file1将删除文件file1。 rm -r dir1将删除目录dir1及其内容。 rm -f dir2:强制删除文件,不进行确认。 rm file1?前缀一个字符的被删除 rm file1*删除匹配的 rm -r dir? rm -rf* 删除目录下所有文件 |
mkdir命令:用于创建目录。 | mkdir dir1将创建一个名为dir1的目录。 |
touch命令:用于创建空文件或更改文件的时间戳。 | touch file1将创建一个名为file1的空文件。 touch -t 202012310000.00 file1将更改文件file1的时间戳为2020年12月31日00:00。 |
cat命令:用于查看或连接文件。 | cat file1将查看文件file1的内容。 cat file1 file2 > file3将文件file1和file2的内容连接起来,并将结果保存到file3。 |
less命令:用于查看文件内容,并提供翻页浏览功能。 | less file1将以交互方式查看文件file1的内容。 |
echo命令:用于向终端输出文本。 | echo “Hello World!”将输出Hello World!到终端。 |
pwd:显示当前工作目录的路径。echo $HOME主目录 | pwd:显示当前工作目录的路径。echo $HOME主目录 |
chmod:chmod命令用于更改文件或目录的权限。 | 它可以接受一个参数,指定要更改权限的文件或目录名。可以使用不同的权限标记来指定要更改的权限。 chmod 777 file_name:将文件的权限设置为rwxrwxrwx(读r 写w 执行x)。 |
chown:修改文件所有者。 | chown owner_name file_name:将文件的所有者修改为owner_name。 |
du:查看文件或目录的磁盘使用情况。 | du -h file_name:以人类可读的方式显示文件大小。 |
history 命令 clear 清屏 | history命令用于显示最近执行过的命令历史记录。它不需要参数,并且会打印出所有先前执行过的命令。 |
tar 归档命令 | tar -czvf xxx.gz dir4 dir5 file* 压缩 tar -zxvf xxx.gz 解压缩 解压缩到指定目录:tar -zxvf xxx.gz -C /root |
ifconfig 查看IP | ifconfig eth0 192.168.1.123修改IP ping www,baidu.com |
系统用户相关命令
- su - root 普通超级
- su - xxx 超级普通
- useradd XXX 增加用户
- passwd 密码
- who 查看用户
- userdel xxx 注销才能删除
- ps - aux 显示打开的进程,相当于任务管理器
- uptime 显示系统运行时间
- shutdown -r now 重启系统
- shutdown -h now 关机
批量处理命令
1. grep命令:用于在文件中查找指定模式的字符串。
示例:grep “pattern” file1将在文件file1中查找包含指定模式的字符串。
grep “pattern” file.txt
2. sed命令:用于根据指定规则对文件进行文本替换。
示例:sed ‘s/pattern/replace/g’ file1将文件file1中的pattern字符串替换为replace字符串。
3. awk命令:用于以指定规则对文件进行流式处理。
示例:awk ‘{print $1}’ file1将输出文件file1中每行的第一个字段。
4. find:根据特定条件查找文件。
find /path/to/dir -name “file_name”:在指定目录中查找名为”file_name”的文件。
find / -name file1根目录查找
find ./ -name file1\?;
find ./ -name file1\*;
find ./ -name \*file\*中间相同
find ./ -name file1\*;
find ./ -name \*file后缀相同
管道和重定向
1. 管道:通过管道符(|)将一个命令的输出作为另一个命令的输入。
示例:command1 | command2将command1的输出作为command2的输入。
2. 重定向:用于将命令的输入或输出重定向到文件。
示例:command > file1将命令的输出重定向到文件file1。
command < file1将命令的输入重定向为文件file1。
条件判断和循环
1. 条件判断:通过if语句进行条件判断。
示例:
if [ condition ];
then command1
elif [ condition ];
then
command2
else
command3
fi
2. 循环:通过for和while语句进行循环操作。
示例:
for var in list;
do command1
$var done
while [ condition ];
do command1
done
脚本编写
1. 创建脚本:用文本编辑器创建一个扩展名为.sh的文件。
示例:vi script.sh
2. 添加执行权限:使用chmod命令为脚本文件添加执行权限。
示例:chmod +x script.sh
3. 编写脚本内容:在脚本文件中编写要执行的命令和逻辑。
示例:
#!/bin/bash
echo "Hello World!"
4. 运行脚本:使用./命令运行脚本文件。
示例:./script.sh将执行脚本内容并输出Hello World!到终端。
vim使用介绍
vim工作模式
1 . 命令模式(command Mode):
用户刚刚启动vi/vim,便进入了命令模式。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下 i ,并不会输入一个字符, i 被当作了一个命令。
以下是常用的几个命令:
- i 从当前光标处进入插入模式
- I 进入插入模式,并置光标于行首
- a 追加模式,置光标于当前光标之后
- A 追加模式,置光标于行末
- o 在当前行之下新加一行,并进入插入模式
- O 在当前行之上新加一行,并进入插入模式
- Esc 退出插入模式
2 . 输入模式(Insert Mode)
在命令模式下按下 i 就进入了输入模式。在输入模式中可进行文本的编辑。按ESC回到命令模式。
3 . 底线命令模式(Last Line Mode)
在命令模式下按下 : (英文冒号)就进入了底线命令模式。底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。在底线命令模式中,常用命令如下,按ESC键可随时退出底线命令模式。
- :w 将缓冲区写入文件,即保存修改
- :wq 保存修改并退出
- :x 保存修改并退出
- :q 退出,如果对缓冲区进行过修改,则会提示
- :q! 强制退出,放弃修改
vim基本操作
https://zhuanlan.zhihu.com/p/683883778
基本操作
插入
- i 从当前光标处进入插入模式
- I 进入插入模式,并置光标于行首
- a 追加模式,置光标于当前光标之后
- A 追加模式,置光标于行末
- o 在当前行之下新加一行,并进入插入模式
- O 在当前行之上新加一行,并进入插入模式
- Esc 退出插入模式
删除
- dd 删除光标所在行
- dw 删除一个字(word)
- d/D 删除到行末
- x 删除当前字符
- X 删除前一个字符
- 单行删除:dd; 删除到单词尾dw; 删除到行尾d$; 删除到行首d^
- 全部删除:按esc键后,先按gg(到达顶部),然后dG
- 不用输入模式:shift+d 从右到左一个一个字符删除;
- 按V,按上下左右箭头,选中块进行复制删除
- 直接按delete:从左删除到右的一个一个字符
复制粘贴
- 单行复制:yy; 复制到单词尾yw; 复制到行尾y$; 复制到行首y^;y/Y 复制到行末
- 全部复制:按esc键后,先按gg,然后ggyG;
- p 粘贴粘贴板的内容到当前行的下面
- P 粘贴粘贴板的内容到当前行的上面
- 按V,按上下左右箭头,选中块进行复制删除
- 使用鼠标滚动复制:
:set mouse=a 打开鼠标功能
:set mouse-=a 关闭鼠标功能
:set nonu 如果要复制多行而不使用行号禁用数字:
:set nu 则可以在复制完成后重新启用它们
撤销与重做
撤销:u ;恢复撤销:ctrl+r ;跳转后执行回退:ctrl+o;前进ctrl+i
编辑
- J 将下一行和当前行连接为一行
- cc 删除当前行并进入编辑模式
- cw 删除一个单词(光标以后的字符,包括光标)进入插入模式
- c$ 擦除从当前位置至行末的内容,并进入编辑模式
- s 删除当前字符并进入编辑模式
- S 删除光标所在行并进入编辑模式
- xp 交换当前字符和下一个字符
- u 撤销
- ctrl+r 重做
- ~ 切换大小写,当前字符
- >> 将当前行右移一个单位
- << 将当前行左移一个单位(一个tab符)
- == 自动缩进当前行
- 注释: mm 为//注释
window复制到linux
:set paste #进入全格式粘贴模式,shift+insert全格式粘贴 :set nopaste #取消全格式粘贴模式
ctrl+c复制外面的,shift+inster粘贴到linux的vim编辑器中
linux复制到window
移动光标
- h j k l 上 下 左 右
- ctrl-y 上移一行
- ctrl-e 下移一行
- ctrl-u 上翻半页(up)
- ctrl-d 下翻半页(down)
- ctrl-f 上翻一页(forward)
- ctrl-b 下翻一页(backward)
- w 跳到下一个字首,按标点或单词分割
- W 跳到下一个字首,长跳,如end-of-line被认为是一个字
- e 跳到下一个字尾
- E 跳到下一个字尾,长跳
- b 跳到上一个字
- B 跳到上一个字,长跳
- 0 跳至行首,不管有无缩进,就是跳到第0个字符
- ^ 跳至行首的第一个字符
- $ 跳至行尾
- gg 跳至文首
- G 调至文尾
- 5gg/5G 调至第5行
- gd 跳至当前光标所在的变量的声明处
- fx 在当前行中找x字符,找到了就跳转至
- ; 重复上一个f命令,而不用重复的输入fx
- * 查找光标所在处的单词,向下查找
- # 查找光标所在处的单词,向上查找
- 光标所在的窗口切换
光标在左侧树形目录:ctrl+w+h
光标在右侧窗口显示:ctrl+w+l
光标左右切换 :ctrl+w+w
树显示左右切换 :ctrl+w+r
查找和搜索
- 查找快捷键
- /pattern 向后搜索字符串pattern
- ?pattern 向前搜索字符串pattern
- "\c" 忽略大小写
- "\C" 大小写敏感
- n 下一个匹配(如果是/搜索,则是向下的下一个,?搜索则是向上的下一个)
- N 上一个匹配(同上)
- 命令行查找
grep介绍,如果你想在当前目录下 查找"hello,world!"字符串,可以这样:
grep -rn "hello,world!" *
- 全局搜索文件的字符串:cscope find t xxx
- ctrl+f 按ctrl+j 和ctrl+k上下选择文件
- 查找函数:|+f+s |+f+t |+f+c
替换
- :%s/old/new/g 搜索整个文件,将所有的old替换为new
- :%s/old/new/gc 搜索整个文件,将所有的old替换为new,每次都要你确认是否替换
- vim 中可用 :s 命令来替换字符串,具体如下:
:s/str1/str2/ 替换当前行第一个 str1 为 str2
:s/str1/str2/g 替换当前行中所有 str1 为 str2
:m,ns/str1/str2/ 替换第 n 行开始到最后一行中每一行的第一个 str1 为 str2
:m,ns/str1/str2/g 替换第 n 行开始到最后一行中所有的 str1 为 str2
(注:m和n 为数字,若m为 .,表示为当前行开始;若n为$,则表示到最后一行结束)如果使用 # 作为分隔符,则中间出现的 / 不会作为分隔符,比如:
:s#str1/#str2/# 替换当前行第一个 str1/ 为 str2/
:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/
:%s/str1/str2/(等同于 :g/str1/s//str2/) 替换每一行的第一个 str1 为 str2
:%s/str1/str2/g(等同于 :g/str1/s//str2/g 和 :1,$ s/str1/str2/g ) 替换文中所有 str1 为 str2从替换命令可以看到,g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索
窗口操作
一、切分窗口
1. 水平切分
命令::sp file
快捷键:<Ctrl-W> + S
2. 垂直切分
命令: :vsp file
快捷键:<Ctrl-W> + V
二、关闭窗口
1. 关闭活动窗口
命令: :clo 或者 :q
快捷键:<Ctrl-W> + C
2. 关闭其他窗口
命令: :on
快捷键:<Ctrl-W> + O
三、切换窗口
1. <Ctrl-W> + W 窗口间循环切换
2. <Ctrl-W> + H 切换到左边窗口
3. <Ctrl-W> + J 切换到上边窗口
4. <Ctrl-W> + K 切换到下边窗口
5. <Ctrl-W> + L 切换到右边窗口
四、调整窗口
1. <Ctrl-W> + _ 最大化活动窗口的高度
2. <Ctrl-W> + | 最大化活动窗口的宽度
3. <Ctrl-W> + = 使所有窗口等宽等高
4. [N] + <Ctrl-W> + _ 设置活动窗口高度为N行
5. [N] + <Ctrl-W> + | 设置活动窗口宽度为N列
6. :res +10 增加活动窗口高度
7. :vertical res +10 增加活动窗口宽度
五、移动窗口
1. <Ctrl-W> + Shift + K 当前窗口移到最上边
2. <Ctrl-W> + Shift + H 当前窗口移到最左边
3. <Ctrl-W> + Shift + J 当前窗口移到最下边
4. <Ctrl-W> + Shift + L 当前窗口移到最右边
可视操作
跳转声明
- 打开头文件:光标放置头文件出,按|+F+F
- 跳转到文件行首:gg;跳转到行末shift+g
挂起操作
(1)基本使用如下
(2)其它操作说明
鼠标操作
(1)基本使用如下
(2)其它操作说明
编译
(1)基本使用如下
1.编译apps:make
2.清理apps:make clean
3.编译全部libg:make libs
4.清理全部libg:make clean libs
5.编译单独lib:make lib target
6.清理单独1ib:make clean lib target
7.GDB 调试 :make debug
8.组合编译命令:make clean_libs && make clean && make libs && make -j
环境设置
(1)基本使用如下
目录与多文件操作
- 打开的文件切换:按1,2左右切换;或者按空格进入命令窗口:bn 下一个文件;bp上一个文件;ls列出打开的文件
-
打开目录:o ;跳转当前根目录:p
- vim file1.. 同时打开多个文件
- :args 显示当前编辑文件
- :next 切换到下个文件
- :prev 切换到前个文件
- **:next!**不保存当前编辑文件并切换到下个文件
- **:prev!**不保存当前编辑文件并切换到上个文件
- :wnext 保存当前编辑文件并切换到下个文件
- :wprev 保存当前编辑文件并切换到上个文件
- :first 定位首文件
- :last 定位尾文件
- ctrl+^ 快速在最近打开的两个文件间切换
- :split[sp] 把当前文件水平分割
- :split file 把当前窗口水平分割, file
- :vsplit[vsp] file 把当前窗口垂直分割, file
- :new file 同split file
- :close 关闭当前窗口
- :only 只显示当前窗口, 关闭所有其他的窗口
- :all 打开所有的窗口
- :vertical all 打开所有的窗口, 垂直打开
- :qall 对所有窗口执行:q操作
- :qall! 对所有窗口执行:q!操作
- :wall 对所有窗口执行:w操作
- :wqall 对所有窗口执行:wq操作
- ctrl-w h 跳转到左边的窗口
- ctrl-w j 跳转到下面的窗口
- ctrl-w k 跳转到上面的窗口
- ctrl-w l 跳转到右边的窗口
- ctrl-w t 跳转到最顶上的窗口
- ctrl-w b 跳转到最底下的窗口
多标签操作
- :tabedit file 在新标签中打开文件file
- :tab split file 在新标签中打开文件file
- :tabp 切换到前一个标签
- :tabn 切换到后一个标签
- :tabc 关闭当前标签
- :tabo 关闭其他标签
- gt 到下一个tab
- gT 到上一个tab
- 0gt 跳到第一个tab
- 5gt 跳到第五个tab
其他操作
1.常见处理
2.执行shell命令
- 在命令模式下输入"
:sh
",可以运行相当于在字符模式下,到输入结束想回到VIM编辑器中用exit,ctrl+D
返回VIM编辑器 - 可以"
!command
",运行结束后自动回到VIM编辑器中 - 用“
Ctrl+Z
“回到shell,用fg返回编辑 :!make
-> 直接在当前目录下运行make指令
3 自动排版
在粘贴了一些代码之后,vim变得比较乱,只要执行gg=G
就能搞定
4.以下操作在操作目录时生效
p,P,t,u,U,x,v,o,r,s
- c 使当前打开的目录成为当前目录
- d 创建目录
- % 创建文件
- D 删除文件/目录
- - 转到上层目录
- gb 转到上一个 bookmarked directory
- i 改变目录文件列表方式
- ^l 刷新当前打开的目录
linux命令行搜索
find命令:
1.查找文件:
find -name rule.mk
不区分大小写:
find -iname rule.mk
2.查找开头,或者结尾的文件
find -name "rule*"
find -name "*.ini" 或者指定目录:find ./ -name "*.ini"
3.其它按文件修改时间,属性,大小等查找文件;也可以配合grep进行内容查找
grep命令:
1.grep命令结合find命令搜索
find . -name '*.c' -exec grep -i 'isd_config_rule' {} \; -print
2. 如果只想获取和整个搜索字符匹配的内容,那么可以使用参数w
搜索的是文件:
grep -w "isd_config_rule.c" ./tools/rule.mk
3.如果我们只想获取那些文件包含搜索的内容,那么可以使用下命令
grep -H -r "v\$temp_space_header" /u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/ | cut -d: -f1
4.递归搜索某个目录以及子目录下的所有文件(显示行号使用-rn)
grep -r "isd_config_rule" ./
显示行号:
grep -rn "isd_config_rule" ./
5.搜索、查找匹配的行数:
grep -c "isd_config_rule.c" ./tools/rule.mk
6.如果搜索时需要忽略大小写问题,可以使用参数-i
grep -i "V\$TEMP_SPACE_HEADER" *.sql
7. 如果需要显示搜索文本在文件中的行数,可以使用参数-n
grep -n "v\$temp_space_header" *.sql
8.如果你想搜索单个、多个文件是否包含某个字符串,可以使用下面方式
grep "ORA" test.c :搜索单个文件
grep "search content" filename1 filename2.... filenamen
grep "search content" *.sql
常用插件
函数跳转插件:ctags
vim树形目录插件:NERDTree
vim+cscope+ctags搭建的IDE
在vim中添加taglist, omnicppcomplete, echofunc, minibufferexplorer等插件
常见问题
1. vim里面 sy 后,部分文件里面的东西用cs find找不到
解决办法:修改~/.vim/tools/sync.sh,将过滤给他去掉。
vim .vim/tools/sync.sh
原来没注释前:
注释后:
2.xshell无法和windows共用剪贴板
原因:xshell和xmanager版本不兼容,或者xmanager没有授权
解决办法:购买和重新安装xshell和xmanager。