程序员看的极简的linux命令
linux的哲学思想:
- 一切皆文件(硬件设备亦如此),文本文件保存配置信息;
- 单一目的的小程序(由众多目的单一的小程序组成),组合小程序完成复杂任务;
- 尽量避免捕获用户接口;
- 提供机制,而非策略。
1. 基本操作
基本流程:
进入目录(cd)-->查看文件是否存在(ls)-->查看文件内容(cat)-->编辑文件(vim)
1. cd
cd 进入指定的目录
# cd .. 返回上一级
# cd / 绝对路径
# cd ./ 相对路径
2. ls
ls 查看文件的属性
# ls -l == ll
# ll -h :以人类易读的模式显示文件的大小。Kb/Mb/G
# ls -Sl : 从大到小排序
# ls -rSl : 从小到排序
##小扩展:
# ll | wc -l
##wc 是统计行数,|是管道命令
3. cat
cat 查看文件内容
cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Aug 17 07:38:21 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=976105f5-f402-456c-aadd-50de49ff88f9 / ext4 defaults 1 1
有时候文件太长,我们需要借助一下其他小工具。
- 按屏输出内容 less
- 通过关键字查找 grep
# cat /etc/fstab | less 或者 less /etc/fstab
# cat StatisticsController.phpbak | grep -n Api
4. vim
如果我们需要修改文件,应该使用linux下自带的vim编辑器。
vim一共三种操作模式:
- 命令模式:使用一些命令对文本文件进行一些复制,粘贴,快速定位等操作
- 冒号模式:对文本进行批量修改,查找等操作
- 插入模式:输入字符
<p id="div-border-top-red">按照约定,我们在服务器上修改任何一个文件之前,均需要对其进行备份操作。</p>
1.打开文件
vim + 文件名
直接使用vim + 文件名,此时进入的是vim编辑器的命令模式。不能直接输入字符修改文件。
在这个模式下可以进行一些编辑前的预备操作:
- 删除不需要的行:
dd 删除光标所在的整行;
dd 删除光标所在行及其下的#-1行,#表示数字。
粘贴删除的行
p 命令, dd 和 p 配合就实现了windows下的剪切操作。
- 粘贴操作:
yy 复制当前行
yy 复制光标所在行及其下的#-1行,#表示数字。
粘贴
p yy 和 p 配合实现了windows下的复制粘贴操作。
- 调整光标位置,快速定位到需要修改的行
gg : 跳转到文本的第一行
G : 跳转到文本的最好一行
gg : 快速跳转到第#行
- 调整光标位置,快速定位到行内的某个字符
# crtl + 左右箭头 按照空格为界,每次跳转到对应空格后字符的词头。
Home 键跳转到行头部
End 键跳转到行尾部
2.修改文件
简单修改:
通过1的操作,定位到想修改的位置,
i(insert) : 当前光标位置插入;
a(append): 光标后插入;
o(other):在光标当前行之下开启新的一行。
批量修改:
在命令模式下,直接输入:符号,进入冒号模式;在冒号模式下我们可以使用简单的命令对文件进行批量替换。
语法:
:[addr]s/源字符串/目的字符串/[option]
全局替换命令为:
:%s/源字符串/目的字符串/g
说明
- s/ / / 可以使用 s@ @ @ 或者 s# # # 替换,从而解决特殊情况;
- [addr]为指定要替换的行,不指定默认当前行。 .:全文 3,5: 第3到第5行;
- [option] g为全文所以,不知道表示只修改每行找到打第一个。
a. 用//注释第10-20 行内容:
:10,20s#^#//#g
b. 在10-20行删除 //注释
:10,20s#^//##g
c. 批量替换全文所以的单词:
:1,$s/sup/good/g
冒号模式下的其他命令:
- :set num , 每行添加行号,方便跳转
- :# , 快速定位到第#行,:1 首行 :$ 尾行
- :set ai! 设置自动缩进
- :syntax on 语法高亮 | off 关闭
3. 退出
修改完成后,退出编辑器。
- 保存退出,:wq
- 不保存退出,:!q
如果下次打开文件出现
E325: 注意
发现交换文件 ".Dockerfile.swp"
所有者: root 日期: Fri Nov 9 14:51:09 2018
文件名: ~root/Dockerfile
修改过: 是
用户名: root 主机名: izpo45bh60h6bsz
进程 ID: 5313
正在打开文件 "Dockerfile"
日期: Thu Nov 8 11:41:25 2018
(1) Another program may be editing the same file. If this is the case,
be careful not to end up with two different instances of the same
file when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.
如果是这样,请用 ":recover" 或 "vim -r Dockerfile"
恢复修改的内容 (请见 ":help recovery")。
如果你已经进行了恢复,请删除交换文件 ".Dockerfile.swp"
以避免再看到此消息。
交换文件 ".Dockerfile.swp" 已存在!
以只读方式打开([O]), 直接编辑((E)), 恢复((R)), 删除交换文件((D)), 退出((Q)), 中止((A)):
则说明异常退出,上次编辑文件后没保存文件就被关闭了。
此时可以直接输出D,删除交换文件直接进入。
或者直接删除.Dockerfile.swp文件。
2. 一些技巧
1. history命令
history查看文件的执行历史
当我们要反复执行某个比较长的命令时候。我们可以进行如下三种操作:
- 重新输入命令
- 键盘上下键翻滚
- 配合history命令,找到命令的id,然后!+id 重新执行该行命令
!! 代表上一个命令
! + 曾经输入过命令的前几个字母,可以直接重新执行最近的那一条命令
! # 重新执行history命令看到的第#条命令。
2. bash上的快捷键
crtl + e 跳转到命令行行尾
crtl + a 跳转到命令行行首
crtl + ——> :以单词为单位移动,向右
crtl + <—— :以单词为单位移动,向左
esc + . 获取最后一条命令的最末尾的参数,并复制到当前命令行上
3. table
table 是linux下常用的命令之一,作用是补全文件路径(包括文件名称)或者补全命令。
TAB键的两大作用:
- 只需输入文件或目录名的前几个字符,然后按TAB键,如无相重的,完整的文件名立即自动在命令行出现;如有相重的,再按一下TAB键,系统会列出当前目录下所有以这几个字符开头的名字。
- 在命令行下,只需输入例如m,再连续按两次TAB键,系统将列出所有以m开头的命令,(包括自定义的Bshell命令函数),对查找某些记不清楚的命令特有用。例如输入ftp,将查到ftp,ftpcount,ftpwho,ftpshut等本不熟悉的命令。
3. 常用命令
1. cp
cp 复制
cp [options] source dest
使用指令"cp"将当前目录"test/"下的所有文件复制到新目录"newtest"下,输入如下命令:
cp –r test/ newtest
-r 递归复制
2. mv
mv 移动
1, 把文件或者目录移动到另外一个目录下
mv a /b
2, 重命名文件或者目录
mv a b
a 可以为文件或者目录,但是b最好不要存在。
3. rm
rm 删除文件或者目录
-f, --force 忽略不存在的文件,从不给出提示。
-r, 递归,删除文件夹
rm -rf ##linux 下最强势且最简单的操作之一,强制删除指定的文件
rm file #删除一般的文件
4. touch && mkdir
touch 创建文本文件
mkdir 创建目录
mkdir -pv /a/b/c #如果a和b不存在,递归创建/a和/a/b目录
4. 其他问题
1,当需要在服务器上运行长时间占据终端的命令时候,我们需要在后台运行命令。
两种办法:
1.screen命令
剥离当前终端
开启一个新的终端
screen -S Terminal_name #Terminal_name 终端名称
查看当前运行的终端
screen -ls
进入终端
screen -r # #是-ls 中查看到的id 或者 开启时候的Terminal_name
置于后台
crtl + a + d
2.将文件内容重定向到文本中
| 管道
重定向符号 >>
XXX >> /dev/null #输出的文本没用
/dev/null 是linux下的一个设备,又被称为"黑洞"设备,所有输入进这个设备的文件均消失。
/dev/zero 是一个代表一个永远输出 0的设备文件,使用它作输入可以得到全为空的文件。
xxx >> /tmp/xxx.logs #输出的文本有作用
2,如何解决服务器上不能crtl + c 终止的任务?
比如: php /index.php Moo SydsdsaodsInfo 这个定时任务。
查询该任务的进程id,使用kill命令结束该进程
1,查询该任务的进程id :
grep 后边加的是可以识别这个定时任务的关键字。比如MemeSyn 也是可以的。
ps aux | grep SydsdsaodsInfo
运行结果:
root 31933 0.6 0.2 438432 38020 pts/9 S+ 11:35 0:00 php /index.php Moo SydsdsaodsInfo
root 31981 0.0 0.0 112652 976 pts/8 S+ 11:36 0:00 grep --color=auto SydsdsaodsInfo
##说明:上边第一行的第二个字段就是这个进程的pid
2, kill 该进程
kill 31933
个人小站:www.mykernel.cn