一、操作命令(crtl+c终止终端命令)
1、pwd/tree:显示当前目录
- tree 目录:树状显示指定录下的目录及文件
- tree -d 目录:树状显示指定目录下的目录
(没指定目录时,显示当前目录,eg:tree)
2、显示当前目录下的文件
ll:显示文件详细信息(等同于ls -l)
ls:仅显示文件
ls或ll 路径/x*:显示根目录下以x开头的所有文件与文件夹信息
ls或ll 路径/*x:显示根目录下以x结尾的所有文件与文件夹信息
(*代表任意个字符,?代表一个字符,[ ]:匹配中括号内任意一个字符,[abc]:匹配abc中任意一个字符,[a-c]:匹配a到c的范围内任意一个字符)
结合常用参数:ls或ll -alhdFrRsSh 目录
- -a:显示所有文件(含开头为 . 的隐藏文件)
- -l :列表显示所有文件详细信息(文件属性)
- ll -h:列表显示所有文件的大小属性等
(du -sh 文件:可以查看指定文件的大小,文件夹优先用此命令) - -d:仅列出目录,不列出目录下的文件
- -F:列出文件类型,在每一个列举项目之后添加一个符号(/目录;@到其它文件的符号链接;*可执行文件)
- -r:从后向前显示文件
- -R:列举目录下的文件以及子目录下所有文件
- -s:以块大小列出所有文件及其大小
- -S:按文件大小降序显示
- -h:一容易理解的格式列出文件大小(K、M、G)
3、显示文件内容
cat -AbEnTv 文件:显示文件的所有内容(适用于内容较少的文件)
- -A:列出特殊字符,相当于vET
- -b:列出非空行的行号
- -E:将结尾的断行字节$显示出来
- -n:列出所有行号(含空白行)
- -T:将Tab按键以^|显示出来
- -v:列出一些看不出来的特殊字符
more 文件名:分屏显示所有内容(每次只显示一页)
- 空格键或f:显示下一页
- b:显示上一页
- 回车键:显示下一行
- q:退出
- /word:向下搜索word字符串
less 文件名:分屏显示所有内容(可向前翻页)
- pagedown键/空白键:显示下一页
- pageup键:显示上一页
- 回车键:显示下一行
- q:退出
- /word:向下搜索word字符串
- ?word:向上搜索word字符串
head/tail 文件:默认取前/后10行
head/tail -n number 文件:取前/后number行
重点:实时查看
tail -f:仅实时查看文件内容(只局限于查看文件内容)
tail -F:实时查看文件内容并输出生产全过程(常用,可检查文件是否存在)
eg:在数据抽取或输出日志时,由于文件过大而自动备份文件后,继续在本文件中追加数据,F则可以查看继续追加的数据;f只能查看文件备份前的数据,无法查看全部数据
4、grep:搜索内容
grep 内容 文件:常通过管道函数与查看函数cat连用
- grep -n 内容 文件:显示行号
- grep -A x:后x行
- grep -B x:前x行
- grep -C x:前后x行
- grep -v 内容 文件:显示搜索内容以外的内容
- grep -vn 内容 文件:显示搜索内容以外的内容,并显示行号
- grep -i 内容 文件:忽略大小写
- grep -in:显示搜索内容及行号,忽略大小写
- grep ^内容 文件:显示以搜索内容开头的行
- grep 内容$ 文件:显示以搜索内容结尾的行
重点示例:日志定位error
- 内容少(几十兆)
1、将日志下载到Windows本地,然后用Editplus工具打开查看
2、yum install -y lrzsz #安装文件上传下载的包
3、sz 文件 #默认下载到本地download路径
(rz回车,然后选择本地文件 #本地文件上传到linux) - 内容大
cat 文件 | grep ERROR #ERROR当前行
cat 文件 | grep -A 10 ERROR #ERROR后10行
cat 文件 | grep -B 10 ERROR #ERROR前10行
cat 文件 | grep -C 10 ERROR #ERROR前后各10行
5、cd:切换目录
cd 路径:切换到指定路径
- cd ~:切换到家目录
- cd . :当前目录不变
- cd . .:切换到上级目录
- cd - :上级目录与当前目录间切换
切换到家目录的桌面
cd ~/desktop
6、mkdir:新建文件夹
mkdir -p 文件夹:可以连接递进创建多层目录
mkdir -m 文件夹:创建文件夹的同时配置权限
创建文件夹123
mkdir 123
创建文件夹123,并在123中创建文件夹py,在py下创建文件夹py1
mkdir -p 123/py/py1
创建文件夹123,并配置权限rwxrw---x
mkdir -m 761 123
7、新建文件
- touch 路径/文件
文件不占用字节 - cat /dev/null > 路径/文件
将已存在文件清空或者创建新文件(/dev/null存放丢弃的文件,直接cat会发现它是空的) - echo “” > 路径/文件
将已存在文件清空或者创建新文件(慎用,创建的文件会占用一个字节,可用于清空文件;当判断文件是否为空时,这个文件会显示不为空,因为它占一个字节,所以一般不使用此命令) - vim 路径/文件
文件不占用字节,且可以直接编辑
在当前目录创建文件01.txt
touch ./01.txt
echo /dev/null > ./01.txt
echo "" > ./01.txt
vim ./01.txt
在文件夹a/b/c下创建文件01.txt
touch a/b/c/01.txt
8、rm:删除(删除后不会恢复,不要在根目录下使用)
rm要慎用,以免删除掉根目录或其他重要目录
- rmdir 目录:删除空目录(非空目录删不掉)
- rmdir -p 目录:删除空目录,删掉目录后,若上级目录变成空目录,也一起删除
- rm -r 文件或目录:删除文件夹/文件(删除同目录下所有文件与目录)
- rm -f 文件或目录:强制删除文件夹/文件
- rm -i 文件或目录:删除前会询问是否删除
rm -rf /home/byy/test #强制删除这个路径下的所有文件
#shell脚本中,有时候会定义一个空值变量,此时一定要慎用rm
k=""
rm -rf $k/ #强制删除根目录
9、cp:拷贝(文件名不变时,不需要输入粘贴文件)
cp 复制文件 粘贴文件(文件名不变时,不需要输入粘贴文件)
- cp -r:复制文件夹
- cp -i:复制的文件已存在时,询问是否覆盖
- cp -f:强制复制,若目标文件已存在,则移除后再复制一次
- cp -p:连同文件属性一起复制
将家目录下的documents目录下的a.txt复制到当前目录,文件名不变
cp ~/documents/a.txt
将家目录下的documents目录下的a.txt复制到当前目录,重命名为b.txt
cp ~/documents/a.txt ./b.txt
复制当前目录下的a文件夹,重命名为b
cp -r a b
将家目录下的documents目录下的a.txt复制到当前目录,覆盖已存在的a.txt
cp -i ~/documents/a.txt
y
或者
cp -f ~/documents/a.txt
10、mv:移动文件或文件夹
mv 源路径/源文件 目标路径/目标文件
mv -i 源路径/源文件 目标路径/目标文件:询问是否覆盖
mv -f 源路径/源文件 目标路径/目标文件:强制覆盖
将家目录下documents目录下的a.txt文件移动到当前目录
mv ~/documents/a.txt .
将家目录下documents目录下的a.txt文件移动到桌面
mv ~/documents/a.txt ~/desktop/a.txt
将当前目录下的123文件夹重命名为1
mv 123 1
11、追加
echo word > 文件:追加覆盖,相当于替换文件内容
echo word >> 文件:追加不覆盖
--将hello放入a中显示,覆盖原内容
echo hello > a.txt
--将hello放入a中显示,不覆盖原内容
echo hello >> a.txt
注:echo用来直接把指内容追加到文件中,若想追加已有内容,则可先显示内容,然后再追加给文件
--将当前目录下的内容放入a中显示,并覆盖
ls -lh > a.txt
--将当前目录下的内容放入a中显示,不覆盖
ls -lh >> a.txt
12、管道
命令1 | 命令2:命令2对命令1进行操作
- 命令 | more:分屏显示
- 命令 | grep:定向查找
--分屏显示家目录下的所有文件信息
ls -lha ~ | more
--查找家目录下所有文件信息中的do
ls -lha ~ | grep do
13、echo 输出
echo 字符或变量
--输出hello,cindy
echo "hello,cindy"
--查看环境变量
echo $PATH
14、alias 别名
将脚本定义为别名,以简化操作
alias 别名=‘脚本’
alias o='cd /home/byy'
o #切换到/home/byy路径下
15、历史命令
history:查看历史命令
!命令序号:执行命令
!!:执行上一条命令
!字符:执行以字符开头的上一条命令
history n:输出最近n条历史命令
history -c:清空历史命令(对堡垒机无效,堡垒机会单独产生日志)
/root/.bash_history:存放历史命令的文件
history -w:将当前历史命令缓冲区命令写入历史命令文件中
- 直接用history看到的历史命令比.bash_history文件中的历史命令多,因为我们登录之后新操作的命令只有退出之后才会写入到.bash_history中
- 历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中找到HISTSIZE=1000,把1000改成别的值后保存退出
- 默认只显示命令及其序号,但生产过程中通常需要查询某些重要的历史命令的执行时间及执行用户,此时需要进行配置
全局变量配置:显示命令时间及用户
#编辑全局变量
vim /etc/profile
#在最后一行编辑
HISTTIMEFORMAT="%Y-%m-%d:%H-%M-%S:`whoami`:"
export HISTTIMEFORMAT
#生效全局变量
. /etc/profile
#验证效果
history
#输出内容如下
21 2021-01-28:20-09-42:root:which c
22 2021-01-28:20-09-42:root:vim /home/byy/.bashrc
16、scp:远程复制文件(scp -r代表复制文件夹)
用cmd命令即可
- 将本地文件复制到远程计算机上
scp 本地文件名 远程计算机的user@IP:远程粘贴路径/粘贴文件名 - 将远程计算机的文件复制到本地
scp 远程计算机user@IP:远程复制路径/远程文件名 粘贴文件名 - 如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P来设置命令的端口号
scp -P 端口 本地文件名 远程计算机的user@IP:远程粘贴路径/粘贴文件名
scp -P 端口 远程计算机的user@IP:远程复制路径/远程文件名 粘贴文件名
--拷贝本机/home/administrator/test整个目录至远程主机192.168.1.100的/root目录下
scp -r /home/administrator/test/ root@192.168.1.100:/root/
--拷贝远程主机192.168.1.100的文件/root/test.csv至本地路径/home/administrator/下
scp root@192.168.1.100:/root/test.csv /home/administrator/test.csv
--拷贝的时候需指定端口4456
scp -r -P 4456 /home/administrator/test/ root@192.168.1.100:/root/
17、打包解包
tar:自带命令
- tar -cvf 包.tar 打包文件:打包
- tar -xvf 包.tar:解包
- tar -zcvf 包.tar.gz 打包文件:将文件压缩到压缩包里
- tar -zxvf 包.tar.gz -C 解压路径:将文件解压到指定目录
- tar -jcvf 包.tar.bz2 打包文件:将文件压缩到压缩包里
- tar -jxvf 包.tar.bz2 -C 解压路径:将文件解压到指定目录
将文件01.py 02.py打包到a中,并解压a
tar -cvf a.tar 01.py 02.py
tar -xvf a.tar
tar -zcvf a.tar.gz 01.py 02.py
tar -zxvf a.tar.gz -C /home/desktop/a
tar -jcvf a.tar.bz2 01.py 02.py
tar -jxvf a.tar.bz2 -C /home/desktop/a
zip/unzip:用yum安装
- zip 包.zip 打包文件:打包
- unzip 包.zip:解包
- zip -r 包.zip 打包文件:层层目录都压缩
zip 1.zip ./* #将当前目录所有文件压缩到1.zip中
unzip 1.zip #当前路径下的1/2/3嵌套路径解压后只剩1这个路径,2/3都不会被压缩
Archive: 4.zip
creating: 1/
zip -r 1.zip ./* #将当前目录所有文件压缩到1.zip中
unzip 1.zip #当前路径下的1/2/3嵌套路径解压后也是1/2/3路径
Archive: 4.zip
creating: 1/
creating: 1/2/
creating: 1/2/3/
creating: bin/
creating: 公共/
creating: 模板/
creating: 视频/
creating: 图片/
zip -r 1.zip 1/* #只压缩1/2/3目录到1.zip中
18、终端实用技巧
- tab键:自动补全文件名/文件夹名(若几个文件夹/文件的前几个字母有重复,双击tab会提示相似文件夹名/文件名
- 上箭头/下箭头:重复使用上条/下条命令
- ctrl c:退出本条命令且不执行
- ctrl shift =:字体放大
- ctrl -:字体缩小
- 查看命令的帮助信息:命令 --help
- 空格/f:下一页
- b:回退一页
- 回车键:下一行
二、vim详解
vim 文件名:文件已存在时,编辑文件;文件不存在时,创建文件
i:进入编辑模式按esc:退出编辑
输入:w:保存
输入:wq:保存并退出
输入:wq!:强制保存并退出
注:出现can’t open file for writing报错,一般是因为用户没有权限在当前目录下创建或修改文件,可以切换到用户所有目录底下进行操作。
基本上 vim 共分为三种模式:命令模式,输入模式、底线命令模式。
粘贴要先点击i进入编辑模式,否则会粘贴不全
1、命令模式:刚启动vim,便进入命令模式
常用命令
- x:删除当前光标所在处的字符
- dd:删除当前行
- dG:删除光标以下所有内容,含光标所在行
- ndd:删除光标以下的n行,含光标所在行
- gg:跳转到第一行的第一个字母
- G:跳转到最后一行的第一个字母
- Shift+$:跳转到光标所在行尾
#清空当前路径下的byy.txt文件内容
vim ./byy.txt
gg #跳转到第一行的第一个字符
dG #删除包含第一行在内的所有行
2、输入模式
常用按键
- i:进入输入模式,编辑内容
- Insert:切换光标为输入/替换模式,光标将变成竖线/下划线
3、底线命令模式
常用命令
- Esc + : :进入底线命令模式,以在最底一行输入命令
- q:退出程序
- w:保存文件
- /word:模糊匹配,回车搜素word的位置,按N键找下一个
- set nu:显示文件内容的行号
- set nonu:去掉行号
4、数据加载实例
大量数据快速上传库表(有时直接用数据库客户端上传数据时会很慢,就要借助linux命令load数据)
- 打开数据库所在服务器(使用Linux终端建立连接好服务器)
- 上传文件至服务器
linux终端→sftp→upload本地文件(经常用csv格式) - 将文件移动到数据库的指定路径下
mv 本地文件 数据库指定路径/文件名 - 把文件所有者设置为数据库用户
chown 数据库对应用户名 路径\文件名 - 切换到数据库对应用户
su - 数据库对应的用户 - 查看数据库对应用户上是否存在此文件
ls 文件名 - 查看前十条文件内容
head 文件名 - 查看load.sql文件
cat load.sql - 修改load.sql文件(库表名、数据结构、已经上传的文件名):
vim load.sql→enter→i→编辑→esc退出编辑→shift+:→wq!保存并退出 - 将文件格式从dos转换为unix(必要时可转换)
dos2unix 文件名 - 调用load.sql导入数据
dbisql -c ‘uid=数据库登录名;pwd=登录密码’ -nogui load.sql
实例
> 打开数据库所在服务器(使用Linux终端建立连接好服务器)
#上传文件至服务器
linux终端→sftp→upload→test.csv
#将文件移动到数据库的指定路径下
mv test.csv \opt\export\home\netview\test.csv
#把文件所有者设置为数据库用户
chown netview \opt\export\home\netview\test.csv
#切换到数据库对应用户
su - netview
#查看数据库对应用户上是否存在此文件
ls
#查看前十条文件内容
head test.csv
#查看load.sql文件
cat load.sql
#修改load.sql文件
vim load.sql并按回车键
显示以下内容(load.sql原来的内容)
Load Table nethouse.table (
A ',',
B ',',
C ',',
D ',',
E ',',
F '\x0a'
)
From '/opt/export/home/netview/cells/table.csv'
ESCAPES OFF
QUOTES Off
SKIP 0
--ROW DELIMITED BY '\x0a'
format ASCII
WITH CHECKPOINT OFF;
#编辑修改load.sql文件
i
做如下修改(修改表名、字段名、需导入文件名)
Load Table nethouse.test (
TIMECOLUMN ',',
ID ',',
NAME ',',
CAUSE ',',
TIMES '\x0a'
)
From '/opt/export/home/netview/cells/test.csv'
ESCAPES OFF
QUOTES Off
SKIP 0
--ROW DELIMITED BY '\x0a'
format ASCII
WITH CHECKPOINT OFF;
#保存并退出
#输入shift+:出现如下内容
:
#然后在:后边输入wq!如下
:wq!
#查看load.sql文件,看是否为新修改的内容
cat load.sql
#调用load.sql导入数据
dbisql -c 'uid=登录名;pwd=登录密码' -nogui load.sql