2018-11-08
linux
00
请注意,本文编写于 1933 天前,最后修改于 1932 天前,其中某些信息可能已经过时。

目录

0. 概述
1. 基本操作
1. cd
2. ls
3. cat
4. vim
1.打开文件
2.修改文件
#2. \[addr\]为指定要替换的行,不指定默认当前行。 .$ :当前行到尾行 , 1$:全文 3,5: 第3到第5行;
3. 退出
2. 一些技巧
1. history命令
2. bash上的快捷键
3. table
4. 清屏
3. 常用命令
1. cp
2. mv
3. rm
4. touch && mkdir
4. 其他问题
#是-ls 中查看到的id 或者 开启时候的Terminal_name

linux的哲学思想:

  1. 一切皆文件(硬件设备亦如此),文本文件保存配置信息;
  2. 单一目的的小程序(由众多目的单一的小程序组成),组合小程序完成复杂任务;
  3. 尽量避免捕获用户接口;
  4. 提供机制,而非策略。

0. 概述

linux和windows的区别:

Linux:

用户知道自己想要什么,也明白自己在做什么,并且会为自己的行为负责。

Windows:

用户不知道自己想要什么,也不明白自己在做什么,更不打算为自己的行为负责。

技术人员也需要看的linux入门书籍:《鸟哥的Linux私房菜》

1. 基本操作

基本流程: 进入目录(cd)-->查看文件是否存在(ls)-->查看文件内容(cat)-->编辑文件(vim)

1. cd

cd 进入指定的目录

bash
# cd .. 返回上一级 # cd / 绝对路径 # cd ./ 相对路径 # cd ~ 进入当前用户的家目录 # cd - 进入上一次所在的目录 # pwd 查看当前目录所在的位置

2. ls

ls 查看文件的属性

bash
# 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

有时候文件太长,我们需要借助一下其他小工具。

  1. 按屏输出内容 less
  2. 通过关键字查找 grep
bash
# cat /etc/fstab | less 或者 less /etc/fstab # cat StatisticsController.phpbak | grep -n Api

4. vim

如果我们需要修改文件,应该使用linux下自带的vim编辑器。 vim一共三种操作模式:

  1. 命令模式:使用一些命令对文本文件进行一些复制,粘贴,快速定位等操作
  2. 冒号模式:对文本进行批量修改,查找等操作
  3. 插入模式:输入字符

按照约定,我们在服务器上修改任何一个文件之前,均需要对其进行备份操作。

1.打开文件

vim + 文件名

直接使用vim + 文件名,此时进入的是vim编辑器的命令模式。不能直接输入字符修改文件。 在这个模式下可以进行一些编辑前的预备操作:

  1. 删除不需要的行: dd 删除光标所在的整行; #dd 删除光标所在行及其下的#-1行,#表示数字。 粘贴删除的行 p 命令, dd 和 p 配合就实现了windows下的剪切操作。

  2. 粘贴操作: yy 复制当前行 #yy 复制光标所在行及其下的#-1行,#表示数字。 粘贴 p yy 和 p 配合实现了windows下的复制粘贴操作。

  3. 调整光标位置,快速定位到需要修改的行 gg : 跳转到文本的第一行 G : 跳转到文本的最好一行 #gg : 快速跳转到第#行

  4. 调整光标位置,快速定位到行内的某个字符 # crtl + 左右箭头 按照空格为界,每次跳转到对应空格后字符的词头。 Home 键跳转到行头部 End 键跳转到行尾部

2.修改文件

简单修改: 通过1的操作,定位到想修改的位置, i(insert) : 当前光标位置插入; a(append): 光标后插入; o(other):在光标当前行之下开启新的一行。

批量修改: 在命令模式下,直接输入:符号,进入冒号模式;在冒号模式下我们可以使用简单的命令对文件进行批量替换。 语法:

:[addr]s/源字符串/目的字符串/[option] 全局替换命令为: :%s/源字符串/目的字符串/g

说明

  1. s/ / / 可以使用 s@ @ @ 或者 s# # # 替换,从而解决特殊情况;
  2. [addr]为指定要替换的行,不指定默认当前行。 .:当前行到尾行,1 :当前行到尾行 , 1:全文 3,5: 第3到第5行;
  3. [option] g为全文所以,不知道表示只修改每行找到打第一个。

a. 用//注释第10-20 行内容: :10,20s#^#//#g

b. 在10-20行删除 //注释 :10,20s#^//##g

c. 批量替换全文所以的单词: :1,$s/sup/good/g

批量替换参考

冒号模式下的其他命令:

  1. num , 每行添加行号,方便跳转
  2. :# , 快速定位到第#行,:1 首行 :$ 尾行
  3. ai! 设置自动缩进
  4. on 语法高亮 | off 关闭
3. 退出

修改完成后,退出编辑器。

  1. 保存退出,
  2. 不保存退出,:!q

如果下次打开文件出现

bash
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查看文件的执行历史 当我们要反复执行某个比较长的命令时候。我们可以进行如下三种操作:

  1. 重新输入命令
  2. 键盘上下键翻滚
  3. 配合history命令,找到命令的id,然后!+id 重新执行该行命令 !! 代表上一个命令 ! + 曾经输入过命令的前几个字母,可以直接重新执行最近的那一条命令 ! # 重新执行history命令看到的第#条命令。

2. bash上的快捷键

crtl + e 跳转到命令行行尾 crtl + a 跳转到命令行行首 crtl + ——> :以单词为单位移动,向右 crtl + <—— :以单词为单位移动,向左

esc + . 获取最后一条命令的最末尾的参数,并复制到当前命令行上

3. table

table 是linux下常用的命令之一,作用是补全文件路径(包括文件名称)或者补全命令。

TAB键的两大作用:

  1. 只需输入文件或目录名的前几个字符,然后按TAB键,如无相重的,完整的文件名立即自动在命令行出现;如有相重的,再按一下TAB键,系统会列出当前目录下所有以这几个字符开头的名字。
  2. 在命令行下,只需输入例如m,再连续按两次TAB键,系统将列出所有以m开头的命令,(包括自定义的Bshell命令函数),对查找某些记不清楚的命令特有用。例如输入ftp,将查到ftp,ftpcount,ftpwho,ftpshut等本不熟悉的命令。

4. 清屏

有时候黑乎乎的终端被各种字符填满,我们可以使用clear命令或者crtl + l 键来清理。

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 终止的任务?

比如: /alidata/server/php/bin/php /alidata/www/wxbackend/protected/commands/index.php MemeSyn SynMomoSaleGoodsInfo 这个定时任务。

查询该任务的进程id,使用kill命令结束该进程

1,查询该任务的进程id :

grep 后边加的是可以识别这个定时任务的关键字。比如MemeSyn 也是可以的。 ps aux | grep SynMomoSaleGoodsInfo

运行结果:

bash
root 31933 0.6 0.2 438432 38020 pts/9 S+ 11:35 0:00 /alidata/server/php/bin/php /alidata/www/wxbackend/protected/commands/index.php MemeSyn SynMomoSaleGoodsInfo root 31981 0.0 0.0 112652 976 pts/8 S+ 11:36 0:00 grep --color=auto SynMomoSaleGoodsInfo ##说明:上边第一行的第二个字段就是这个进程的pid

2, kill 该进程 kill 31933

本文作者:mykernel

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!