Linux
查看当前用户:whoami
查看所有用户:cat /etc/passwd
查看用户所属组:id
查看当前系统是否为虚拟机:systemd-detect-virt
查看linux发行版本:cat /etc/redhat-release
查看系统内核版本:cat /proc/version
查看系统详细信息:uname -a
本机进程列表:ps -ef
对外已开启端口服务:netstat -anp
查看iptables规则:iptables -nvL
查看selinux开启状态:getenforce
查看用户历史命令:
cat ~/.bash_history
cat ~/.nano_history
cat ~/.atftp_history
cat ~/.mysql_history
cat ~/.php_history
查询已安装软件:rpm -qa
查看所有用户计划任务:ls /var/spool/cron/
1、开启防火墙systemctl start firewalld
2、开放指定端口firewall-cmd --zone=public --add-port=1935/tcp --permanent
命令含义:
--zone #作用域
--add-port=1935/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
3、重启防火墙firewall-cmd --reload
4、查看端口号netstat -ntlp //查看当前所有tcp端口·
netstat -ntulp |grep 1935 //查看所有1935端口使用情况
cat /etc/centos-release
firewall-cmd --state
systemctl status firewalld.service
先掌握下systemctl+firewall命令
描述 命令
查看firewall状态 systemctl status firewalld.service
启动firewall systemctl start firewalld
停止firewall systemctl stop firewalld
开机启动firewall systemctl enable firewalld
开机禁止firewall systemctl disable firewalld
额外学习下systemctl命令^_^
查看服务是否开机启动 systemctl is-enabled firewalld.service
查看已启动的服务列表 systemctl list-unit-files|grep enabled
查看启动失败的服务列表 systemctl --failed
其次掌握firewall-cmd命令
描述 命令
查看firewall全部信息 firewall-cmd --list-all
查看已开放的端口 firewall-cmd --list-ports
更新防火墙规则 firewall-cmd --reload
开放端口 firewall-cmd --zone=public --add-port=3000/tcp --permanent
关闭端口 firewall-cmd --zone=public --remove-port=3000/tcp --permanent
最终执行步骤:
首先查看firewall是否已开启: systemctl status firewalld.service
开放端口(开放后需要更新规则才能生效): firewall-cmd --zone=public --add-port=3000/tcp --permanent
更新防火墙规则: firewall-cmd --reload
开启 防火墙
systemctl start firewalld.service
4、开启8080端口,输入命令:
firewall-cmd --zone=public --add-port=1/tcp --permanent
让我们来解释一下上一个命令:
–zone=public:表示作用域为公共的;
–add-port=8080/tcp:添加tcp协议的端口8080;
–permanent:永久生效,如果没有此参数,则只能维持当前服务生命周期内,重新启动后失效;
5、输入命令重启防火墙;
systemctl restart firewalld.service
6、输入命令重新载入配置;
firewall-cmd --reload
用root用户登录
增加用户
[root@localhost ~]# adduser root220
为新用户设置密码
[root@localhost~]# passwd root220
Changing password for user prefma.
New password: # 输入密码
Retype new password: # 再次输入密码
passwd: all authentication tokens updated successfully.
二. 为新用户授权
个人用户的权限只可以在本home下有完整权限,其他目录需要别人授权。经常需要root用户的权限,可以通过修改sudoers文件来赋予权限。
新创建的用户并不能使用sudo命令,需要给他添加授权。
查找sudoers文件路径并赋予权限
[root@localhost~]# whereis sudoers # 查找sudoers文件路径
sudoers: /etc/sudoers /etc/sudoers.d /usr/share/man/man5/sudoers.5.gz
[root@localhost~]# ls -l /etc/sudoers # 查看权限
-r--r----- 1 root root 3938 Sep 6 2017 /etc/sudoers # 只有读权限
[root@localhost~]# chmod -v u+w /etc/sudoers # 赋予读写权限
mode of ‘/etc/sudoers’ changed from 0440 (r--r-----) to 0640 (rw-r-----)
修改sudoers文件
[root@localhost~]# vim /etc/sudoers
找到root ALL=(ALL) ALL的位置,在其下方添加新用户信息
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
root220 ALL=(ALL) ALL #这个是新用户
收回权限
[root@localhost~]# chmod -v u-w /etc/sudoers
mode of ‘/etc/sudoers’ changed from 0640 (rw-r-----) to 0440 (r--r-----)
三. 增加ssh端口
修改配置文件/etc/ssh/sshd_config
[root@localhost ~]# vim /etc/ssh/sshd_config
修改如下配置,增加220端口
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
ListenAddress 0.0.0.0:220
ListenAddress 0.0.0.0:22
#ListenAddress ::
关闭SELinux,切记!关闭后不要让服务器暴露在外网中,可以搜索SELinux的作用
# 临时关闭
[root@localhost ~]# setenforce 0
# 永久关闭
[root@localhost ~]# vim /etc/selinux/config
# 修改配置
SELINUX=disabled
然后重启sshd
[root@localhost ~]# systemctl restart sshd
检查是否成功
[root@BIGDATAFS03 ~]# netstat -ntlp | grep sshd
tcp 0 0 0.0.0.0:220 0.0.0.0:* LISTEN 232428/sshd
可以用shell工具连了
echo -e "\e[1;42m aming \e[0m"
cd
cd 目录
cd 目录/目录
cd .. :上一级目录
cd / :根目录
cd ~ :回家
mkdir 创建
mkdir 目录名
mkdir -p a/b/c
rmdir 删除
rmdir 目录名:只能删除一个空目录
mkdir -m 1777 : 在创建目录的同时设定权限
ls
ls:展示的能看见的文件(和目录)的名称
ls -a:展示所有的文件的名称
文件前面有"."代表的是隐藏文件
ls -l:显示文件的详细信息
简写的方式: ll(★)
ll -h:友好的显示
cat:显示文件的所有内容
cat 文件名
more:分页显示
空格:下一页
回车:下一行
less:分页显示
可以通过PgUp PgDn 翻页查看
tail(★★)
查看一个文件的后面的内容
tail -显示后几行 文件名
tail -f 文件名
动态的查看
例如:
tail -f catalina.xxx.log
通过 ctrl+c 结束滚动查看
touch 文件名 创建一个空白的文件
cp 文件 目录/文件名
例如:
cp 1.txt 2.txt
cp 1.txt 1/1.txt
mv 文件 目录/文件名
mv 文件名 新文件名
rm 文件名:带询问删除
rm -f 文件名:不带询问删除
rm -r 目录:带询问的递归删除
rm -rf 目录:不带询问的递归删除(谨慎使用)
-r 就是向下递归,不管有多少级目录,一并删除
-f 就是直接强行删除,不作任何提示的意思
删除文件夹实例:
rm -rf /var/log/httpd/access
将会删除/var/log/httpd/access目录以及其下所有文件、文件夹
删除文件使用实例:
rm -f /var/log/httpd/access.log
将会强制删除/var/log/httpd/access.log这个文件
tar:打包或解压 一个文件或者目录(★★)
常用的组合
-cvf :打包一个文件或者目录
-zcvf:打包并压缩一个文件或者目录 压缩的格式:gzip
-xvf:解压或者打开一个tar文件
格式:
tar 参数 文件名 要打包|解压的文件目录
例如:
将当前目录下的所有文件打包成test1.tar
tar -cvf test1.tar ./*
将当前目录下的所有文件打包并压缩成test2.tar.gz
tar -zcvf test2.tar.gz ./*
将test1.tar解压到当前目录
tar -xvf test1.tar
将test1.tar解压到b目录
tar -xvf test1.tar -C b
grep 字符串
pwd:显示当前的工作目录
wget:下载资料
wget 资源路径
编辑普通文件
三种模式:命令行、插入、底行模式。
切换到命令行模式:按Esc键;
切换到插入模式:按 i 、o、a键;
i 在当前位置生前插入
I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行之后插入一行
O 在当前行之前插入一行
退出编辑Esc :q!
保存Esc :wq
切换到底行模式:按 :(冒号);
管道 | ★
重要的一个概念,其作用是将一个命令的输出用作另一个命令的输入
例如:
在ifconfig的结果里查找 192.168字符串
ifconfig | grep 192.168
以后常用
查找和java相关的进程
ps -ef | grep java
查找和3306相关的信息
ps -ef | grep 3306
系统管理命令
date 显示或设置系统时间
date 显示当前系统时间
date -s “2014-01-01 10:10:10“ 设置系统时间
clear 清屏
ctrl+l
ps 正在运行的某个进程的状态
ps –ef 查看所有进程
★ps –ef | grep ssh 查找某一进程
ps aux|grep WorkerMan
1. 运行(正在运行或在运行队列中等待)
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。
2)ps -A 显示所有程序。
3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
4)ps -e 此参数的效果和指定"A"参数相同。
5)ps e 列出程序时,显示每个程序所使用的环境变量。
6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
7)ps -H 显示树状结构,表示程序间的相互关系。
8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
9)ps s 采用程序信号的格式显示程序状况。
10)ps S 列出程序时,包括已中断的子程序资料。
11)ps -t <终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
12)ps u 以用户为主的格式来显示程序状况。 用户以及其他详细信息
13)ps x 显示所有程序,不以终端机来区分。 显示没有控制终端的进程
14)ps -l 較長,較詳細的顯示該PID的信息
# ps -lA |more
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 76 0 - 1193 109952 ? 00:00:03 init
1 S 0 2 1 0 -40 - - 0 migrat ? 00:00:03 migration/0
1 S 0 3 1 0 94 19 - 0 ksofti ? 00:00:00 ksoftirqd/0
1 S 0 4 1 0 -40 - - 0 migrat ? 00:00:02 migration/1
1 S 0 5 1 0 94 19 - 0 ksofti ? 00:00:00 ksoftirqd/1
1 S 0 6 1 0 -40 - - 0 migrat ? 00:00:02 migration/2
1 S 0 7 1 0 94 19 - 0 ksofti ? 00:00:00 ksoftirqd/2
相關信息的意義:
F 進程的標誌(flag),4表示用戶為超級用戶
S 進程的狀態(stat),各STAT的意義見下文
PID 進程的ID
C CPU使用資源的百分比
PRI priority(優先級)的縮寫,
NI Nice值,
ADDR 核心功能,指出該進程在內存的那一部分,如果是運行的進程,一般都是“-”
SZ 用掉的內存的大小
WCHAN 當前進程是否正在運行,若為“-”表示正在運行
TTY 登陸者的終端位置
TIME 用掉的CPU的時間
CMD 所執行的指令
# ps aux |more
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 4772 564 ? S Sep22 0:03 init [3]
root 2 0.0 0.0 0 0 ? S Sep22 0:03 [migration/0]
root 3 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S Sep22 0:02 [migration/1]
root 5 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/1]
root 6 0.0 0.0 0 0 ? Ss+ Sep22 0:02 [migration/2]
root 7 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/2]
root 8 0.0 0.0 0 0 ? S Sep22 0:00 [migration/3]
root 9 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/3]
root 10 0.0 0.0 0 0 ? S< Sep22 0:00 [migration/4]
上述各位解释:
USER 进程的属主;
PID 进程的ID;
PPID 父进程;
%CPU 进程占用的CPU百分比;
%MEM 占用内存的百分比;
NI 进程的NICE值,数值大,表示较少占用CPU时间;
VSZ 进程使用的虚拟內存量(KB);
RSS 该进程占用的固定內存量(KB)(驻留中页的数量);
TTY 该进程在那個終端上運行(登陸者的終端位置),若與終端無關,則顯示(?)。
若为pts/0等,则表示由网络连接主机进程
WCHAN 当前进程是否正在進行,若为-表示正在進行;
START 該進程被觸發启动时间;
TIME 該进程實際使用CPU運行的时间;
COMMAND 命令的名称和参数;
STAT狀態位常見的狀態字符
D 无法中断的休眠状态(通常 IO 的进程);
R 正在运行可中在队列中可过行的;
S 处于休眠状态;
T 停止或被追踪;
W 进入内存交换 (从内核2.6开始无效);
X 死掉的进程 (基本很少見);
Z 僵尸进程;
< 优先级高的进程
N 优先级较低的进程
L 有些页被锁进内存;
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
+ 位于后台的进程组
kill 2868 杀掉2868编号的进程
★kill -9 2868 强制杀死进程
-ps、grep和kill联合使用杀掉进程
例如要杀掉hello这个进程,使用下面这个命令就能直接实现
ps -ef |grep hello |awk ‘{print $2}’|xargs kill -9
这里是输出ps -ef |grep hello 结果的第二列的内容
然后通过xargs传递给kill -9,其实第二列内容就是hello的进程号!
附录:
1,awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。
数据可以来自标准输入、一个或多个文件,或其它命令的输出。
它支持用户自定义函数和动态正则表达式等先进功能,
是linux/unix下的一个强大编程工具。
它在命令行中使用,但更多是作为脚本来使用。
awk的处理文本和数据的方式是这样的,
它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。
如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。
awk分别代表其作者姓氏的第一个字母。
因为它的作者是三个人,
分别是Alfred Aho、Brian Kernighan、Peter Weinberger。
gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。
2. xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。
通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据。
xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令.
ifconfig:查看所有的网络设置
ifconfig 网卡名称 down :禁用网卡
ifconfig 网卡名称 up :启用网卡
ping:和window中一样
通过ctrl+c取消
netstat 查看网络端口。
netstat -an | grep 3306 查询3306端口占用情况
1、reboot
2、shutdown -r now 立刻重启(root用户使用)
3、shutdown -r 10 过10分钟自动重启(root用户使用)
4、shutdown -r 20:35 在时间为20:35时候重启(root用户使用)
如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启
1、halt 立刻关机
2、poweroff 立刻关机
3、shutdown -h now 立刻关机(root用户使用)
4、shutdown -h 10 10分钟后自动关机
1、vi ifcfg-eth0
2、DEVICE = eth0
ONBOOT = yes
NM_CONTROLLED = yes
BOOTPROTO = static
IPADDR = 192.168.153.124
NETMASK = 255.255.255.128
GATRWAY = 192.168.153.126
DNS1 = 114.114.114.114
3、service network restart
systemctl restart network.service
启动并加入开机启动
$ sudo systemctl start docker
$ sudo systemctl enable docker
$0 取得脚本名称(包含路径)
$n
传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$#
传递给脚本或函数的参数个数。
$*
传递给脚本或函数的所有参数。
$@
传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$?
上个命令的退出状态,或函数的返回值。
$$
当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID 即pid
-lt 即 less than,小于,
shell脚本执行过程中 把第一个字符串作为脚本名称(或程序名称)处理,
第二、第三.都作为参数处理.
shell会将这些参数默认的赋给变量 1 2 3 .
所以当你echo $1 $2的时候看到的就是参数变量的值.
解答一下KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲的问题:这里#是计算输入参数的个数
@ 代 表 所 有 输 入 的 参 数 ; @ 代表所有输入的参数; @代表所有输入的参数;* 同上
if command
then
command
fi
bash shell的if语句会运行if后面的那个命令。
如果该命令的退出状态码是0(该命令成功运行),位于then部分的命令就会被执行。
如果该命令的退出状态码是其他值,then部分的命令就不会被执行。
fi语句用来表示if-then语句到此结束。
#! /bin/bash
if pwd
then
echo "it worked one"
echo "可以执行多条命令"
fi
while [ -n “$1” ]
-n str, 字符串不为null,长度大于零
(
)
中
放
的
是
命
令
,
相
当
于
‘
‘
,
例
如
t
o
d
a
y
d
a
t
e
=
( )中放的是命令,相当于` `, 例如todaydate=
()中放的是命令,相当于‘‘,例如todaydate=(date +%Y%m%d)意思是执行date命令,返回执行结果给变量todaydate,
也可以写为todaydate=date +%Y%m%d
;
${ }中放的是变量,例如echo $ { PATH}取PATH变量的值并打印,也可以不加括号比如$PATH。
在shell脚本中,exit -1 相当于jiava中的return 命令。会直接退出shell脚本,而不只是退出if判断和循环而已
case分支语句的格式如下:
case $变量名 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默认执行的命令序列 ;;
esac
case语句结构特点如下:
case行尾必须为单词“in”,每一个模式必须以右括号“)”结束。
双分号“;;”表示命令序列结束。
匹配模式中可是使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或。
最后的“*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后的命令序列。
循环中的重定向
或许你应该在其他脚本中见过下面的这种写法:
while read line
do
…
done < file
刚开始看到这种结构时,
很难理解< file是如何与循环配合在一起工作的。
因为循环内有很多条命令,而我们之前接触的重定向都是为一条命令工作的。
这里有一个原则,这个原则掌握好了,这个问题就很简单了:
对循环重定向的输入可适用于循环中的所有需要从标准输入读取数据的命令;
对循环重定向的输出可适用于循环中的所有需要向标准输出写入数据的命令;
当在循环内部显式地使用输入或输出重定向,内部重定向覆盖外部重定向。
上面的while结构中,read命令是需要从标准输入中读取数据的。
我们来详细了解一下read命令的用法吧,这个命令是shell脚本中使用频率最高的命令之一。
read
先来看一下read的命令语法:
read arg1 arg2 arg3 arg4 …
read是一个用来赋值的命令,它需要从标准输入获得值,
然后把这些值按位置依次赋值给变量arg1、arg2、arg3、arg4…,输入的时候以空格作为字段分隔符。
read的一个最大特性是可以在脚本中产生交互,因为它从标准输入读取数据。
read之所以很常用,
一是因为我们经常需要赋值,二是因为它可以交互,三是read能够一次给多个变量赋值。
$ read host ip name
linux 10.0.0.1 licong
$ echo $host $ip $name
linux 10.0.0.1 licong
$
可以看到,linux、10.0.0.1、licong分别被赋值给了变量host、ip和name。再看:
$ read host ip
linux 10.0.0.1 licong
$ echo $host
linux
$ echo $ip
10.0.0.1 licong
$
当我们输入的字段比变量数目多时,最后一个变量的值将不只一个字段,而是所有剩余的内容;
当输入字段比变量数少时,多余的变量将是空值,你可以自己试试。
现在我们再来看
while read line
do
…
done < file
read通过输入重定向,把file的第一行所有的内容赋值给变量line,循环体内的命令一般包含对变量line的处理;
然后循环处理file的第二行、第三行。。。一直到file的最后一行。
还记得while根据其后的命令退出状态来判断是否执行循环体吗?是的,read命令也有退出状态,当它从文件file中读到内容时,退出状态为0,循环继续惊醒;
当read从文件中读完最后一行后,下次便没有内容可读了,此时read的退出状态为非0,所以循环才会退出。
另一种也很常见的用法:
command | while read line
do
…
done
如果你还记得管道的用法,这个结构应该不难理解吧。
command命令的输出作为read循环的输入,这种结构长用于处理超过一行的输出,当然awk也很擅长做这种事。
netstat -ntlp
lsof -i tcp:80
lsof -i:端口号
passwd
uname -r 命令查看你当前的内核版本
1.uname -a
2.cat /proc/version
3.cat /etc/redhat-release
Yum(全称为 Yellow dog Updater, Modified)
在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。
基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,
并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
yum list installed
rpm -qa | grep docker
yum list tomcat
yum install tomcat
yum remove tomcat
yum deplist tomcat
在安装软件的时候,会有中断,让用户选择是否要继续
以 tomcat 为例
yum info tomcat
yum update
yum update tomcat
yum check-update