mirror of
https://github.com/Estom/notes.git
synced 2026-04-09 05:48:31 +08:00
linux
This commit is contained in:
@@ -1,37 +0,0 @@
|
||||
# 概述
|
||||
|
||||
## 1 帮助命令
|
||||
|
||||
### 查看简要说明
|
||||
查看简单讲解。
|
||||
|
||||
```
|
||||
//简要说明命令的作用
|
||||
whais command
|
||||
|
||||
|
||||
```
|
||||
|
||||
### man
|
||||
|
||||
查看完整帮助手册。
|
||||
* command
|
||||
* -k 能够搜索不完整命令
|
||||
|
||||
|
||||
|
||||
### info
|
||||
查看详细内容
|
||||
* command
|
||||
* -w name pattern contains shell style wildcard
|
||||
|
||||
### which
|
||||
查看命令位置(一半为系统环境下命令的可执行文件的位置)
|
||||
* command
|
||||
|
||||
|
||||
### whereis keyword
|
||||
查看所有搜索路径下关键词的位置。
|
||||
* command
|
||||
|
||||
|
||||
143
Linux/基础篇/第0章 系统概述.md
Normal file
143
Linux/基础篇/第0章 系统概述.md
Normal file
@@ -0,0 +1,143 @@
|
||||
# 系统概述
|
||||
|
||||
> whatis info man which whereis
|
||||
|
||||
## 1 目录结构
|
||||
|
||||
* /bin:
|
||||
bin是Binary的缩写, 这个目录存放着最经常使用的命令。
|
||||
|
||||
* /boot:
|
||||
这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
|
||||
|
||||
* /dev :
|
||||
dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
|
||||
|
||||
* /etc:
|
||||
这个目录用来存放所有的系统管理所需要的配置文件和子目录。
|
||||
|
||||
* /home:
|
||||
用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
|
||||
|
||||
* /lib:
|
||||
这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
|
||||
|
||||
* /lost+found:
|
||||
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
|
||||
|
||||
* /media:
|
||||
linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
|
||||
|
||||
* /mnt:
|
||||
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
|
||||
|
||||
* /opt:
|
||||
这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
|
||||
|
||||
* /proc:
|
||||
这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件.
|
||||
|
||||
* /root:
|
||||
该目录为系统管理员,也称作超级权限者的用户主目录。
|
||||
|
||||
* /sbin:
|
||||
s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
|
||||
|
||||
* /srv:
|
||||
该目录存放一些服务启动之后需要提取的数据。
|
||||
|
||||
* /sys:
|
||||
这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
|
||||
|
||||
* /tmp:
|
||||
这个目录是用来存放一些临时文件的。
|
||||
|
||||
* /usr:
|
||||
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
|
||||
|
||||
* /usr/bin:
|
||||
系统用户使用的应用程序。
|
||||
|
||||
* /usr/sbin:
|
||||
超级用户使用的比较高级的管理程序和系统守护程序。
|
||||
|
||||
* /usr/src:
|
||||
内核源代码默认的放置目录。
|
||||
|
||||
* /var:
|
||||
这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
|
||||
|
||||
* /run:
|
||||
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
|
||||
|
||||
## 2 帮助命令
|
||||
在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档; linux系统内置的帮助文档很详细,通常能解决我们的问题,我们需要掌握如何正确的去使用它们;
|
||||
|
||||
在只记得部分命令关键字的场合,我们可通过man -k来搜索;
|
||||
需要知道某个命令的简要说明,可以使用whatis;而更详细的介绍,则可用info命令;
|
||||
查看命令在哪个位置,我们需要使用which;
|
||||
而对于命令的具体参数及使用方法,我们需要用到强大的man;
|
||||
下面介绍这些命令;
|
||||
|
||||
### whatis
|
||||
查看命令的简要说明
|
||||
```
|
||||
$whatis command
|
||||
```
|
||||
正则匹配:
|
||||
```
|
||||
$whatis -w "loca*"
|
||||
```
|
||||
更加详细的说明文档:
|
||||
```
|
||||
$info command
|
||||
```
|
||||
|
||||
### man
|
||||
查询命令command的说明文档:
|
||||
```
|
||||
$man command
|
||||
eg:man date
|
||||
```
|
||||
|
||||
在man的帮助手册中,将帮助文档分为了9个类别,对于有的关键字可能存在多个类别中, 我们就需要指定特定的类别来查看;(一般我们查询bash命令,归类在1类中);
|
||||
|
||||
man页面所属的分类标识(常用的是分类1和分类3)
|
||||
|
||||
1. 用户可以操作的命令或者是可执行文件
|
||||
2. 系统核心可调用的函数与工具等
|
||||
3. 一些常用的函数与数据库
|
||||
4. 设备文件的说明
|
||||
5. 设置文件或者某些文件的格式
|
||||
6. 游戏
|
||||
7. 惯例与协议等。例如Linux标准文件系统、网络协议、ASCⅡ,码等说明内容
|
||||
8. 系统管理员可用的管理条令
|
||||
9. 与内核有关的文件
|
||||
|
||||
当whatis下的命令有多个分类时。使用数字表示某个分类下的帮助手册。
|
||||
```
|
||||
$man 3 printf
|
||||
```
|
||||
|
||||
```
|
||||
$man -k keyword
|
||||
```
|
||||
查询关键字 根据命令中部分关键字来查询命令,适用于只记住部分命令的场合;
|
||||
|
||||
查找GNOME的config配置工具命令,对于某个单词搜索,可直接使用/word来使用:
|
||||
```
|
||||
$man -k GNOME config| grep 1
|
||||
```
|
||||
|
||||
### which & whereis
|
||||
查看程序的binary文件所在路径:
|
||||
```
|
||||
$which command
|
||||
```
|
||||
|
||||
查看程序的搜索路径:
|
||||
```
|
||||
$whereis command
|
||||
```
|
||||
当系统中安装了同一软件的多个版本时,不确定使用的是哪个版本时,这个命令就能派上用场;
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
# 性能管理
|
||||
|
||||
> top / sar / free / watch
|
||||
|
||||
|
||||
## 1 监控CPU
|
||||
查看CPU使用率
|
||||
```
|
||||
$sar -u
|
||||
```
|
||||
|
||||
查看CPU平均负载
|
||||
```
|
||||
$sar -q 1 2
|
||||
```
|
||||
sar指定-q后,就能查看运行队列中的进程数、系统上的进程大小、平均负载等;
|
||||
|
||||
## 2 查询内存
|
||||
查看内存使用状况 sar指定-r之后,可查看内存使用状况;
|
||||
```
|
||||
$sar -r 1 2
|
||||
```
|
||||
查看内存使用量
|
||||
```
|
||||
$free -m
|
||||
```
|
||||
|
||||
|
||||
## 3 查询页面交换
|
||||
查看页面交换发生状况 页面发生交换时,服务器的吞吐量会大幅下降;服务器状况不良时,如果怀疑因为内存不足而导致了页面交换的发生,可以使用sar -W这个命令来确认是否发生了大量的交换;
|
||||
```
|
||||
$sar -W 1 3
|
||||
```
|
||||
|
||||
|
||||
6.5. 综合应用
|
||||
当系统中sar不可用时,可以使用以下工具替代:linux下有 vmstat、Unix系统有prstat
|
||||
|
||||
eg: 查看cpu、内存、使用情况: vmstat n m (n 为监控频率、m为监控次数)
|
||||
|
||||
[/home/weber#]vmstat 1 3
|
||||
|
||||
使用watch 工具监控变化 当需要持续的监控应用的某个数据变化时,watch工具能满足要求; 执行watch命令后,会进入到一个界面,输出当前被监控的数据,一旦数据变化,便会高亮显示变化情况;
|
||||
|
||||
eg:操作redis时,监控内存变化:
|
||||
```
|
||||
$watch -d -n 1 './redis-cli info | grep memory'
|
||||
```
|
||||
以下为watch工具中的界面内容,一旦内存变化,即实时高亮显示变化
|
||||
|
||||
@@ -1,256 +1,156 @@
|
||||
# 文件管理
|
||||
## 1 文件目录操作
|
||||
# 文件及目录管理
|
||||
|
||||
### touch
|
||||
创建文件
|
||||
* filename
|
||||
> * 文件管理,目录的创建、删除、查询、管理: mkdir rm mv
|
||||
> * 文件的查询和检索: find locate
|
||||
> * 查看文件内容:cat vi tail more
|
||||
> * 管道和重定向: ; | && >
|
||||
> * 写出命令以及主要的参数说明,具体内容查看参考手册。
|
||||
|
||||
### mkdir
|
||||
创建目录
|
||||
* dirname
|
||||
|
||||
### mv
|
||||
移动
|
||||
* sourcefile destfile
|
||||
* -r 递归
|
||||
|
||||
### cp
|
||||
复制
|
||||
* sourcefile destfile
|
||||
* -r 递归
|
||||
|
||||
### rm
|
||||
删除
|
||||
* dirname/filename
|
||||
* -r 递归删除
|
||||
* -f 强制删除不弹出确认步骤
|
||||
|
||||
### cd
|
||||
切换目录
|
||||
* pathname
|
||||
|
||||
### pwd
|
||||
显示当前绝对路径
|
||||
|
||||
### ls
|
||||
查看目录
|
||||
* [filename*] 能够使用通配符
|
||||
* -a 所有文件,包括隐藏文件
|
||||
* -l 长格式输出
|
||||
|
||||
### alias
|
||||
别名
|
||||
* newname=aimname
|
||||
|
||||
### wc
|
||||
print newline, word, and byte counts for each file.输出文件内容的统计数。
|
||||
* file or files name
|
||||
* -c byte counts
|
||||
* -m character counts
|
||||
* -l newline counts
|
||||
* -w word counts
|
||||
|
||||
## 2 查看文件内容
|
||||
### cat
|
||||
查看文件内容
|
||||
* filename
|
||||
* -n 显示行号
|
||||
|
||||
### more
|
||||
查看文件内容
|
||||
* filename
|
||||
|
||||
### head
|
||||
查看文件前几行内容
|
||||
* filename
|
||||
* -10 显示前十行
|
||||
|
||||
### tail
|
||||
查看文件后几行
|
||||
* filename
|
||||
* -10 显示文件后10行
|
||||
|
||||
## diff
|
||||
对比两个文件之间的差别。
|
||||
* file1 file2
|
||||
|
||||
## 3 查找文件名称
|
||||
|
||||
### find
|
||||
搜索目录,查找文件名。
|
||||
* dirname
|
||||
* -name keyword 指定字符串查找文件名,支持通配符。
|
||||
|
||||
> 这个命令还有很多更高级的用法,日后用到再说。直接man查看用法,这是个程序或者说软件。
|
||||
|
||||
### locate
|
||||
搜索包含字符串的目录。
|
||||
* stringname
|
||||
|
||||
### 4 查找文件内容
|
||||
|
||||
### grep
|
||||
查找文件内容,根据文件内容进行匹配。
|
||||
Global search Regular Expression and Print the line.
|
||||
* pattern filename
|
||||
* -i 不区分大小写
|
||||
* -n 显示行号
|
||||
* --color 高亮显示
|
||||
* -c 只统计目标行数
|
||||
* -o 只显示目标行的命中关键词
|
||||
* -B 显示目标行之前的行
|
||||
* -A 显示目标航之后的行
|
||||
* -w 硬匹配到目标单词。
|
||||
* -e 能够添加多个匹配项
|
||||
* -E 表示支持扩展正则表达式
|
||||
> 同find也是一个复杂的程序软件,日后用到查看说明文档。
|
||||
## 1 创建、删除、移动、复制
|
||||
```
|
||||
grep -e "am" hello.txt
|
||||
创建:mkdir
|
||||
删除:rm
|
||||
删除非空目录:rm -rf file目录
|
||||
删除日志 rm *log (等价: $find ./ -name “*log” -exec rm {} ;)
|
||||
移动:mv
|
||||
复制:cp (复制目录:cp -r )
|
||||
复制目录:$cp -r source_dir dest_dir
|
||||
```
|
||||
## 5 文件权限操作
|
||||
|
||||
### 查看文件属性
|
||||
## 2 目录切换
|
||||
```
|
||||
ls-al
|
||||
-rw-r--r-- l root root 42304 Sep 4 18:26 install.log
|
||||
找到文件/目录位置:cd
|
||||
切换到上一个工作目录: cd -
|
||||
切换到home目录: cd or cd ~
|
||||
显示当前路径: pwd
|
||||
更改当前工作路径为path: $cd path
|
||||
```
|
||||
* 文件类型 [-]普通文件[d]目录[l]连接文件[b]接口设备[c]串行端口设备
|
||||
* 文件权限[rwx]分别代表拥有者、用户组、其他人的操作权限
|
||||
* 表示多少文件名连接到这个节点
|
||||
* 表示拥有者名字
|
||||
* 表示用户组
|
||||
* 文件容量
|
||||
* 创建或者修改日期
|
||||
* 文件名字
|
||||
|
||||
### chgrp
|
||||
改变文件属性
|
||||
|
||||
|
||||
## 3 列出目录项
|
||||
```
|
||||
chgrp [-R] groupname dirname/filename
|
||||
chgrp users install.log
|
||||
显示当前目录下的文件 ls
|
||||
按时间排序,以列表的方式显示目录项 ls -lrt
|
||||
给每项文件前面增加一个id编号(看上去更加整洁):>ls | cat -n
|
||||
```
|
||||
* -R 递归更改组
|
||||
|
||||
|
||||
### chwon
|
||||
## 4 查找目录及文件 find/locate
|
||||
搜寻文件或目录:
|
||||
```
|
||||
chown [-R] ownername dirname/filename
|
||||
chwon estom install.log
|
||||
$find ./ -name "core*" | xargs file
|
||||
```
|
||||
* -R 递归更改拥有者
|
||||
|
||||
|
||||
### chmod
|
||||
查找目标文件夹中是否有obj文件:
|
||||
```
|
||||
chmod [-R] xyz dirname/filename
|
||||
chmod 777 install.log
|
||||
chmod u/g/o/a +/-/= r/w/x dirname/filename
|
||||
$find ./ -name '*.o'
|
||||
```
|
||||
递归当前目录及子目录删除所有.o文件:
|
||||
```
|
||||
$find ./ -name "*.o" -exec rm {} \;
|
||||
```
|
||||
查看当前目录下文件个数:
|
||||
```
|
||||
$find ./ | wc -l
|
||||
```
|
||||
find是实时查找,如果需要更快的查询,可试试locate;locate会为文件系统建立索引数据库,如果有文件更新,需要定期执行更新命令来更新索引库:
|
||||
```
|
||||
$locate string
|
||||
$updatedb
|
||||
```
|
||||
* -R 递归更改文件内容
|
||||
* 1~7分别对应二进制文件权限
|
||||
* ugoa 分别设置user,group,other,all的权限。
|
||||
|
||||
## 6 符号连接/硬连接
|
||||
2.5. 查看文件内容
|
||||
查看文件:
|
||||
```
|
||||
cat vi head tail more
|
||||
```
|
||||
显示时同时显示行号:
|
||||
```
|
||||
$cat -n
|
||||
```
|
||||
按页显示列表内容:
|
||||
```
|
||||
$ls -al | more
|
||||
```
|
||||
只看前10行:
|
||||
```
|
||||
$head - 10 **
|
||||
```
|
||||
显示文件第一行:
|
||||
```
|
||||
$head -1 filename
|
||||
```
|
||||
显示文件倒数第五行:
|
||||
```
|
||||
$tail -5 filename
|
||||
```
|
||||
查看两个文件间的差别:
|
||||
```
|
||||
$diff file1 file2
|
||||
```
|
||||
动态显示文本最新信息:
|
||||
```
|
||||
$tail -f crawler.log
|
||||
```
|
||||
|
||||
### ln
|
||||
创建一个指向目标的连接。
|
||||
* filename destname
|
||||
* -s 符号连接
|
||||
2.6. 查找文件内容
|
||||
使用egrep查询文件内容:
|
||||
```
|
||||
egrep '03.1\/CO\/AE' TSF_STAT_111130.log.012
|
||||
egrep 'A_LMCA777:C' TSF_STAT_111130.log.035 > co.out2
|
||||
```
|
||||
|
||||
## 7 文件与目录权限修改
|
||||
```
|
||||
改变文件的拥有者 chown
|
||||
改变文件读、写、执行等属性 chmod
|
||||
递归子目录修改: chown -R tuxapp source/
|
||||
增加脚本可执行权限: chmod a+x myscript
|
||||
```
|
||||
## 8 快捷方式
|
||||
创建符号链接/硬链接:
|
||||
```
|
||||
ln cc ccAgain :硬连接;删除一个,将仍能找到;
|
||||
ln -s cc ccTo :符号链接(软链接);删除源,另一个无法使用;(后面一个ccTo 为新建的文件)
|
||||
```
|
||||
|
||||
|
||||
## 7 目录配置说明
|
||||
|
||||
### 目录配置标准FHS
|
||||
|
||||
* /:根目录,与开机、还原、系统修复有关
|
||||
* /bin:单用户维护模式下还能被操作的命令。
|
||||
* /sbin:system系统用来开机修复还原系统所需要的命令
|
||||
* /boot:开机会使用到的文件
|
||||
* /dev:任何设备与接口设备都是以文件的形势存在于这个目录当中。
|
||||
* /etc:系统主要配置文件目录。
|
||||
* /home:用户文件夹
|
||||
* /lib:放置系统运行过程中用到的函数库。
|
||||
* /media:用于挂在可删除的设备DVD光盘等。
|
||||
* /mnt:暂时挂在额外的设备
|
||||
* /opt:第三方软件安装的目录。第三方软件习惯上放到/usr/local/目录下。
|
||||
* /root:系统管理员的主文件夹
|
||||
* /srv:service网络服务启动后用来存取数据的目录
|
||||
* /tmp:一般用户或正在执行的程序暂时防止文件的地方,任何人都能访问,可以情理。
|
||||
* /proc:虚拟文件系统,是内存的虚拟文件对应,能够查看内存装填,包括系统内核、进程、外部设备的状态以及网络状态。其对应内存空间,本身不占用任何硬盘空间。
|
||||
* /sys:虚拟的文件系统,记录与内核相关的信息。包括目前已经加载到内核的模块与内核检测到的硬件设备信息。
|
||||
|
||||
### 特殊的目录配置
|
||||
* /usr:可分享的不可变动的数据。UNIX Software Resource的缩写。所有的软件存在在这个目录下。
|
||||
* /usr/bin:绝大部分用户可以直接使用的命令
|
||||
* /usr/include:C/C++等程序语言的头文件与包含文件
|
||||
* /usr/lib:包含软件的函数库、目标文件,以及一般用户惯用的执行文件和脚本
|
||||
|
||||
|
||||
## 8 管道和重定向
|
||||
|
||||
* 批处理命令连接执行,使用 |
|
||||
* 串联: 使用分号 ;
|
||||
* 前面成功,则执行后面一条,否则,不执行:&&
|
||||
* 前面失败,则后一条执行: ||
|
||||
|
||||
## 9 管道和重定向
|
||||
```
|
||||
批处理命令连接执行,使用 |
|
||||
串联: 使用分号 ;
|
||||
前面成功,则执行后面一条,否则,不执行:&&
|
||||
前面失败,则后一条执行: ||
|
||||
ls /proc && echo suss! || echo failed.
|
||||
能够提示命名是否执行成功or失败;
|
||||
```
|
||||
|
||||
与上述相同效果的是:
|
||||
```
|
||||
ls /proc && echo suss! || echo failed
|
||||
if ls /proc; then echo suss; else echo fail; fi
|
||||
```
|
||||
### 管道 |
|
||||
|
||||
表示第一个命令的输出可以作为第二个命令的输入。可以利用管道对前一个命令的输出进行处理、过滤、统计等。
|
||||
|
||||
重定向:
|
||||
```
|
||||
find ./ | wc -l
|
||||
```
|
||||
wc 会把前一个命令的输出看做一个文件,然后输出这个文件的行数。所以能够显示./文件下的目录个数。
|
||||
|
||||
```
|
||||
ls | cat -n
|
||||
```
|
||||
cat也会把前一个命令的输出,看做一个文件,然后对文件进行操作。
|
||||
|
||||
### 重定向> >>
|
||||
将标准输出和标准错误重定向到一个文件当中。
|
||||
```
|
||||
> 覆盖文件内容
|
||||
>> 添加新内容到结尾
|
||||
ls proc/*.c > list 2> &l 将标准输出和标准错误重定向到同一文件;
|
||||
```
|
||||
|
||||
## 9 设置环境变量
|
||||
|
||||
1. 在/etc/profile文件中添加变量【对所有用户生效(永久的)】
|
||||
用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。
|
||||
|
||||
例如:编辑/etc/profile文件,添加CLASSPATH变量
|
||||
|
||||
等价的是:
|
||||
```
|
||||
# vi /etc/profile
|
||||
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
|
||||
ls proc/*.c &> list
|
||||
```
|
||||
清空文件:
|
||||
```
|
||||
:> a.txt
|
||||
```
|
||||
重定向到文件的末尾
|
||||
```
|
||||
echo aa >> a.txt
|
||||
```
|
||||
|
||||
注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。
|
||||
|
||||
2. 在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】
|
||||
用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。
|
||||
## 10 Bash快捷输入或删除
|
||||
快捷键:
|
||||
```
|
||||
Ctl-U 删除光标到行首的所有字符,在某些设置下,删除全行
|
||||
Ctl-W 删除当前光标到前边的最近一个空格之间的字符
|
||||
Ctl-H backspace,删除光标前边的字符
|
||||
Ctl-R 匹配最相近的一个文件,然后输出
|
||||
```
|
||||
2.12. 综合应用
|
||||
查找record.log中包含AAA,但不包含BBB的记录的总数:
|
||||
|
||||
例如:编辑guok用户目录(/home/guok)下的.bash_profile
|
||||
|
||||
vi/home/guok/.bash.profile添加如下内容:exportCLASSPATH=./JAVAHOME/lib;JAVA_HOME/jre/lib
|
||||
|
||||
注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。
|
||||
|
||||
3. 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
|
||||
在shell的命令行下直接使用[export 变量名=变量值] 定义变量,
|
||||
|
||||
该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,
|
||||
|
||||
shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。
|
||||
cat -v record.log | grep AAA | grep -v BBB | wc -l
|
||||
@@ -1,26 +1,146 @@
|
||||
# 文件与目录管理
|
||||
# 用户管理
|
||||
|
||||
## 目录与路径
|
||||
## 文件与目录管理
|
||||
## 文件内容查阅
|
||||
## 文件与目录的默认权限与隐藏权限
|
||||
## 命令与文件查询
|
||||
## 权限与命令的关系
|
||||
> useradd passwd userdel usermod chmod chown .bashrc .bash_profile
|
||||
## 1 添加删除
|
||||
|
||||
添加用户,为用户创建相应的帐号和用户目录/home/username;
|
||||
```
|
||||
$useradd -m username
|
||||
```
|
||||
|
||||
用户添加之后,设置密码,密码以交互方式创建:
|
||||
```
|
||||
$passwd username
|
||||
```
|
||||
|
||||
删除用户
|
||||
```
|
||||
$userdel -r username
|
||||
```
|
||||
不带选项使用 userdel,只会删除用户。用户的家目录将仍会在/home目录下。要完全的删除用户信息,使用-r选项;
|
||||
|
||||
帐号切换 登录帐号为userA用户状态下,切换到userB用户帐号工作:
|
||||
```
|
||||
$su userB
|
||||
```
|
||||
进入交互模型,输入密码授权进入;
|
||||
|
||||
|
||||
## 1 用户与用户组
|
||||
### 用户
|
||||
* owner
|
||||
* 可以属于多个不同group
|
||||
### 用户组
|
||||
* 包含一组用户
|
||||
* 一组用户拥有相同的权限。
|
||||
## 2 用户的组
|
||||
将用户加入到组
|
||||
默认情况下,添加用户操作也会相应的增加一个同名的组,用户属于同名组; 查看当前用户所属的组:
|
||||
```
|
||||
$groups
|
||||
```
|
||||
一个用户可以属于多个组,将用户加入到组:
|
||||
```
|
||||
$usermod -G groupNmame username
|
||||
```
|
||||
变更用户所属的根组(将用户加入到新的组,并从原有的组中除去):
|
||||
```
|
||||
$usermod -g groupName username
|
||||
```
|
||||
查看系统所有组,系统的所有用户及所有组信息分别记录在两个文件中:/etc/passwd , /etc/group 默认情况下这两个文件对所有用户可读。查看所有用户及权限:
|
||||
```
|
||||
$more /etc/passwd
|
||||
```
|
||||
查看所有的用户组及权限:
|
||||
```
|
||||
$more /etc/group
|
||||
```
|
||||
|
||||
### others
|
||||
* 其他人,不属于用户组。
|
||||
## 3 用户权限
|
||||
使用ls -l可查看文件的属性字段,文件属性字段总共有10个字母组成,第一个字母表示文件类型,如果这个字母是一个减号”-”,则说明该文件是一个普通文件。字母”d”表示该文件是一个目录,字母”d”,是dirtectory(目录)的缩写。 后面的9个字母为该文件的权限标识,3个为一组,分别表示文件所属用户、用户所在组、其它用户的读写和执行权限; 例如:
|
||||
```
|
||||
[/home/weber#]ls -l /etc/group
|
||||
-rwxrw-r-- colin king 725 2013-11-12 15:37 /home/colin/a
|
||||
```
|
||||
表示这个文件对文件拥有者colin这个用户可读写、可执行;对colin所在的组(king)可读可写;对其它用户只可读;
|
||||
|
||||
### 记录位置
|
||||
* 用户内容-/etc/passwd
|
||||
* 密码内容-/etc/shadow
|
||||
* 组内容-/etc/group
|
||||
更改读写权限
|
||||
使用chmod命令更改文件的读写权限,更改读写权限有两种方法,一种是字母方式,一种是数字方式
|
||||
|
||||
字母方式:
|
||||
```
|
||||
$chmod userMark(+|-)PermissionsMark
|
||||
```
|
||||
userMark取值:
|
||||
```
|
||||
u:用户
|
||||
g:组
|
||||
o:其它用户
|
||||
a:所有用户
|
||||
```
|
||||
PermissionsMark取值:
|
||||
```
|
||||
r:读
|
||||
w:写
|
||||
x:执行
|
||||
```
|
||||
例如:
|
||||
```
|
||||
$chmod a+x main 对所有用户给文件main增加可执行权限
|
||||
$chmod g+w blogs 对组用户给文件blogs增加可写权限
|
||||
```
|
||||
|
||||
数字方式:
|
||||
|
||||
数字方式直接设置所有权限,相比字母方式,更加简洁方便;
|
||||
|
||||
使用三位八进制数字的形式来表示权限,第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限,每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。如6(4+2)代表有读写权,7(4+2+1)有读、写和执行的权限。
|
||||
|
||||
例如:
|
||||
```
|
||||
$chmod 740 main 将main的用户权限设置为rwxr-----
|
||||
```
|
||||
更改文件或目录的拥有者
|
||||
```
|
||||
$chown username dirOrFile
|
||||
```
|
||||
使用-R选项递归更改该目下所有文件的拥有者:
|
||||
```
|
||||
$chown -R weber server/
|
||||
```
|
||||
|
||||
# 4 环境变量
|
||||
|
||||
### bashrc & profile
|
||||
bashrc与profile都用于保存用户的环境信息,bashrc用于交互式non-loginshell,而profile用于交互式login shell。
|
||||
|
||||
```
|
||||
/etc/profile,/etc/bashrc 是系统全局环境变量设定
|
||||
~/.profile,~/.bashrc用户目录下的私有环境变量设定
|
||||
```
|
||||
|
||||
### login过程
|
||||
当登入系统获得一个shell进程时,其读取环境设置脚本分为三步:
|
||||
|
||||
* 首先读入的是全局环境变量设置文件/etc/profile,然后根据其内容读取额外的文档,如/etc/profile.d和/etc/inputrc
|
||||
* 读取当前登录用户Home目录下的文件~/.bash_profile,其次读取~/.bash_login,最后读取~/.profile,这三个文档设定基本上是一样的,读取有优先关系
|
||||
* 读取~/.bashrc。
|
||||
|
||||
### ~/.profile与~/.bashrc的区别
|
||||
|
||||
这两者都具有个性化定制功能
|
||||
* ~/.profile可以设定本用户专有的路径,环境变量,等,它只能登入的时候执行一次
|
||||
* ~/.bashrc也是某用户专有设定文档,可以设定路径,命令别名,每次shell script的执行都会使用它一次
|
||||
|
||||
|
||||
例如,我们可以在这些环境变量中设置自己经常进入的文件路径,以及命令的快捷方式:
|
||||
```
|
||||
.bashrc
|
||||
alias m='more'
|
||||
alias cp='cp -i'
|
||||
alias mv='mv -i'
|
||||
alias ll='ls -l'
|
||||
alias lsl='ls -lrt'
|
||||
alias lm='ls -al|more'
|
||||
|
||||
log=/opt/applog/common_dir
|
||||
unit=/opt/app/unittest/common
|
||||
|
||||
.bash_profile
|
||||
. /opt/app/tuxapp/openav/config/setenv.prod.sh.linux
|
||||
export PS1='$PWD#'
|
||||
```
|
||||
通过上述设置,我们进入log目录就只需要输入cd $log即可;
|
||||
@@ -0,0 +1,91 @@
|
||||
# 磁盘管理
|
||||
|
||||
|
||||
> * 查看磁盘空间 df -h
|
||||
> * 查看目录大小 du -sh
|
||||
> * 打包 tar -cvf
|
||||
> * 解包 tar -xvf
|
||||
> * 压缩 gzip bzip
|
||||
> * 解亚索 gunzip,bunzip,unzip
|
||||
|
||||
解压缩 gunzip bzip
|
||||
|
||||
## 1 查看磁盘空间
|
||||
查看磁盘空间利用大小:
|
||||
```
|
||||
df -h
|
||||
```
|
||||
-h: human缩写,以易读的方式显示结果
|
||||
查看当前目录所占空间大小:
|
||||
```
|
||||
du -sh
|
||||
-h 人性化显示
|
||||
-s 递归整个目录的大小
|
||||
$du -sh
|
||||
653M
|
||||
```
|
||||
查看当前目录下所有子文件夹排序后的大小:
|
||||
```
|
||||
for i in `ls`; do du -sh $i; done | sort
|
||||
或者:
|
||||
du -sh `ls` | sort
|
||||
```
|
||||
|
||||
4.2. 打包/ 压缩
|
||||
在linux中打包和压缩和分两步来实现的;
|
||||
|
||||
* 打包是将多个文件归并到一个文件:
|
||||
```
|
||||
tar -cvf etc.tar /etc <==仅打包,不压缩!
|
||||
-c :打包选项
|
||||
-v :显示打包进度
|
||||
-f :使用档案文件
|
||||
注:有的系统中指定参数时不需要在前面加上-,直接使用tar xvf
|
||||
```
|
||||
|
||||
用tar实现文件夹同步,排除部分文件不同步:
|
||||
|
||||
```
|
||||
tar --exclude '*.svn' -cvf - /path/to/source | ( cd /path/to/target; tar -xf -)
|
||||
```
|
||||
|
||||
* 压缩,生成 demo.txt.gz
|
||||
```
|
||||
$gzip demo.txt
|
||||
```
|
||||
|
||||
## 3 解包/解压缩
|
||||
解包
|
||||
```
|
||||
tar -xvf demo.tar
|
||||
-x 解包选项
|
||||
```
|
||||
|
||||
解压后缀为 .tar.gz的文件
|
||||
|
||||
1. 解压缩
|
||||
```
|
||||
$gunzip demo.tar.gz
|
||||
```
|
||||
2. 解包:
|
||||
```
|
||||
$tar -xvf demo.tar
|
||||
```
|
||||
|
||||
bz2解压解包:
|
||||
```
|
||||
tar jxvf demo.tar.bz2
|
||||
```
|
||||
如果tar 不支持j,则同样需要分两步来解包解压缩,使用bzip2来解压,再使用tar解包:
|
||||
```
|
||||
bzip2 -d demo.tar.bz2
|
||||
tar -xvf demo.tar
|
||||
-d decompose,解压缩
|
||||
```
|
||||
|
||||
tar解压参数说明:
|
||||
```
|
||||
-z 解压gz文件
|
||||
-j 解压bz2文件
|
||||
-J 解压xz文件
|
||||
```
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
# 进程管理
|
||||
|
||||
> ps top lsof kill pmap
|
||||
|
||||
## 1 查询进程
|
||||
查询正在运行的进程信息
|
||||
```
|
||||
$ps -ef
|
||||
```
|
||||
eg:查询归属于用户colin115的进程
|
||||
```
|
||||
$ps -ef | grep colin115
|
||||
$ps -lu colin115
|
||||
```
|
||||
查询进程ID(适合只记得部分进程字段)
|
||||
```
|
||||
$pgrep 查找进程
|
||||
```
|
||||
eg:查询进程名中含有re的进程
|
||||
```
|
||||
[/home/weber#]pgrep -l re
|
||||
```
|
||||
|
||||
以完整的格式显示所有的进程
|
||||
```
|
||||
$ps -ajx
|
||||
```
|
||||
显示进程信息,并实时更新
|
||||
```
|
||||
$top
|
||||
```
|
||||
查看端口占用的进程状态:
|
||||
```
|
||||
lsof -i:3306
|
||||
```
|
||||
查看用户username的进程所打开的文件
|
||||
```
|
||||
$lsof -u username
|
||||
```
|
||||
查询init进程当前打开的文件
|
||||
```
|
||||
$lsof -c init
|
||||
```
|
||||
查询指定的进程ID(23295)打开的文件:
|
||||
```
|
||||
$lsof -p 23295
|
||||
``
|
||||
查询指定目录下被进程开启的文件(使用+D 递归目录):
|
||||
```
|
||||
$lsof +d mydir1/
|
||||
```
|
||||
## 2 终止进程
|
||||
杀死指定PID的进程 (PID为Process ID)
|
||||
```
|
||||
$kill PID
|
||||
```
|
||||
杀死相关进程
|
||||
```
|
||||
kill -9 3434
|
||||
```
|
||||
杀死job工作 (job为job number)
|
||||
```
|
||||
$kill %job
|
||||
```
|
||||
|
||||
## 3 进程监控
|
||||
查看系统中使用CPU、使用内存最多的进程;
|
||||
```
|
||||
$top
|
||||
(->)P
|
||||
```
|
||||
输入top命令后,进入到交互界面;接着输入字符命令后显示相应的进程状态:
|
||||
|
||||
对于进程,平时我们最常想知道的就是哪些进程占用CPU最多,占用内存最多。以下两个命令就可以满足要求:
|
||||
```
|
||||
P:根据CPU使用百分比大小进行排序。
|
||||
M:根据驻留内存大小进行排序。
|
||||
i:使top不显示任何闲置或者僵死进程。
|
||||
```
|
||||
这里介绍最使用的几个选项,对于更详细的使用,详见 top linux下的任务管理器 ;
|
||||
|
||||
## 4 分析线程栈
|
||||
使用命令pmap,来输出进程内存的状况,可以用来分析线程堆栈;
|
||||
```
|
||||
$pmap PID
|
||||
```
|
||||
|
||||
5.5. 综合运用
|
||||
将用户colin115下的所有进程名以av_开头的进程终止:
|
||||
```
|
||||
ps -u colin115 | awk '/av_/ {print "kill -9 " $1}' | sh
|
||||
```
|
||||
将用户colin115下所有进程名中包含HOST的进程终止:
|
||||
```
|
||||
ps -fe| grep colin115|grep HOST |awk '{print $2}' | xargs kill -9;
|
||||
```
|
||||
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
# 网络管理
|
||||
> netstat lsof route ping host wget sftp scp
|
||||
## 1 查询网络服务和端口
|
||||
netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
|
||||
|
||||
列出所有端口 (包括监听和未监听的):
|
||||
```
|
||||
netstat -a
|
||||
```
|
||||
列出所有 tcp 端口:
|
||||
```
|
||||
netstat -at
|
||||
```
|
||||
列出所有有监听的服务状态:
|
||||
```
|
||||
netstat -l
|
||||
```
|
||||
使用netstat工具查询端口:
|
||||
```
|
||||
$netstat -antp | grep 6379
|
||||
```
|
||||
|
||||
|
||||
查询7902端口现在运行什么程序:
|
||||
|
||||
1. 查询使用该端口的进程的PID
|
||||
```
|
||||
$lsof -i:7902
|
||||
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
|
||||
WSL 30294 tuapp 4u IPv4 447684086 TCP 10.6.50.37:tnos-dp (LISTEN)
|
||||
```
|
||||
2. 查到30294,使用ps工具查询进程详情:
|
||||
```
|
||||
$ps -fe | grep 30294
|
||||
tdev5 30294 26160 0 Sep10 ? 01:10:50 tdesl -k 43476
|
||||
root 22781 22698 0 00:54 pts/20 00:00:00 grep 11554
|
||||
```
|
||||
|
||||
|
||||
## 2 网络路由
|
||||
查看路由状态:
|
||||
```
|
||||
$route -n
|
||||
```
|
||||
发送ping包到地址IP:
|
||||
```
|
||||
$ping IP
|
||||
```
|
||||
探测前往地址IP的路由路径:
|
||||
```
|
||||
$traceroute IP
|
||||
```
|
||||
DNS查询,寻找域名domain对应的IP:
|
||||
```
|
||||
$host domain
|
||||
```
|
||||
反向DNS查询:
|
||||
```
|
||||
$host IP
|
||||
```
|
||||
|
||||
## 3 镜像下载
|
||||
直接下载文件或者网页:
|
||||
```
|
||||
wget url
|
||||
```
|
||||
常用选项:
|
||||
```
|
||||
–limit-rate :下载限速
|
||||
-o:指定日志文件;输出都写入日志;
|
||||
-c:断点续传
|
||||
```
|
||||
|
||||
axel工具真好用
|
||||
|
||||
|
||||
## 4 ftp sftp lftp ssh
|
||||
SSH登陆:
|
||||
```
|
||||
$ssh ID@host
|
||||
```
|
||||
ssh登陆远程服务器host,ID为用户名。
|
||||
|
||||
ftp/sftp文件传输:
|
||||
```
|
||||
$sftp ID@host
|
||||
```
|
||||
登陆服务器host,ID为用户名。sftp登陆后,可以使用下面的命令进一步操作:
|
||||
```
|
||||
get filename # 下载文件
|
||||
put filename # 上传文件
|
||||
ls # 列出host上当前路径的所有文件
|
||||
cd # 在host上更改当前路径
|
||||
lls # 列出本地主机上当前路径的所有文件
|
||||
lcd # 在本地主机更改当前路径
|
||||
```
|
||||
lftp同步文件夹(类似rsync工具):
|
||||
```
|
||||
lftp -u user:pass host
|
||||
lftp user@host:~> mirror -n
|
||||
```
|
||||
|
||||
## 5 网络复制
|
||||
将本地localpath指向的文件上传到远程主机的path路径:
|
||||
```
|
||||
$scp localpath ID@host:path
|
||||
```
|
||||
以ssh协议,遍历下载path路径下的整个文件系统,到本地的localpath:
|
||||
```
|
||||
$scp -r ID@site:path localpath
|
||||
```
|
||||
@@ -0,0 +1,215 @@
|
||||
## 变量
|
||||
|
||||
### 变量操作
|
||||
|
||||
* 定义变量
|
||||
|
||||
country="china"
|
||||
number = 10
|
||||
|
||||
* 使用变量
|
||||
|
||||
$country
|
||||
${country}
|
||||
echo "i love you ${country}abcd"
|
||||
|
||||
* 重新定义变量
|
||||
|
||||
country="hello"
|
||||
|
||||
* 只读变量
|
||||
|
||||
readonly country = "china"
|
||||
|
||||
* 删除变量
|
||||
|
||||
unset variable_name
|
||||
|
||||
### 变量类型
|
||||
|
||||
* 局部变量:在脚本中定义,在当前shell中有效
|
||||
* 环境变量:所有程序有效
|
||||
* shell变量:shell设置的特殊变量,有一部分是环境变量
|
||||
|
||||
### 特殊变量
|
||||
```
|
||||
$0 当前脚本文件名
|
||||
|
||||
$n 传递参数:第n个参数
|
||||
|
||||
$# 传递参数:参数个数
|
||||
|
||||
$* 传递参数:所有参数
|
||||
|
||||
$@ 传递参数:所有参数
|
||||
|
||||
$? 上个命令的返回至
|
||||
|
||||
$$ 当前shell的进程ID
|
||||
```
|
||||
### 转义字符
|
||||
|
||||
\\
|
||||
|
||||
\a
|
||||
|
||||
\b
|
||||
|
||||
\f
|
||||
|
||||
\n
|
||||
|
||||
\r
|
||||
|
||||
\t
|
||||
|
||||
\v
|
||||
|
||||
### 命令替换
|
||||
|
||||
把一个命令的输出赋值给另一个变量
|
||||
|
||||
directory = `pwd`
|
||||
|
||||
### 变量替换
|
||||
|
||||
... ...
|
||||
|
||||
## Shell 运算符
|
||||
|
||||
### 算术运算
|
||||
|
||||
不支持数学运算,但可以通过shell命令awk expr进行数学运算。
|
||||
|
||||
+ - * / % = == !=
|
||||
|
||||
### 关系运算
|
||||
|
||||
-eq
|
||||
|
||||
-ne
|
||||
|
||||
-gt
|
||||
|
||||
-lt
|
||||
|
||||
-ge
|
||||
|
||||
-le
|
||||
|
||||
### 布尔运算
|
||||
|
||||
!
|
||||
|
||||
-o
|
||||
|
||||
-a
|
||||
|
||||
### 字符串运算
|
||||
|
||||
= 检测两个字符串是否相等
|
||||
!= 字符串不相等
|
||||
-z 长度是否为零
|
||||
-n 是否不为零
|
||||
str 是否为空
|
||||
|
||||
## shell字符串
|
||||
|
||||
### 单引号限制
|
||||
|
||||
单引号内的任何字符原样输出,变量无效,转义字符无效
|
||||
|
||||
单引号不允许嵌套
|
||||
|
||||
### 双引号
|
||||
|
||||
内部可以有变量和转义字符
|
||||
|
||||
允许嵌套
|
||||
|
||||
### 字符串拼接
|
||||
|
||||
"hello $country"
|
||||
|
||||
### 字符串长度
|
||||
|
||||
${#string}
|
||||
|
||||
### 字符串切片
|
||||
|
||||
${string:1:4}
|
||||
|
||||
### 字符串查找
|
||||
|
||||
## shell 数组
|
||||
|
||||
### 定义数组
|
||||
|
||||
array_name[value0 value1 value2]
|
||||
|
||||
array_name[0]=value0
|
||||
|
||||
### 使用数组
|
||||
|
||||
${array_name[index]}
|
||||
${array_name[@]}
|
||||
|
||||
### 获取数组信息
|
||||
|
||||
length = ${#array_name[@]}
|
||||
|
||||
## printf 格式化输出函数
|
||||
|
||||
$ printf "%d %s\n" 1 "abc"
|
||||
|
||||
## 条件语句
|
||||
|
||||
### if
|
||||
if
|
||||
then
|
||||
else
|
||||
fi
|
||||
|
||||
### case
|
||||
|
||||
case a in
|
||||
;;
|
||||
;;
|
||||
esac
|
||||
|
||||
### for
|
||||
|
||||
for a in list
|
||||
do
|
||||
|
||||
done
|
||||
|
||||
### while
|
||||
|
||||
whle [$a -lt 5]
|
||||
do
|
||||
|
||||
done
|
||||
|
||||
### until
|
||||
|
||||
util command
|
||||
do
|
||||
|
||||
done
|
||||
|
||||
## 函数
|
||||
|
||||
function_name(){
|
||||
list of commands
|
||||
return value
|
||||
}
|
||||
|
||||
## 文件包含
|
||||
|
||||
. filename
|
||||
|
||||
source filename
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
# vim编辑器
|
||||
|
||||

|
||||
|
||||
## 1 vi/vim三种模式
|
||||
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
|
||||
|
||||
### 命令模式:
|
||||
用户刚刚启动 vi/vim,便进入了命令模式。
|
||||
|
||||
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
|
||||
|
||||
以下是常用的几个命令:
|
||||
|
||||
* i 切换到输入模式,以输入字符。
|
||||
* x 删除当前光标所在处的字符。
|
||||
* : 切换到底线命令模式,以在最底一行输入命令。
|
||||
|
||||
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
|
||||
|
||||
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
|
||||
|
||||
### 输入模式
|
||||
在命令模式下按下i就进入了输入模式。
|
||||
|
||||
在输入模式中,可以使用以下按键:
|
||||
|
||||
* 字符按键以及Shift组合,输入字符
|
||||
* ENTER,回车键,换行
|
||||
* BACK SPACE,退格键,删除光标前一个字符
|
||||
* DEL,删除键,删除光标后一个字符
|
||||
* 方向键,在文本中移动光标
|
||||
* HOME/END,移动光标到行首/行尾
|
||||
* Page Up/Page Down,上/下翻页
|
||||
* Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
|
||||
* ESC,退出输入模式,切换到命令模式
|
||||
|
||||
### 底线命令模式
|
||||
在命令模式下按下:(英文冒号)就进入了底线命令模式。
|
||||
|
||||
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
|
||||
|
||||
在底线命令模式中,基本的命令有(已经省略了冒号):
|
||||
|
||||
* q 退出程序
|
||||
* w 保存文件
|
||||
* 按ESC键可随时退出底线命令模式。
|
||||
|
||||
简单的说,我们可以将这三个模式想成底下的图标来表示:
|
||||
|
||||

|
||||
|
||||
|
||||
## 2 命令模式
|
||||
|
||||
一般模式可用的光标移动、复制粘贴、搜索替换等
|
||||
|
||||
### 移动光标
|
||||
|操作|效果|
|
||||
|-|-|
|
||||
|h 或 向左箭头键(←) |光标向左移动一个字符|
|
||||
|j 或 向下箭头键(↓) |光标向下移动一个字符|
|
||||
|k 或 向上箭头键(↑) |光标向上移动一个字符|
|
||||
|l 或 向右箭头键(→) |光标向右移动一个字符|
|
||||
|
||||
如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 "30j" 或 "30↓" 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可!
|
||||
|
||||
|操作|效果|
|
||||
|-|-|
|
||||
|[Ctrl] + [f]| 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)|
|
||||
|[Ctrl] + [b]| 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)|
|
||||
|[Ctrl] + [d]| 屏幕『向下』移动半页|
|
||||
|[Ctrl] + [u]| 屏幕『向上』移动半页|
|
||||
|+ |光标移动到非空格符的下一行|
|
||||
|- |光标移动到非空格符的上一行|
|
||||
|n<space> |那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20<space> 则光标会向后面移动 20 个字符距离。|
|
||||
0 或功能键[Home] |这是数字『 0 』:移动到这一行的最前面字符处 (常用)|
|
||||
$ 或功能键[End] |移动到这一行的最后面字符处(常用)|
|
||||
|H |光标移动到这个屏幕的最上方那一行的第一个字符|
|
||||
|M |光标移动到这个屏幕的中央那一行的第一个字符|
|
||||
|L |光标移动到这个屏幕的最下方那一行的第一个字符|
|
||||
|G |移动到这个档案的最后一行(常用)|
|
||||
nG |n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)|
|
||||
|gg |移动到这个档案的第一行,相当于 1G 啊! (常用)|
|
||||
|n<Enter> |n 为数字。光标向下移动 n 行(常用)|
|
||||
|
||||
### 搜索替换
|
||||
|操作|效果|
|
||||
|-|-|
|
||||
|/word 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
|
||||
|?word 向光标之上寻找一个字符串名称为 word 的字符串。
|
||||
|n 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
|
||||
|N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
|
||||
|使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词!
|
||||
|:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则:
|
||||
『:100,200s/vbird/VBIRD/g』。(常用)
|
||||
:1,$s/word1/word2/g 或 :%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
|
||||
:1,$s/word1/word2/gc 或 :%s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)
|
||||
删除、复制与贴上
|
||||
x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
|
||||
nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
|
||||
dd 删除游标所在的那一整行(常用)
|
||||
ndd n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
|
||||
d1G 删除光标所在到第一行的所有数据
|
||||
dG 删除光标所在到最后一行的所有数据
|
||||
d$ 删除游标所在处,到该行的最后一个字符
|
||||
d0 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
|
||||
yy 复制游标所在的那一行(常用)
|
||||
nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
|
||||
y1G 复制游标所在行到第一行的所有数据
|
||||
yG 复制游标所在行到最后一行的所有数据
|
||||
y0 复制光标所在的那个字符到该行行首的所有数据
|
||||
y$ 复制光标所在的那个字符到该行行尾的所有数据
|
||||
p, P p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
|
||||
J 将光标所在行与下一行的数据结合成同一行
|
||||
c 重复删除多个数据,例如向下删除 10 行,[ 10cj ]
|
||||
u 复原前一个动作。(常用)
|
||||
[Ctrl]+r 重做上一个动作。(常用)
|
||||
这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑,嘿嘿!很快乐的啦!
|
||||
. 不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用)
|
||||
|
||||
## 编辑模式
|
||||
第二部分:一般模式切换到编辑模式的可用的按钮说明
|
||||
进入输入或取代的编辑模式
|
||||
i, I 进入输入模式(Insert mode):
|
||||
i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。 (常用)
|
||||
a, A 进入输入模式(Insert mode):
|
||||
a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用)
|
||||
o, O 进入输入模式(Insert mode):
|
||||
这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处输入新的一行』; O 为在目前光标所在处的上一行输入新的一行!(常用)
|
||||
r, R 进入取代模式(Replace mode):
|
||||
r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
|
||||
上面这些按键中,在 vi 画面的左下角处会出现『--INSERT--』或『--REPLACE--』的字样。 由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入喔!
|
||||
[Esc] 退出编辑模式,回到一般模式中(常用)
|
||||
|
||||
## 底线模式
|
||||
第三部分:一般模式切换到指令行模式的可用的按钮说明
|
||||
指令行的储存、离开等指令
|
||||
:w 将编辑的数据写入硬盘档案中(常用)
|
||||
:w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
|
||||
:q 离开 vi (常用)
|
||||
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
|
||||
注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~
|
||||
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
|
||||
ZZ 这是大写的 Z 喔!若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开!
|
||||
:w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
|
||||
:r [filename] 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面
|
||||
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案。
|
||||
:! command 暂时离开 vi 到指令行模式下执行 command 的显示结果!例如
|
||||
『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息!
|
||||
vim 环境的变更
|
||||
:set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号
|
||||
:set nonu 与 set nu 相反,为取消行号!
|
||||
特别注意,在 vi/vim 中,数字是很有意义的!数字通常代表重复做几次的意思! 也有可能是代表去到第几个什么什么的意思。
|
||||
|
||||
举例来说,要删除 50 行,则是用 『50dd』 对吧! 数字加在动作之前,如我要向下移动 20 行呢?那就是『20j』或者是『20↓』即可。
|
||||
BIN
Linux/工具篇/image/vi-vim-cheat-sheet-sch.gif
Normal file
BIN
Linux/工具篇/image/vi-vim-cheat-sheet-sch.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 131 KiB |
BIN
Linux/工具篇/image/vim-vi-workmodel.png
Normal file
BIN
Linux/工具篇/image/vim-vi-workmodel.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 61 KiB |
47
Linux/工具篇/swap缓存.md
Normal file
47
Linux/工具篇/swap缓存.md
Normal file
@@ -0,0 +1,47 @@
|
||||
# swap缓存配置
|
||||
|
||||
|
||||
> swapon、swapoff
|
||||
|
||||
## 配置过程
|
||||
1.首先用命令free查看系统内 Swap 分区大小
|
||||
```
|
||||
free -m
|
||||
total used free shared buffers cached
|
||||
Mem: 2012 1960 51 0 748 950
|
||||
-/+ buffers/cache: 260 1751
|
||||
Swap: 255 0 255
|
||||
可以看到 Swap 只有255M,下面我们来扩大到2G。
|
||||
```
|
||||
2.创建一个 Swap 文件
|
||||
```
|
||||
找一个空间足够的目录用来存放swap文件
|
||||
mkdir /swap
|
||||
cd /swap
|
||||
sudo dd if=/dev/zero of=swapfile bs=1024 count=2000000
|
||||
出现下列提示,上面命令中的 count 即代表swap文件大小。
|
||||
记录了2000000+0 的读入
|
||||
记录了2000000+0 的写出
|
||||
2048000000字节(2.0 GB)已复制,63.3147 秒,32.3 MB/秒
|
||||
把生成的文件转换成 Swap 文件
|
||||
sudo mkswap -f swapfile
|
||||
Setting up swapspace version 1, size = 1999996 KiB
|
||||
no label, UUID=fee9ab21-9efb-47c9-80f4-57e48142dd69
|
||||
```
|
||||
3.激活 Swap 文件
|
||||
```
|
||||
sudo swapon swapfile
|
||||
再次查看 free -m 的结果。
|
||||
total used free shared buffers cached
|
||||
Mem: 2012 1971 41 0 572 1156
|
||||
-/+ buffers/cache: 241 1770
|
||||
Swap: 2209 0 2209
|
||||
添加成功。
|
||||
```
|
||||
4.扩展:
|
||||
```
|
||||
如果需要卸载这个 swap 文件,可以进入建立的 swap 文件目录。执行下列命令。
|
||||
sudo swapoff swapfile
|
||||
如果需要一直保持这个 swap ,可以把它写入 /etc/fstab 文件。
|
||||
/swap/swapfile /swap swap defaults 0 0
|
||||
```
|
||||
82
Linux/开发篇/gcc路径检索.md
Normal file
82
Linux/开发篇/gcc路径检索.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# linux下gcc默认搜索头文件及库文件的路径
|
||||
|
||||
## 1 头文件
|
||||
|
||||
gcc 在编译时如何去寻找所需要的头文件:
|
||||
|
||||
1. 所有header file的搜寻会从-l开始
|
||||
2. 然后找gcc的环境变量
|
||||
|
||||
C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
|
||||
|
||||
3. 再找内定目录
|
||||
|
||||
```
|
||||
/usr/include
|
||||
/usr/local/include
|
||||
/usr/lib/gcc-lib/i386-linux/2.95.2/include
|
||||
/usr/lib/gcc-lib/i386-linux/2.95.2/……/……/……/……/include/g++-3
|
||||
/usr/lib/gcc-lib/i386-linux/2.95.2/……/……/……/……/i386-linux/include
|
||||
# 库文件但是如果装gcc的时候,是有给定的prefix的话,那么就是
|
||||
/usr/include
|
||||
prefix/include
|
||||
prefix/xxx-xxx-xxx-gnulibc/include
|
||||
prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include
|
||||
```
|
||||
|
||||
## 2 库文件
|
||||
> cos()等函式库的选项要多加 -lm
|
||||
|
||||
编译的时候:
|
||||
|
||||
1. gcc会去找-L
|
||||
2. 再找gcc的环境变量LIBRARY_PATH
|
||||
3. 再找内定目录 /lib /usr/lib /usr/local/lib这是当初compile gcc时写在程序内的
|
||||
|
||||
|
||||
## 3 动态库的搜索路径
|
||||
1. 在配置文件/etc/ld.so.conf中指定动态库搜索路径
|
||||
2. 通过环境变量LD_LIBRARY_PATH指定动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔)
|
||||
3. 在编译目标代码时指定该程序的动态库搜索路径(还可以在编译目标代码时指定程序的动态库搜索路径。
|
||||
|
||||
这是通过gcc 的参数"-Wl,-rpath,"指定(如例3所示)。当指定多个动态库搜索路径时,路径之间用冒号":"分隔)
|
||||
|
||||
|
||||
4. 默认的动态库搜索路径/lib
|
||||
5. 默认的动态库搜索路径/usr/lib
|
||||
|
||||
|
||||
可以通过执行可执行文件pos得到的结果不同获知其搜索到了哪个动态库,从而获得第1个动态库搜索顺序,然后删除该动态库,再执行程序pos,获得第2个动态库搜索路径,再删除第2个被搜索到的动态库,如此往复,将可得到Linux搜索动态库的先后顺序。
|
||||
程序pos执行的输出结果和搜索到的动态库的对应关系如表1所示
|
||||
程序pos输出结果使用的动态库对应的动态库搜索路径指定方式
|
||||
```
|
||||
./ ./libpos.so 编译目标代码时指定的动态库搜索路径
|
||||
/root/test/env/lib /root/test/env/lib/libpos.so环境变量LD_LIBRARY_PATH指定的动态库搜索路径
|
||||
/root/test/conf/lib /root/test/conf/lib/libpos.so配置文件/etc/ld.so.conf中指定的动态库搜索路径
|
||||
/lib /lib/libpos.so 默认的动态库搜索路径/lib
|
||||
/usr/lib /usr/lib/libpos.so 默认的动态库搜索路径/usr/lib
|
||||
```
|
||||
|
||||
综合以上结果可知,动态库的搜索路径搜索的先后顺序是:
|
||||
|
||||
1. 编译目标代码时指定的动态库搜索路径;
|
||||
2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
|
||||
3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径;
|
||||
4. 默认的动态库搜索路径/lib;
|
||||
5. 默认的动态库搜索路径/usr/lib.
|
||||
|
||||
|
||||
|
||||
g++ -std=c++11 con_var.cpp -lpthread
|
||||
|
||||
## 链接过程
|
||||
https://www.jianshu.com/p/4510b47ecd8a
|
||||
|
||||
https://blog.csdn.net/caikunbob/article/details/85550000
|
||||
|
||||
|
||||
明白一件事。
|
||||
|
||||
C/C++ 经过编译汇编,生成二进制文件,只需要搜索头文件,找到函数的相关声明,即可正常编译。
|
||||
|
||||
C/C++ 经过链接,需要搜索头文件中指定的库文件,编译相关的函数,生成二进制文件,然后进行链接,生成目标文件。
|
||||
96
Linux/开发篇/搭建php环境.md
Normal file
96
Linux/开发篇/搭建php环境.md
Normal file
@@ -0,0 +1,96 @@
|
||||
# Apache详解
|
||||
|
||||
## Apache目录结构说明
|
||||
* /etc/httpd/conf/httpd.conf:最主要的配置文件,不过很多其他的distribution都将这个文件拆成数个小文件,分别管理不同的参数。但是最主要配置文件还是以这个文件名为主。
|
||||
* /etc/httpd/conf.d/*.conf:这个事CentOS的特色之一,如果你不想修改原始配置文件httpd.conf的话,那么可以将你自己的额外参数独立出来,而启动apache时,这个文件就会被读入到主要配置文件。
|
||||
|
||||
* /var/www/html:这里是CentOS默认的“首页”所在目录。
|
||||
* /var/www/error:如果因为主机设置错误,或者是浏览器端要求的数据错误,在浏览器上出现的错误信息就已这个目录的默认信息为主。
|
||||
* /var/www/icons:提供apache的一些小图标
|
||||
* /var/www/cgi-bin :默认给一些可执行的CGI程序放置的目录
|
||||
* /var/log/httpd:默认apache的日志文件都放在这里,对于流量大的网站来说,这个目录要很小心,因为这个文件很容易变的很大,您需要足够的空间哦
|
||||
|
||||
* /usr/lib/httpd/modules:apache支持很多的模块,所以您想要使用的模块默认都放置在此目录
|
||||
* /usr/sbin/apachectl:这是Apache的主要执行文件,这个执行文件其实是shell script,它可以主动检测系统上的一些设置值,好让您启动Apache时更简单
|
||||
* /usr/sbin/httpd:这是主要的apache的二进制文件
|
||||
* /usr/bin/htpasswd:当您想登陆某些网页时,需要输入账号与密码。那么Apache本身就提供一个最基本的密码保护方式。该密码的产生就是通过这个命令实现的
|
||||
|
||||
|
||||
## MySQL目录与文件说明
|
||||
|
||||
|
||||
* /etc/my.cnf:这是Mysql的配置文件,包括您想要进行mysql数据库的最佳化,或者是正对mysql进行一些额外的参数指定,都可以在这个文件里实现
|
||||
* /usr/lib/mysql:这个目录是MySQL数据库放置的位置,当启动任何MySQL的服务器时,请务必记得在备份时,将此目录完整的备份下来。
|
||||
|
||||
## PHP文件说明
|
||||
|
||||
* /usr/lib/httpd/modules/libphp4.so:PHP提供给apache使用的模块,这个关系我们能否在apache网页上面设计php程序语言的最重要文件
|
||||
* /etc/httpd/conf.d/php.conf:你要不要手动将该模块写入Httpd.conf中呢?不需要,因为系统已经主动将php设置参数写入到这个文件中了,而这个文件会在apache重新启动时被读入。
|
||||
* /etc/php.ini:这是PHP的主要配置文件,包括PHP能不能允许用户上传文件,能不能允许某些低安全性的标志等,都在这个配置文件中设置。
|
||||
* /etc/php.d/mysql.ini /usr/lib/php4/mysql.so:PHP能否可以支持MySQL接口就看这两个文件了。这两个文件是由php-mysql软件提供的
|
||||
* /usr/bin/phpize /usr/include/php:如果您以后想要安装类似PHP加速器可以让浏览速度加快的话,那么这个文件与目录就需要存在,否则加速器软件没法用。
|
||||
|
||||
## Apache的配置说明
|
||||
* httpd.conf的基本设置是这样的:
|
||||
```
|
||||
<设置项目>
|
||||
次设置项目内的相关参数
|
||||
。。。。
|
||||
</设置项目>
|
||||
```
|
||||
|
||||
* ServerTokens OS
|
||||
这个项目在告诉客户端WWW服务器的版本和操作系统,不需要改编它
|
||||
如果你不想告诉太多的主机信息,将这个项目的OS改成Minor
|
||||
|
||||
* ServerRoot "/etc/httpd"
|
||||
这个是设置文件的最顶层目录,通常使用绝对路径,下面某些数据设置使用相对路径时.
|
||||
就是与这个目录设置值有关的下层目录,不需要更改它
|
||||
|
||||
* TimeOut
|
||||
设定 服务器接收至完成的最长等待时间
|
||||
|
||||
* KeepAlive
|
||||
设定服务器是否开启连续请求功能,真实服务器一般都要开启
|
||||
* Port
|
||||
设定http服务的默认端口。
|
||||
* User/Group
|
||||
设定 服务器程序的执行者与属组,这个一般是Apache
|
||||
|
||||
* Listen 80
|
||||
端口Listen 12.34.56.78:80
|
||||
|
||||
* DocumentRoot "/var/www/html"
|
||||
文档目录
|
||||
|
||||
* 对 /var/www目录访问限制
|
||||
```
|
||||
<Directory "/var/www">
|
||||
AllowOverride None
|
||||
# Allow open access:
|
||||
Require all granted
|
||||
</Directory>
|
||||
对/var/www/html目录访问限制
|
||||
<Directory "/var/www/html">
|
||||
Options Indexes FollowSymLinks
|
||||
AllowOverride None
|
||||
Require all granted
|
||||
</Directory>
|
||||
```
|
||||
* 默认编码
|
||||
```
|
||||
AddDefaultCharset UTF-8
|
||||
EnableMMAP off
|
||||
EnableSendfile on
|
||||
include进来其它配置文件
|
||||
IncludeOptional conf.d/*.conf
|
||||
```
|
||||
|
||||
## Mysql服务安装
|
||||
|
||||
安装成功,傻瓜安装,一键配置。
|
||||
|
||||
## FTP服务的安装
|
||||
|
||||
|
||||
## 工程项目的导入和配置
|
||||
Reference in New Issue
Block a user