1. shell和Linux命令

linux命令由一个命令(conmand)和零到多个参数构成,命令和参数之间,参数与参数之间空格隔开。linux命令区分大小写,且命令和参数之间必须隔开。Linux命令的基本格式如下:comand 参数1 参数2 ... 参数n。

  1. 注销(退出linux系统)

在linux提示符下,运行exit命令,退出本次登录,或者直接按组合键ctrl+d。

  1. 关机与重启

linux主机的关机方法为:用户登录后,输入命令poweroff表示立即关机。

linux主机的重启方法为:用户登录后,输入命令reboot表示立即重启电脑。

  1. 使用root用户登录

设置root用户的密码,并且切换到root账号,使用安装时创建的账号登录,执行命令:sudo passwd root,

系统提示:[sudo] password for byhy: , 是要你输入 byhy这个账号的密码, 输入后回车。

接着提示:New password: , 是要你输入root用户的密码,输入你要设置的密码后回车。

接着提示:Retype new password: , 是要你再次输入root用户密码确认,再次输入后回车。

如果出现passwd: password updated successfully 表示设置root密码成功, 后面就可以使用 root 账号登录了。

执行命令su - root,表示要从当前账号切换到root账号登录, 然后输入刚设置的root账号密码,即可登录。

  1. vi文本编辑

vi 有 3 种使用模式分别是命令模式,插入模式和底行模式。

命令模式:

h - 光标左移一个字符
j - 光标下移一个字符
k - 光标上移一个字符
l - 光标右移一个字符
方向键 - 移动光标位置

0或^ - 光标移到所在行的行首
$ - 光标移到所在行的行尾
gg - 光标移到文件爱你开始的位置
G - 光标移到文件末尾
Ctrl+f - 往下翻一页
Ctrl+b - 往上翻一页

x - 删除光标所在字符
dd - 删除光标所在行
dw - 删除光标所在处到词尾的内容
d$ - 删除光标所在处到行尾的内容

yy - 复制光标所在行
p - 黏贴
v - 移动光标,可以选择内容,再按y复制选中内容
u - 撤销刚才的操作
Ctrl+r - 重做被撤销当前所做的操作
. - 重复刚才所做的操作

从命令模式进入插入模式的方式有:
a - 将在光标所在位置之后插入文本(append)
i - 将在光标所在位置之前插入文本(insert)
o - 将在光标所在位置之后插入一新行

底行模式:

:wq 保存文件并退出
:q 不要保存文件,并退出,如果文件做了修改,但不想保存,需要用:q!
:q! 不要保存文件,强制退出
:w 只保存文件,但是不退出vi,可以切换到输入模式下面继续编辑文件
:set nu 显示行号
/abc 在文件中查找abc字符。按n不停的往下查找,按N往上查找
:1,$s/string/replace/g替换功能,将文件中的string,替换为replace,按Esc键,切换到命令模式
替换功能解析:
:进入vi命令模式
1,$指定替换的范围,1表示第一行,$表示文件的最后一行,所以这个范围表示整个文件
s表示替换(substitute)操作
string:要被替换的字符串
/replace/:表示要被替换成的新字符串
g表示全局替换的标志,表示对每一行中的所有匹配项进行替换
  1. 目录和文件操作
pwd 查看当前目录
cd 改变当前目录

ls 查看目录内容或文件的属性
ls -l或者ll  查看目录和文件的详细信息
例如:
[root@iztqz ~]$ ls -l
total 8
-rw-rw-r-- 1 root root   13 May 10 10:36 text.txt
drwxrwxr-x 2 root root 4096 Apr 17 11:55 frontend
各个字段的含义如下:
-rw-r--r-- 文件的访问权限。第一个字符指明文件类型。在不同类型之间, 
开头的“-”说明是一个普通文件,“d”表明是一个目录。其后三个字符是文件
所有者的访问权限,再其后的三个字符是文件所属组中成员的访问权限,最后
三个字符是其他人的访问权限。这个字段的含义在后面用户权限那一章会详细讲解。
1 文件的硬链接数目。
root 文件所有者的用户名。
root 文件所属用户组的名字。
13 以字节数表示的文件大小。
May 10 10:36 上次修改文件的时间和日期。
text.txt 文件名。

cat 查看文本文件的内容

mkdir 创建目录
mkdir -p 依次创建多层目录

rm 删除文件
rm -r 删除目录
rm -rf 删除目录,忽视不存在的文件,不显示提示信息

● 通配符
* 匹配任意多个字符(包括零个或一个)
? 匹配任意一个字符(不包括零个)
[abcd] 匹配abcd中任意一个字符
下面是一些示例的用法
* 表示所有文件(或目录)
te* 表示文件名以“te”开头的文件(或目录)
te*.py 表示以"te"开头,中间有任意多个字符,并以".py"结尾的文件(或目录)
test???? 表示以“test”开头,其后紧接着 4个字符 的文件(或目录)
[tes]* 表示文件名以"t","e",或"s"开头的文件(或目录)
test[0-9][0-9] 表示以"test"开头,并紧接着2个数字的文件(或目录)

cp 复制文件
cp -r 复制目录

mv 移动文件或者重命名文件
mv -r 移动目录或者重命名目录

touch 123.txt 创建123.txt文件

grep 在文件中查找字符串
grep -n 在文件中查找字符串,同时显示行号
grep "" -n 在文件中查找一段句子,使用"",同时显示行号
例:
grep mike file1 从file1中查找mike字符串
  1. 用户管理和文件权限
adduser 添加用户(需用root权限)
cat /etc/passwd 查看用户的ID与账号的信息
"""
例如:test:x:1001:1001:,,,:/home/test:/bin/bash
/etc/passwd文件每行对应一个用户的信息。 
一行中的字段用":"隔开。每个字段的含义分别是:
用户名
登录密码 
用户ID 
用户Group ID
描述信息
用户的home目录
该用户缺省shell
"""
adduser --ingroup root test 创建test用户时,指定加入root用户组
passwd 更改新密码(需root权限)
deluser 删除用户
su - test 切换test用户
"""
注意,其中有一个符号 - , 切换命令中使用这个符号,
表示要重新创建用户环境,就像使用test账号重新登陆一样。
也可以不用符号 - ,比如 su test ,这样就会使用当前的
用户的环境(保留现有的环境变量),切换到新用户test
如果现有用户不是root 用户,切换到其他用户账号,需要
输入密码, 如果是root用户则不需要输入密码。
"""
groups 查看用户组
addgroup 添加用户组
delgroup 删除用户组
usermod -g g1 test 将test的主用户组设置为g1(主用户组只有一个)
usermod -G g2,g3 test 将test的从用户组设置为g2,g3(从用户可以有多个)
usermod -a -G g1,g2 test 给test再添加两个从用户组g2,g3,原来所属的从
用户组仍然在(-a是添加从用户组,没有-a是设置从用户组)

Linux文件的访问有三种权限:读(用字母r表示)、写(用字母w表示)、
执行(用字母x表示)
某个用户对于一个文件:
有读权限,表示该用户可以读取文件的内容,
有写权限,表示该用户可以修改文件内容,
有执行权限, 表示该用户可以运行该文件(当然该文件应该是可执行文件)
而这三种权限对目录,含义又不一样。
某个用户对于一个目录:
有读权限,表示该用户可以查看该目录里面的内容,
有写权限,表示该用户可以在该目录里面创建和删除文件,
有执行权限, 表示该用户可以使用 cd命令,进入该目录
例:
$ ls -l mysql57-community.rpm
-rwxr-xr--. 1 root root 9224 Sep 12  2016 mysql57-community.rpm
其中:
第1个字符表示是一个普通文件,第2-4字符"rwx"表示此文件所有者root对此文
件的操作权限是为"可读、可写、可执行",第5-7字符"r-x" 表示此文件所
归属的root组内的用户对此文件的操作权限是"可读、不可写、可执行",
第8-10字符"r--"表示其他用户对此文件的操作权限是"可读、不可写、不可执行"
. 表示存在一个扩展的属性

● 修改文件访问权限
chmod [who][op][permission] file... 修改文件访问权限
who表示用户类型:
u 拥有者(user --- owner)
g 与拥有者同一组的用户(group)
o 其他人(other)
a 所有人(all)
op表示动作:
+ 表示要加上permission指定的权限
- 表示要加上permission指定的权限
permission表示存取权限:
r 可读
w 可写
x 可执行
比如:
chmod u+w file1 该命令添加了拥有者对file1文件的写权限
chmod u-x file1 该命令去掉了拥有者对file1文件的执行权限
chmod ug+rwx file1 该命令添加了拥有者和同组用户对file1文件的读、写、执行权限
chmod a+rwx file1 该命令添加了所有人对file1文件的读、写、执行权限
chmod o+rx /root 该命令添加了其他组对目录/root的可读可执行权限
chmod -R o+rx /root 参数-R表示递归,该命令表示:其他用
户可以对/root目录以及所有它的子目录、子文件都有可读可执行的权限

● 改变文件所有者及文件所在组
chown [选项]...[所有者][:[组]] 文件... 改变文件所有者
例如:
chown utest test1 将文件test1的所有者变更为用户utest
chown utest:gtest test1 将文件test1的所有者变更为用户utest,
所属组变更为gtest
chown -R utest dir1 将目录dir1以及下面所有的子目录和文件的所有
者变更为用户utest,参数-R表示递归

chgrp [选项][组][文件] 改变文件所有者的组(需root权限)
比如:
chgrp utest test1 将文件test1的用户组变更为组utest

sudo 以root权限运行程序
sudo adduser utest 将申请以root权限运行adduser utest命令
  1. 进程管理
● 进程的创建与查看
ps 显示和当前终端有关的进程信息
ps -u utest 显示utest用户所创建的进程信息
ps -f 详细显示每个进程的信息
ps -e 显示所有正在运行的进程信息
ps -ef 显示当前系统的所有进程
ps -ef | grep python 查找python进程(|为管道)

python3 t2.py & 用python3程序在后台执行t2.py文件,“&”后台运行进程

nohup /root/test.sh & 后台运行test.sh,即使关闭终端,也不退出进程

● 进程的终止
kill -9 PID 杀死进程

● 环境变量
printenv 查看当前shell的环境变量
echo $PATH 来查看环境变量PATH的值

● 环境变量PATH添加新路径
方法一:执行命令 exprot PATH
例如:
export PATH=/test:$PATH
[byhy@localhost ~]$ echo $PATH
/test:/usr/local/bin:/bin:/usr/bin:
/usr/local/sbin:/usr/sbin:/home/byhy/bin
这种方法是临时生效的,再次登录时,PATH又没有这个环境变量了,如需一直生效,
可以使用方法二。
方法二:写入到shell启动文件中
通常建议把某个用户 独有的 设置环境变量的 命令,放到用户家目录下面的 ~/.bashrc 文件中。
可以在文件的结尾加入一行export PATH=/test:$PATH
如果要对当前的shell就立即生效,可以执行命令 source ~/.bashrc
  1. 重定向和管道
● 标准输出文件(stdout)重定向
ps > out 使用>符号,将ps的输入信息重定向输出到out文件中

● 标准错误文件(stderr)重定向
ps hhhh 2> err 使用2>符号,将错误信息重定向输出到err文件中
(hhhh是不存在的文件)

● 标准输出文件(stdout)和标准错误文件(stderr)重定向
command &> both 同时重定向stdout和stderr到用一个文件both中
command > out 2> err 重定向stdout到out文件,并重定向stderr到err文件

● 标准输入文件(stdin)重定向
< stdin重定向符号

● 管道操作符 |
ps -ef | grep 6536 将 前面的 ps –ef 命令的stdout
(本来是输出到终端设备的)重定向到一个临时管道设备里面,
同时将后一个命令 grep 6536 的stdin重定向到这个临时的管道设备。
  1. 常用命令
apt安装软件包
apt命令用法
apt install package1 安装软件
apt list --installed 显示所有已经安装的程序包
apt list package1 显示指定程序包package1的安装情况
apt remove package1 删除程序包package1

● 启动、重启、关闭服务
systemctl status ssh 查看服务ssh的状态
systemctl start ssh 启动服务ssh
systemctl restart ssh 重启服务ssh
systemctl stop ssh 关闭服务ssh

● 打包
● tar命令打包
touch 1.txt 2.txt 3.txt 创建三个文件
tar cvf file.tar 1.txt 2.txt 3.txt 将这三个文件打包到file.tar中
tar cvf file.tar *.txt 使用通配符*,将.txt结尾的文件打包到file.tar中
tar cvf test.tar ./dirtest test.txt 将dirtest目录和test.txt文件都
打包到test.tar中
tar xvf files.tar 命令解tar包
tar tvf files.tar 查看tar包内容
tar rvf files.tar newfile 往tar包中添加文件

● 压缩
gzip压缩和解压
gzip abc.txt  压缩文件abc.txt
gzip -d abc.txt.gz 解压文件abc.txt.gz
● gzip和tar 的联合使用
tar zcvf test.tar.gz *.txt 将.txt结尾的所有文件打包并压缩
tar zxvf test.tar.gz 解压并解包test.tar.gz
● bzip2、zip压缩、解压
● .bz2
bzip2 -d FileName.bz2 解压1
bunzip2 FileName.bz2 解压2
压缩: bzip2 -z FileName
● .tar.bz2
tar jxvf FileName.tar.bz2 解压
tar jcvf FileName.tar.bz2 DirName 压缩
● .zip
unzip FileName.zip 解压
zip -r FileName.zip DirName 压缩
注意:如果你的Linux上没有安装 bzip2、zip、unzip,
可以执行命令 apt install bzip2 zip unzip 来安装

top 查看系统进程的动态运行情况
free -m 查看系统内存使用情况
● 查看设置系统时间
date 显示当前日期和时间
date -s 20161109 设定日期
date -s 21:05:50 设定时间
● 查看系统版本
uname -a 查看系统内核版本信息
lsb_release -a 查看Ubuntu系统版本信息
  1. 网络管理
● 查看网络接口ip地址
ip addr 查看所有网络接口的ip地址
● 启动、禁用网络接口(使用root用户执行)
Ubuntu现在缺省是没有这两个命令的,可以先运行apt install ifupdown

ping 192.168.100.1 检测192.168.100.1网络连通性 ctrl+c终止测试

● netstat 查看网络状态
netstat -a (all)显示所有选项,默认不显示LISTEN相关
netstat -t (tcp)仅显示tcp相关选项
netstat -u (udp)仅显示udp相关选项
netstat -n 不显示端口协议名,只显示端口数字
netstat -l 只显示Listen(监听)的状态端口
netstat -p 显示建立相关链接的进程PID
netstat -r 显示路由信息,路由表
Netstat 最常用的地方就是查看网络连接情况,比如查看22端口上的tcp网络连接情况
使用命令 netstat -anp|grep 22 |grep tcp
[root@localhost ~]# netstat -anp |grep 22 |grep tcp
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      977/sshd
tcp        0     52 192.168.10.199:22       192.168.10.92:63911     ESTABLISHED 2011/sshd: root@pts
tcp6       0      0 :::22                   :::*                    LISTEN      977/sshd

● ssh(secure shell)登录远程机器
ssh 用户名@IP地址或机器域名
比如,你要使用user1账号远程登录192.168.1.12这台Linux机器
[byhy@localhost ~]$ ssh user1@192.168.1.12

● scp(secure copy)拷贝文件
在Linux上,可以直接使用scp命令和远程Linux主机进行文件的拷贝。
scp是secure copy的缩写,意为文件安全拷贝,它可以将远程Linux
系统上的文件拷贝到本地计算机,也可以将本地计算机上的文件拷贝到
远程Linux系统上。
比如:
我们已经登录到主机A上面,要将/home/test1目录下面的文件abc.txt,
拷贝到主机B的/home/test2目录下面,主机B的IP地址为:192.168.1.12
我们要拷贝到B主机,必须要有B主机的用户账号,假如B主机的账号是utest2,
应该这样写
scp /home/test1/abc.txt utest2@192.168.1.12:/home/test2
接下来,会提示用户输入用户utest2的密码,输入正确密码后,进行拷贝操作。
如果,我们要在主机A上面,将主机B上面的文件/home/test2/123.txt
拷贝到主机A的/tmp/下面:
scp utest2@192.168.1.12:/home/byhy2/123.txt /tmp/

● wget下载
例:wget https://mirrors.aliyun.com/centos/timestamp.txt

● 防火墙
缺省ufw是未被激活的,执行如下命令激活
ufw enable
注意这个命令最好是在虚拟机终端执行。
如果是Putty远程登录,并且当前没有允许SSH访问的ufw规则,
执行这个命令可能就会断开连接。
ufw status 检查当前防火墙设置
ufw status verbose 查看更详细的信息
● 开放端口
ufw allow 22/tcp
允许外面从网络访问本机的ssh服务
sudo ufw allow ssh
允许外面从网络访问本机的HTTP服务端口80
ufw allow http
● 删除规则
要删除一个前面设定的规则,执行下面的命令
ufw delete allow http

文章参考byhy教程