环境搭建:
vmware虚拟机+XShell登录虚拟机
Linux快速整理:
[root@hadoop001 ~]
表示[登录的用户@机器名称],“”表示家目录pwd
查看当前所在目录路径地址有时候2个文件夹同名可能会搞错,需要要查看目录
切换目录
cd
root用户的家目录:/root
xxx用户的家目录:/home/xxx 默认
家目录的修改:vi /etc/passwd 默认不修改
什么情况会修改?部署mysql时,修改mysqladmin的家目录为/usr/local/mysql,方便操作与规范。行业里比较标准的事情
cd 回车
/cd ~
/cd /root
回到家目录cd -
回到上一次访问的目录cd ../
回退上一层目录cd ../../
回退上两层目录目录 文件夹
绝对路径:“/”代表根目录,以根目录开始表示
写shell脚本时,路径要用绝对路径。
相对路径:不以根目录为开始,以当前光标所在目录(pwd结果)为开始表示
查看当前文件夹下的内容
ls
清空屏幕
clear
ls查看当前光标所在的目录 文件有哪些
ls -l
等价于`ll````ls -l -a` 查看当前的文件文件夹+ 隐藏文件、文件夹(以.开头)
ll -h
显示文件的大小ll -rt
按时间排序查询命令帮助
--help
/man
创建文件夹
mkdir
1
mkdir [-mp] 目录名称
选项与参数:
- -m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
- -p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!
例如
mkdir -p a/b/c/d
递归创建多层目录mkdir a b c d
在当前文件夹下创建4个文件夹删除空的目录:
rmdir
选项与参数:
- -p :从该目录起,一次删除多级空目录
复制文件或目录:
cp [-adfilprsu] source destination
移动文件与目录,或修改名称:
mv [-fiu] source destination
移除文件或目录:
rm [-fir] 文件或目录
思考:mv和cp哪个执行快?
- 同一个文件系统(在同一个分区)内,mv的速度是瞬间的,因为它所有需要的是重命名的目录的文件路径。除了目录条目之外,没有必要更改任何数据。
- 在文件系统之间移动目录将涉及将数据复制到目标并将其从源中删除。这将与在单个文件系统中复制(复制)数据一样长的时间。
- 都可修改名称。
如何创建一个空文件 或者把一个文件设置为空
touch rz.log 如何创建一个空文件
touch
命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。echo “” > rz.log1 慎用(不是真正的空,会有1字节的大小)
cat /dev/null > ruoze.log20191113 把一个文件设置为空
查看文件内容
cat
命令用于连接文件并打印到标准输出设备上。-n 或 –number:由 1 开始对所有输出的行数编号。
more
命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读空白键(space)- 往下一页显示
b - 往回(back)一页显示
q - 退出more
less
与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页/字符串:向下搜索”字符串”的功能
?字符串:向上搜索”字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
G :移动到最后一行
g:移动到第一行
q / ZZ :-退出 less 命令
配置文件,内容较少,可用以上上个命令
log日志,内容较多,用tail命令
tail
可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。实时查看
tail -f filename
会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。tail -F filename
等于-f + retry,即使文件丢失后再创建也会更新补充:flume exec source 切记使用 -F
-n<行数> 显示文件的尾部 n 行内容
-c<数目> 显示的字节数
tail -n -5 /test001/text001
与tail -n 5 /test001/text001
显示的结果相同,均是文件末尾最后 5 行内容。tail -n +5 /test001/text001
显示的内容为从第 5 行开始,直到末尾的内容。tail -n 后面的数字有效输入只有单个数字(5)或者加号连接数字(+5)两种。tail -300f messages 实时查看倒数300行文件
tail -300F messages 不能这样写,即不能写成数字+F
tail: option used in invalid context – 3
文件上传下载工具
安装:
yum install -y lrzsz
文件下载到windows:
sz
windows上传到linux:
rz
如何定位ERROR
文件内容很小,几十兆
先下载到windows上,用编辑器打开搜索关键字定位ERROR
文件内容很大,几百兆 2G
cat xxx.log | grep ERROR
| 是管道符,管道符前面的命令结果作为管道符后面命令的输入,grep是过滤命令
grep命令
grep
指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 **-**,则 grep 指令会从标准输入设备读取数据。-A<显示行数> 或 –after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-B<显示行数> 或 –before-context=<显示行数>: 除了显示符合样式的那一行之外,并显示该行之前的内容。
-C<显示行数> 或 –context=<显示行数>或-<显示行数>: 除了显示符合样式的那一行之外,并显示该行之前后的内容。
cat xxx.log | grep -A 10 ERROR 后10行
cat xxx.log | grep -B 10 ERROR 前10行
cat xxx.log | grep -C 30 ERROR 前后各30行 经常用 迅速定位ERROR上下文cat xxx.log | grep -C 30 ERROR > error.log 新建/覆盖
cat xxx.log | grep -C 30 ERROR >> error.log 追加环境变量$PATH
打印环境变量:
echo $PATH
1
2[root@hadoop001 ~]# echo $PATH
/usr/local/mysql/bin:/usr/java/jdk1.7.0_80/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/binwhich
命令:依次在环境变量$PATH中以冒号分割,查找目录下是否有要查找的命令目录,返回第一个查找到的目录地址1
2
3[root@hadoop001 ~]# which ls
alias ls='ls --color=auto'
/bin/ls全局环境变量: /etc/profile 所有人都使用
个人环境变量: ~/.bash_profile~/.bashrc 个人 不给其他人
注意:配置个人环境变量文件**.bashrc** 优先。当用ssh远程登录时,**.bashrc** 会自动生效, .bash_profile则不会,bug。
生效文件:
source xxxx
`. ~/.bashrc`
(补充:安装unzip命令 :
yum install -y unzip
解压:tar -xzvf xxxx.tar.gz
)配置环境变量:
vi /etc/profile
环境变量是指的什么
K=V 等号前后不能有空格
使用环境变量K时用$符号,如: $Kexport JAVA_HOME=usr/java/jdk1.8.0_121
export PATH=$JAVA_HOME/bin:$PATH
新配置的变量在前面追加
a. 上下键 移动光标
b. 按 i键insert 进入 编辑模式
c. 开始编辑
d. 按 esc键退出 编辑模式,进入命令行模式
e. 按 :(shift+;)键,进入尾行模式
f. 输入 wq 保存退出1
2
3
4
5
6[root@ruozedata001 java]# source /etc/profile
[root@ruozedata001 java]# echo $PATH
/usr/java/jdk1.8.0_121/bin:/usr/java/jdk1.8.0_12/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@ruozedata001 java]# which java
/usr/java/jdk1.8.0_121/bin/java
[root@ruozedata001 java]#小结:
1.command not found
没有部署安装包,部署了没有配置环境变量
2.习惯
当我们以后部署一个软件,bin目录的可执行文件 比如java
习惯 当生效环境变量文件,习惯做 which java别名alias
alias
命令用于设置指令的别名。用户可利用alias,自定指令的别名。若仅输入alias,则可列出目前所有的别名设置。alias的效力仅及于该次登入的操作。若要每次登入是即自动设好别名,可在.profile或.bashrc中设定指令的别名。
1
alias[别名]=[指令名称]
1
2
3
4
5
6
7
8[root@hadoop001 ~]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'配置个人环境变量文件**.bashrc** 优先。当用ssh远程登录时,**.bashrc** 会自动生效, .bash_profile则不会,bug。
查看历史命令history
当前命令输入状态下:
* 可以按一下**上\下方向键**,命令行就会显示相对于当前命令的上一条或下一条历史记录. * 和方向键相同功能的就是组合键**Ctrl+ p** (前面执行过的命令),**Ctrl +n**(后面执行过的命令)
上面两个都是相对于当前命令查询上一条或者下一条命令的历史记录.如果搜索命令历史记录,就用Ctrl+ r 组合键进入历史记录搜寻状态,然后,键盘每按一个字母,当前命令行就会搜索出命令历史记录.使用Ctrl+r反向查询历史命令,将匹配的最新一条显示出来
如果还想继续向上查询,继续按Ctrl+r。
history [n]
n为数字,列出最近的n条命令history -c
将目前shell中的所有history命令消除使用! 执行历史命令。
* `! [n]` n为数字 执行第n条命令
! command
从最近的命令查到以command开头的命令执行!!
执行上一条
当同一账号,同时登录多个bash时,只有最后一个退出的会写入bash_history,其他的都被覆盖了。
历史命令文件记录在 ~/.bash_history中,要清空历史记录:
1
2cat /dev/null > ~/.bash_history
history -c拓展:
当刚进公司进入服务器,第一步应该用history 看看这个账号之前做过哪些操作,有可能发现password
删除
生成新文件:1
2
3touch xxx.log
cat /dev/null > xxx.log //把文件置空
vi xxx.log创建文件夹:
mkdir
rm
(英文全拼:remove)命令用于删除一个文件或者目录。-i 删除前逐一询问确认。
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
-r 将目录及以下之档案亦逐一删除。
删除文件可以直接使用rm命令,若删除目录则必须配合选项”-r”,例如:
1
2
3
4
5
6# rm test.txt
rm:是否删除 一般文件 "test.txt"? y
# rm homework
rm: 无法删除目录"homework": 是一个目录
# rm -r homework
rm:是否删除 目录 "homework"? y
文件一旦通过rm命令删除,则无法恢复,所以必须格外小心地使用该命令。
风险:
rm -rf / 高危命令
什么场景会发生? shell脚本:K=’/home/jepson’
K=’’
shell脚本中必须判断 $K命令是否存在
rm -rf $K/*1
2
3
4
5
6
7[root@hadoop001 6]# K='' //本应该设置K='/home/jepson'
[root@hadoop001 6]# echo $K/
/
[root@hadoop001 6]# ls $K/
6 data home lost+found mnt proc selinux tmp
bin dev lib media net root srv usr
boot etc lib64 misc opt sbin sys var用户 用户组
创建用户:
useradd username
查看用户信息:
id username
1
2
3[root@hadoop001 ~]# id ruoze
//uid=501(ruoze) gid=501(ruoze) groups=501(ruoze) 默认值
uid=501(ruoze) gid=502(bigdata) groups=502(bigdata),501(ruoze)创建一个普通用户,默认创建这个名称的用户组ruoze,
且设置这个用户 主组为ruoze,且创建/home/ruoze查看机器上的用户:
cat /etc/passwd
查看机器上的用户组:cat /etc/group
删除用户:
userdel username
删除用户后,/etc/passwd内会删除用户信息,但是用户home文件夹依然存在。如果组内只有一个成员,成员被删除后,组会自动删除。
模拟切换用户丢失样式
1
2
3
4
5
6
7
8
9
10
11
12
13[root@ruozedata001 ruoze]# ll -a
total 12
drwx------ 2 ruoze ruoze 59 Nov 16 21:16 .
drwxr-xr-x. 5 root root 44 Nov 16 21:16 ..
-rw-r--r-- 1 ruoze ruoze 18 Apr 11 2018 .bash_logout
-rw-r--r-- 1 ruoze ruoze 193 Apr 11 2018 .bash_profile
-rw-r--r-- 1 ruoze ruoze 231 Apr 11 2018 .bashrc
[root@ruozedata001 ruoze]# rm -rf .bash*
[root@ruozedata001 ~]# su - ruoze
Last login: Sat Nov 16 21:29:09 CST 2019 on pts/1
-bash-4.2$
-bash-4.2$修正样式(从/etc/skel上把隐藏文件复制到用户home目录下即可)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23[root@ruozedata001 ruoze]# cp /etc/skel/.* /home/ruoze/
cp: omitting directory ‘/etc/skel/.’
cp: omitting directory ‘/etc/skel/..’
[root@ruozedata001 ruoze]# ll -a
total 12
drwx------ 2 ruoze ruoze 59 Nov 16 21:32 .
drwxr-xr-x. 5 root root 44 Nov 16 21:16 ..
-rw-r--r-- 1 root root 18 Nov 16 21:32 .bash_logout
-rw-r--r-- 1 root root 193 Nov 16 21:32 .bash_profile
-rw-r--r-- 1 root root 231 Nov 16 21:32 .bashrc
[root@ruozedata001 ruoze]# chown ruoze:ruoze .bash*
[root@ruozedata001 ruoze]# ll -a
total 12
drwx------ 2 ruoze ruoze 59 Nov 16 21:32 .
drwxr-xr-x. 5 root root 44 Nov 16 21:16 ..
-rw-r--r-- 1 ruoze ruoze 18 Nov 16 21:32 .bash_logout
-rw-r--r-- 1 ruoze ruoze 193 Nov 16 21:32 .bash_profile
-rw-r--r-- 1 ruoze ruoze 231 Nov 16 21:32 .bashrc
[root@ruozedata001 ruoze]#
[root@ruozedata001 ~]# su - ruoze
Last login: Sat Nov 16 21:30:23 CST 2019 on pts/2
[ruoze@ruozedata001 ~]$创建用户组:
groupadd groupname
把用户添加到用户组:
usermod -a -G bigdata ruoze
1
2
3usermod -g, --gid GROUP force use GROUP as new primary group
-G, --groups GROUPS new list of supplementary GROUPS
-a, --append append the user to the supplemental GROUPS给用户设置密码:
passwd username
,passwd后不加参数,就是设置当前用户的密码切换用户:
su
1
2su username
su - username加”-“会把当前目录切换到用户的家目录,且执行环境变量文件(.bash_profile和.bashrc都执行)
不加“-”,目录不切换,.bashrc中的配置执行,.bash_profile中的配置不执行。所以配置最好写在.bashrc上。
用户权限问题:connection连接拒绝、Permission denied
普通用户获取root的最大权限
vi /etc/sudoers
1
2Allow root to run any commands anywhere
username ALL=(root) NOPASSWD:ALL1
2
3
4
5
6[ruoze@ruozedata001 root]$ ls -l
ls: cannot open directory .: Permission denied
[ruoze@ruozedata001 root]$ cat rz.log
cat: rz.log: Permission denied
[ruoze@ruozedata001 root]$ sudo cat rz.log
www.ruozedata.com/etc/passwd:
设置为:ruoze:\x:1002:1003::/home/ruoze:/bin/false,然后su切换失败
1
2
3[root@ruozedata001 ~]# su - ruoze
Last login: Sat Nov 16 21:57:32 CST 2019 on pts/0
[root@ruozedata001 ~]#设置为:ruoze:\x:1002:1003::/home/ruoze:/sbin/nologin,然后不允许登录
1
2
3
4[root@ruozedata001 ~]# su - ruoze
Last login: Sat Nov 16 22:08:52 CST 2019 on pts/0
This account is currently not available.
[root@ruozedata001 ~]#所以以后在CDH中遇到切换用户失败,到/etc/passwd中对应修改为 /bin/bash
权限:chown chmod
错误: Permission denied(permission denied一般用chmod修改文件权限就可,chown不必要)
1
2
3chmod -R 777 文件夹/文件路径
chown -R 用户:用户组 文件夹/文件路径
-R, --recursive operate on files and directories recursively1
2
3
4[root@ruozedata001 ~]# ll
total 4
drwxr-xr-x 2 root root 6 Nov 16 22:15 ruozedata
-rw-r--r-- 1 root root 18 Nov 16 21:58 rz.log第一个字符:d:文件夹;-:文件;l:连接;
r: read 4
w: write 2
x: 执行 1
-: 没权限 0rwx 第一组 7 代表文件或文件夹的用户root,读写执行
r-x 第二组 5 代表文件或文件夹的用户组root,读执行
r-x 第三组 5 代表其他组的所属用户对这个文件或文件夹的权限: 读执行查看大小
文件:
- ll
- du -sh
文件夹:
- du -sh
- 用ll看到的并不是文件夹大小
删除执行中的程序或工作:
kill
kill
可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号(pid)可利用 ps 指令或 jobs 指令查看。
root用户将影响用户的进程,非root用户只能影响自己的进程。
使用
kill -l
命令列出所有可用信号。最常用的信号是:- 1 (HUP):重新加载进程。
- 2(INT):中断(同 Ctrl + C)
- 3(QUIT):退出(同 Ctrl + \)
- 9 (KILL):强制杀死一个进程。
- 15 (TERM):正常停止一个进程。
杀死进程
1
# kill pid
强制杀死进程
1
2# kill -KILL pid
# kill -9 pid发送SIGHUP信号,可以使用一下信号
1
# kill -HUP pid
杀死指定用户所有进程
1
2#kill -9 $(ps -ef | grep hnlinux) //方法一 过滤出hnlinux用户进程
#kill -u hnlinux //方法二扩展:kill pid与kill -9 pid的区别
kill pid
的作用是向进程号为pid的进程发送SIGTERM(这是kill默认发送的信号),该信号是一个结束进程的信号且可以被应用程序捕获。若应用程序没有捕获并响应该信号的逻辑代码,则该信号的默认动作是kill掉进程。这是终止指定进程的推荐做法。kill -9 pid
则是向进程号为pid的进程发送SIGKILL(该信号的编号为9),SIGKILL既不能被应用程序捕获,也不能被阻塞或忽略,其动作是立即结束指定进程。通俗地说,应用程序根本无法“感知”SIGKILL信号,它在完全无准备的情况下,就被收到SIGKILL信号的操作系统给干掉了,显然,在这种“暴力”情况下,应用程序完全没有释放当前占用资源(善后:关闭socket链接、清理临时文件、将自己将要被销毁的消息通知给子进程、重置自己的终止状态)的机会。事实上,SIGKILL信号是直接发给init进程的,它收到该信号后,负责终止pid指定的进程。在某些情况下(如进程已经hang死,无法响应正常信号),就可以使用kill -9来结束进程。注意:kill生产上不能随意杀进程,确认是自己服务不影响其他不丢数据,在杀死前周知运维、部门。发送信号时必须小心,只有在万不得已时,才用kill信号(9),因为进程不能首先捕获它。
其他命令
搜索
find
1
#find path -option [ -print ] [ -exec -ok command ] {} \;
将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
1
#find . -name "*.c"
将当前目录及其子目录中的所有文件列出:
1
#find . -type f
将当前目录及其子目录下所有最近 20 天内更新过的文件列出:
1
#find . -ctime -20
查看进程:
ps -ef
系统情况:
top
(load average: 0,0,0反映繁忙不繁忙。超过十就很高。)查看ip通不通:ping ip地址
测试端口号连通性:telnet ip地址 端口号