什么是 Ubuntu?
Ubuntu(乌帮图)是一个非洲词汇,它的意思是"人性对待他人"或"群在故我在"。Ubuntu发行版将Ubuntu精神带到软件世界之中。
目前已有大量各种各样基于GNU/Linux的操作系统,例如:Debian,SuSE,Gentoo,RedHat和Mandriva,当然还有Ubuntu。Debian是一个广受称道、技术先进且有着良好支持的发行版,Ubuntu正是基于Debian之上,旨在创建一个可以为桌面和服务器提供一个最新且一贯的Linux系统。
Ubuntu项目完全遵从开源软件开发原则,并鼓励人们使用、完善和传播开源软件。也就是说Ubuntu目前是并将永远是免费的。
GNU/Linux系统简介
-
桌面系统Gnome
- 成熟的linux桌面系统有Gnome和KDE,其中Gnome用C编写,而KDE则是用C++编写的。
-
终端与shell
- 打开一个终端,即运行一个shell程序。shell是一个命令行解释器,它使得用户能够与操作系统进行交互。
-
APT软件包管理
- 常用命令集有: apt-get ,apt-cache等。
-
Linux分区与目录结构
- Linux中分区从属于目录,Windows中目录从属于分区。
常用目录
/ 根目录 /root root 用户目录 /home/username 普通用户目录 /etc 配置文件目录 /bin 命令目录 /sbin 管理命令目录 /usr/bin | /usr/sbin 系统预装的其他命令
Linux系统的框架(简易版本):(绘画能力有限,见谅!)
shell是一个命令解释器,它可以用来启动、挂起、停止甚至编写程序。shell是Linux操作系统的一个整体组成部分,也是Linux操作系统和UNIX设计的一部分。
shell命令提示符
- Shel提示符标识了命令行的开始,通常Shell命令提示符采用以下的格式:
- username@hostname:pathname$
- 其中:
- username ------> 当前登陆的用户名
- @ ------> 用户名与主机名的分隔符
- hostname ------> 当前登陆的主机名
- : ------> 主机名与路径名的分隔符
- pathname ------> 当前路径名
- $ ------> 普通用户命令开始提示符(超级用户是#)
shell命令格式
- $command [-options argument1 argument2 ------> 命令名 [选项] <参数1> <参数2>...
- 其中:
- command ------> 命令名称
- options ------> 选项(一般由连字符-引导) : [选项]是对命令的特别定义,以减号(-)开始,多个选项可以用一个减号(-)连起来,例如:ls -l -h 与 ls -lh 相同。
- argument ------> 参数:<参数>提供命令运行的信息,或者是命令执行过程中所使用的文件名。
- 命令的三要素之间要用空格隔开。
- 一条命令要书写多行,用反斜杠 \ 表明未结束。
- 多条命令同时写在一行,用分号 ; 隔开。
- Shell命令是Linux和Unix系统中的基础,用于完成各种操作,如文件管理、程序执行、文本处理等。
shell的种类 :sh、bash、csh、tcsh、ash 等。
(1).sh shell
全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。sh 是 UNIX 上的标准 shell,很UNIX 版本都配有 sh。sh 是第一个流行的 Shell。
(2). csh shell
sh 之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。
(3). tcsh shell
是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。
(4). ash shell
一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,但是与下面讲到的 bash shell 完全兼容。
(5). bash shell
bash shell 是 Linux 的默认 shell,本教程也基于 bash 编写。bash 由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。
shell常用命令
工具命令
man 是 manual 的缩写
man 帮助用法演示
man ls
man 也是一条命令,共分为9章,可以使用man命令获得man的帮助
man 7 man
要想掌握一个函数:你必须了解它的原型:通过man手册获取printf的原型
man 3 printf
help
shell(命令解释器)自带的命令成为内部命令,其他的是外部命令
内部命令使用 help 帮助
help cd
外部命令使用help帮助
ls --help
touch --help //可以来查看touch指令的用法
可以通过type来判断一个命令是内部还是外部命令
type ls
type cd
history 显示历史命令
history [选项]
echo 显示文本或变量的内容 --> echo [选项] [字符串/变量]
echo "Hello World"
echo $PATH
date 显示系统日期和时间
date [选项]
文件管理
显示当前的目录:
pwd 显示当前的目录名称
查看文件:
ls 查看当前目录下的文件
ls / /root 这样会同时查看根目录和 /root目录下的文件
常用参数
-l 长格式显示文件
-a 显示隐藏文件
-r 逆序显示(默认按照文件名排序)
-t 按照时间顺序显示 ls -l -r -t (会按照时间逆向排序) ls -lrt
-R 递归显示 -h 人性化显示、 -d 只显示目录
更改当前的操作目录:
cd 更改当前的操作目录:
cd /path/to/... 绝对路径:相对于根目录来说的,从根目录出发
cd ./path/to/... 相对路径: 相对于当前路径,从当前路径出发
cd ../path/to/... 相对路径
cd 目录 //切换路径
cd //切换回自己的工作目录
cd .. //切换到上一级
cd - //切换到上一次
目录文件的创建与删除:
mkdir 建立空目录
mkdir a
常用参数
-p 递归创建多级文件夹
rmdir 删除空文件夹
rmdir a
rm 可以删除非空目录及文件
常用参数
-r 删除目录
-f 强制删除,不提示
需要注意,rm -rf 后面可以跟多个目录
不要出现 rm -rf / usr 这种,会从根目录开始删除
复制和移动目录:
cp 复制文件和目录
cp /root/a /tmp
常用参数
-r/R 递归复制目录
-v 显示过程
-p 保留文件原有更新时间(属性)
-a 时间戳+所有权+复制连接文件属性而非档案本身 -f 强行覆盖 -i 覆盖之前先行提示
mv 移动文件或者重命名
mv /a /other
mv /a /tmp
mv /a /tmp/b(移动+重命名)
常用参数
-i 覆盖文件前提示
生成文件:
touch (1)是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;(2)是用来创建新的空文件。
touch(空格)文件名 ------> 示例: touch hello.c ---->在当前位置下创建一个文件,名为:hello.c
touch file{1..10} //创建file1---file10共10个文件
touch -t 201810121230 hh.sh 【-t用十进制数】 //设定文件的时间戳
touch -r hh hh.sh 【touch -r目标文件 源文件】 //更新log.log的时间和log2012.log时间戳相同
常用参数
-a 仅更改访问时间
-c, --no-create 不创建任何文件
-d, --date=STRING 解析 STRING 并使用它来代替当前时间
-f (忽略)
-h, --no-dereference 影响每个符号链接而不是任何引用的文件(仅在可以更改符号链接的时间戳的系统上有用)
-m 仅更改修改时间
-r, --reference=FILE 使用此文件的时间而不是当前时间
-t STAMP 使用 [[CC]YY]MMDDhhmm[.ss] 代替当前时间
--time=WORD 更改指定时间:WORD 为 access、atime 或 use:等同于 -a
WORD 为 modified 或 mtime:等同于 -m
--help 显示此帮助并退出
--version 输出版本信息并退出
通配符
常用通配符:
* 匹配任何字符串
? 匹配1个字符串
[xyz] 匹配xyz任意一个字符
[a-z] 匹配一个范围
[!xyz]或者[^xyz] 不匹配
文本内容查看
cat 文本内容显示到终端
显示全部
head 查看文件开头
head test.txt 默认查看前10行
head -5 test.txt
head -c 20 runoob_notes.log 显示文件前 20 个字节
tail 查看文件结尾
tail -1000f catalina.out
常用参数
-f 文件内容更新后,显示信息同步更新
grep 根据模式匹配搜索文件内容 --> grep [选项] 模式 [文件]
grep "hello" myfile.txt
find 根据指定条件搜索文件 --> find [路径] [选项] -name 模式
find /home -name "*.txt"
sort 对文本文件进行排序 --> sort [选项] [文件]
sort myfile.txt
wc 统计文件内容信息
wc -l /tmp/test.txt 查看文件有多少行
-c或--bytes或------chars:只显示Bytes数;
-l或------lines:只显示列数;
-w或------words:只显示字数。
more 逐页显示文件内容 分行显示
more myfile.txt
less 逐行显示文件内容,支持向上翻页
less myfile.txt
打包和压缩
最早的Linux备份介质是磁带,使用的命令是tar。可以打包后的磁带文件进行压缩储存,压缩的命令是 gzip 和 bzip2,经常使用的扩展名是 .tar.gz .tar.bz2 .tgz。
tar 打包命令
常用参数
c 打包
x 解包
f 指定操作类型为文件 v 显示进度 P 使用绝对路径
打包
tar cf /tmp/etc-backup.tar /etc 把 /etc 这个文件夹打包放在/tmp/etc-backup.tar会提示,但是也能成功:tar: Removing leading `/' from member names
tar cPf /tmp/etc-backup.tar /etc 使用绝对路径 (没有提示)
tar czf /tmp/etc-backup.tar.gz /etc (tar集成了gzip和bzip2)
tar cjf /tmp/etc-backup.tar.bz2 /etc (压缩比例更高)
解包
tar xf /tmp/etc-backup.tar -C /root 把 tar包解压到 /root 目录下
tar zxf /tmp/etc-backup.tar.gz -C /etc
tar zjf /tmp/etc-backup.tar.gz -C /etc
gzip 压缩文件 --> gzip [选项] 文件 --> 由于tar集成了gzip和bzip2,所以通常情况下直接使用tar即可
gzip myfile.txt
gunzip myfile.txt.gz
zip 压缩文件 --> zip [选项] 文件/目录
zip myfile.zip myfile.txt
unzip myfile.zip
用户与权限管理
useradd 新建用户
useradd user1 (可以用 id user1 来验证是否存在)
创建一个用户后,自动在 /home建立Home目录,并且创建一些隐藏文件。同时,在 /etc/passwd 这个文件里会加入新用户user1的数据,/etc/shadow里面也有会相关数据(密码相关)。如果没有组的话,创建一个同名的组。
userdel 删除用户
userdel user1
userdel -r user1 同时删除Home目录
passwd 修改用户密码
passwd user1
passwd 更改当前用户密码
/etc/passwd 和 /etc/shadow 里面的数据也被删除
usermod 修改一个用户账户
usermod -d /home/other user1 Home目录从 /home/user1 改成 /home/other
chage 修改用户生命周期 设置用户密码的过期时间,甚至用户本身的过期时间
组管理命令
groupadd 新建用户组
groupadd group1
useradd user1
usermod -g group1 user1 把user1这个用户的组改成group1
useradd -g group1 user2 新建用户user2时就把它放到group1组下
groupdel 删除用户组 groupdel group1 删除组group1
用户切换
su 切换用户
su - USERNAME 使用 login shell 方式切换用户
su USERNAME 不完全切换,比如还是在 /root下而不会自动跳转到用户家目录
sudo 以其他用户身份执行命令
visudo 设置需要使用sudo的用户(组)
用户和用户组的配置文件介绍
/etc/passwd 用户配置文件,7个字段
user3:x:1003:1003::/home/user3:bin/bash
user3:用户名称
x:是否需要密码验证,x表示需要,空表示不需要
1003:用户的uid,用户的id信息,唯一识别用户的标识。root是0。
1003:用户的gid,表示组id信息
第五个字段:注释
/home/user3:Home目录
/bin/bash:用户登录后的命令解释器。/sbin/nologin 表示不能登录
/etc/shadow 保存用户和用户密码相关信息的
第一个字段:用户名称
第二个字段:用户加密过后的密码(看到也没用,经过处理,即使相同的密码也会显示不同)
/etc/group 用户组相关的配置文件,4个字段
group:x:10:another
group:组的名称
x:是否需要密码验证
10:gid
another:其他组设置,说明another这个用户的第二个组是group比如输入 id user1uid=1001(user1) gid=1001(group1) 组=1001(group1)id anotheruid=1002(another) gid=1002(another) 组=1003(group) 查找another信息,发现他的第二个组是group
文件和目录的权限表示方法
文件类型
- 普通文件
d 目录文件
b 块特殊文件
c 字符特殊文件
l 符号链接
f 命名管道
s 套接字文件
文件权限的表示方法
字符权限表示方法
r 读
w 写
x 执行
数字权限的表示方法
r=4
w=2
x=1
文件权限的表示方法
rwxrwxrwx
第一个表示文件属主的权限,第二个表示文件属组的权限,第三个表示其他用户的权限
创建新文件有默认权限,根据umask值计算,属主和属组根据当前进程的用户来设定
目录权限的标识方法
x 进入目录
rx 显示目录内的文件名
wx 修改目录内的文件名
文件权限的修改方法和数字表示方法
修改权限命令(测试的时候别用root,root不受限制)
chmod 修改文件、目录权限
chmod u+x /tmp/testfile u表示属主
chmod u=rwx /tmp/testfile
chmod g-r /tmp/testfile g表示属组
chmod 0-r /tmp/testfile o表示其他用户
chmod a+r /tmp/testfile a表示所有
chmod 755 /tmp/testfile 如果属主没有权限,所属的组有权限,以属主为准,还是没有权限。
chown 更改属主、属组
chown user1 /test 把test这个目录的属主改成user1
chown :group /test 把test这个目录的属组给成group chown user1:group /test 一起修改
chgrp 可以单独更改属组、不常用
linux一般创建一个文件默认会赋予666权限,然后根据用的umask值来计算。
用户默认umask值为022,所以一般是 666-022=644,对应rw-r--r--
特殊权限
SUID 用于二进制可执行文件,执行命令时取得文件属主权限
如,/usr/bin/passwd
SGID 用于目录,在该目录下创建新的文件和目录,权限自动更改为该目录的属组
文件共享时使用
SBIT 用于目录,该目录下新建的文件和目录,仅root和自己可以删除
如 /tmp
网络管理
网络状态查看
net-tools VS iproute
1. net-tools
ifconfig
route
netstat
2. iproute2
ip
ss
网卡名称:
ifconfig查看网卡名称
· eth0 第一块网卡(网络接口)
· 你的第一个网络接口可能叫做下面的名字
· eno1 板载网卡
· ens33 PCI-E网卡
· enp0s3 无法获取物理信息的 PCI-E 网卡
· CentOS7使用了一致性网络设备命名,以上都不匹配则使用eth0
当工作中大量管理网卡,所有设备的网卡最好都是以 eth0 命名,这样可以批量操作。
网络接口命名修改
网卡命名规则受 biosdevname 和 net.ifnames 两个参数影响
编辑 /etc/default/grup 文件,增加 biosdevname=0 net.ifnames=0
更新 grub
# grub2-mkconfig -o /boot/grub2/grub.cfg
重启
# reboot
组合,biosdevname=0 net.ifnames=0,则网卡名为 eth0
biosdevname=1 net.ifnames=0,则网卡名为 em1
biosdevname=0 net.ifnames=1,则网卡名为 ens33
ifconfig:
普通用户要使用ifconfig,要使用 /sbin/ifconfig
如果只想要看某一张网卡,可以 ifconfig 网卡名
mii-tool eth0 查看网卡物理连接情况
route -n 查看网关(路由),使用 -n 参数不解析主机名(把ip解析成域名)
网络配置命令:
ifconfig <接口> <IP地址> [netmask 子网掩码] 设置网卡的ip地址
ifup <接口> 启用网卡
ifdown <接口> 禁用网卡
网关配置命令:
添加网关
route add default gw <网关ip>
route add -host <指定ip> gw <网关ip>
route add -net <指定网段> netmask <子网掩码> gw <网关ip>
网络故障排除
ping 检测是否连接到主机
ping www.baidu.com
traceroute 跟踪当前主机到目标主机的网络状态,-w 1超时最多等1秒
traceroute -w 1 www.baidu.com
mtr 显示自己主机的网络状态
nslookup 域名解析成ip
nslooup www.baidu.com
telnet 检测端口
telnet www.baidu.com 80
tcdump 网络抓包 -i any 抓取所有网卡里的数据包,-n 把域名解析成 ip ,port 80 抓取指定端口 host 10.0.0.1 抓取当前主机到某个主机的数据包
tcpdump -i any -n port 80
tcpdump -i any -n host 10.0.0.1
tcpdump -i any -n host 10.0.0.1 and port 80
tcpdump -i any -n host 10.0.0.1 and port 80 -w /tmp/filename 捕获并且保存
netstat 监听地址 -n 域名转换,-t 显示tcp ,-p 进程 ,-l tcp状态 listen
netstat -ntpl
ss 跟netstat一样,参数也一样,显示的格式不一样
网络服务管理程序分为两种,分别是 SysV 和 systemd(centos7)
service network status|start|stop|restart
网络配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0 (网卡配置项)
/etc/hosts
软件包管理
rpm
rpm 命令常用参数
-q 查询软件包 rpm -qa 查询所有软件包 rpm -q vim-common 查询某个软件包
-i 安装软件包 rpm -i vim-enhanced-7.4.160-5.el7.x84_64.rpm (要全称)
-e 卸载软件包 rpm -e vim-enhanced (只要名字,不需要版本号等)用 rpm 安装的问题:如果一个软件包依赖其他软件包,那么就会安装失败。需要操作者自己解决依赖关系。
yum
CentOS yum源
http://mirror.centos.org/centos/7/
国内镜像
https://opsx.alibaba.com/mirror
yum 配置文件
/etc/yum.repos.d/CentOS-Base.repo
可以修改配置文件
[base]
name=CentOS-$releasever - Base -mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
或者直接用别人已经写好的配置文件
wget -O /etc/yum.repo.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo需要清除缓存yum makecache
常用选项
install 安装软件包
remove 卸载软件包
list |grouplist 查看软件包
update 升级软件包
其他安装方式
二进制安装
源代码编译安装
wget https://openresty.org/download/openresty-1.15.8.1.tar.gz
tar zxf openresty-VERSION.tar.gz
cd openresty-VERSION/
./configure --prefix=/usr/local/openresty
make -j2 (用2核编译)
make isntall
升级内核
rpm 格式内核
查看内核版本
uname -r
升级内核版本
yum install kernel-3.10.0 这种方式一般不能升级到最新
epel软件仓库会有较高的软件版本。yum install epel-release -y
升级已安装的其他软件包和补丁
yum update 除了升级内核,还会升级软件包。正常不要使用。
源代码编译安装内核
yum install gcc gcc-c++ make ncurses-devel openssl-devel elfutils-libelf-devel
下载并解压缩内核
https://www.kernel.org
tar xvf linux-5.1.10.tar.xz -C /usr/src/kernels
配置内核编译参数
cd /usr/src/kernels/linux-5.1.10/
make menuconfig | allyesconfig | allnoconfig
make allyesconfig (无脑全选)
使用当前系统内核配置
cp /boot/config-kernelversion.platform /usr/src/kernels/linux-5.1.10/.config
查看cpu
lscpu
编译
make j2 all
安装内核
make modules_install
make install
进程管理
进程的概念和查看进程
进程-运行中的程序,从程序开始运行到终止的整个生命周期是可管理的
查看命令
ps
-e 表示所有的终端运行的进程
-f 显示更多信息,比如 UID、PPID(父进程)、CMD(命令的完整路径)
-L 多显示 LWP ,线程信息
ps -eLf 常用命令
pstree 查看进程树
top 动态查看进程信息top -p 进程号
shutdown 关机或重启系统 --> shutdown [选项] 时间
shutdown -h now
结论:
进程也是树形结构
进程和权限有着密不可分的关系
进程的优先级调整
调整优先级
nice 范围从 -20 到 19,值越小优先级越高,抢占资源就越多
nice -n 10 ./rest.sh 启动的时候调整为 10
renice 重新设置优先级
renice -n 15 19312 已经处于启动的情况下进行调整。根据进程号
进程的作业控制
&符号,后台运行
./test.sh &
jobs 把处于后台运行的程序调到前台显示
jobs 能得到一个编号
fg 编号,可以调到前台
ctrl +z,把已经处于前台的程序调到后台,状态会stop
信号量
信号量是进程间通信方式之一,典型用法是:终端用户输入中断命令,通过信号机制停止一个程序的运行。
使用信号的常用快捷键和命令
kill -l 查看所有的信号
SIGINT 通知前台进程组终止进程 ctrl + c,2号信号
SIGKILL 立即结束程序,不能被阻塞和处理 kill -9 pid ,9号信号
守护进程和系统日志
守护进程(精灵进程)
使用 nohup 与 & 符号配合运行一个命令 (nohup进程不是守护进程)
nohup 命令使进程忽略 hangup(挂起)信号。关掉终端这个进程依然可以运行,忽略输入并且把输出打印到 nohup.out
守护进程(daemon)和一般进程有什么差别呢?
开机自启,守护进程不需要终端,输出可以打印到特殊的文件中,进程所占用的目录是根目录。cd /proc/ 这个目录是内存信息,相应的进程会有进程号同名的目录。
使用 screen 命令,进入screen环境后,如果远程连接断掉了,可以通过screen恢复工作现场
screen 进入 screen 环境
ctrl +a然后再单独按d退出(detached)screen 环境
screen -ls 查看 screen 的会话
screen -r sessionid 恢复会话系统日志文件 /var/log系统常规日志:messages内核运行情况:dmesg安全日志 secure定时任务日志 cron
内存和磁盘管理
内存和磁盘使用率查看
内存使用率查看
free
-m 以兆的方式显示
-g 以G的方式显示,但是会被四舍五入。一般不用
top
磁盘使用率的查看
fdisk
-l 查看
磁盘分区一块硬盘最多分15个分区
df 既能够看到分区,又能够看到挂载到的目录
-h 人性化可读
du (实际占用的空间)
-h 人性化显示
-s 只显示总计
du与ls的区别
du 是实际占用的,ls算上空洞数据。
常见文件系统
Linux 支持多种文件系统,常见的有:
ext4(centos6)
xfs(centos7)
NTFS(需安装额外软件,window常用,有版权)
磁盘分区和挂载
常用命令
fdisk
mkfs
parted
mount
常见配置文件
/etc/fstab
用fdisk创建分区(一个硬盘设备可以创建多个分区,也可以创建一个)
1:fdisk -l 查看有几个硬盘设备及分区
2:fdisk /dev/sdc (比如有设备sdc,则可以针对sdc进行分区)
3:之后 m 键是帮助
4:n 表示新建一个分区
5:新建分区时,需要选择主分区和扩展分区,其中 p表示主分区,最多有4个。e表示扩展分区(里面可以建立逻辑分区)。一般把一块硬盘划分为一个主分区。使用扩展分区时,只能建立3个主分区。
6:选择区分编号1-4
7:指定分区扇区大小,默认2048
8:指定分区大小。默认全部。可以 + 20G等可以选择分区大小
9:q 表示退出,分区不生效。w 表示生效
建立完分区后,需要对分区进行格式化。
mkfs.ext4 mkfs.xfs等命令
mkfs.ext4 /dev/sdc1
然后要进行操作,linux里都是文件级别的操作,需要挂载到某个目录下
mkdir /mnt/sdc1
mount /dev/sdc1 /mnt/sdc1 挂载上去
对/mnt/sdc1的读写就会落入sdc1设备上
1、一个硬盘
2、进行分区
3、格式化
4、挂载
5、对指定目录进行操作
需要注意的事情:
如果一个硬盘大于 2T ,不能使用 fdisk 进行分区,需要使用 parted
parted /dev/sdd
help 获取帮助
mount 进行挂载是临时的,不是固化的
vim /etc/fstab
在文件中新增下面一句话
/dev/sdc1 /mnt/sdc1 ext4 defaults(表示权限)0 0
系统综合状态查询
使用 sar 命令查看系统综合状态
sar -u 1 10 CPU的查看,每隔1秒做采样,采样10次,
sar -r 1 10 看内存
sar -b 1 10 IO的情况(磁盘读写)
sar -d 1 10 查看每块磁盘的读写
sar -q 1 10 查看进程
使用第三方命令查看网络流量
yum install epel-release
yum install iftop (网络情况)
iftop -p (默认eth0)
将文件连接并传输到远程系统
scp
scp 命令用于Linux之间复制文件和目录,scp是 secure copy 的缩写。scp 是linux系统下基于ssh登录进行安全的远程文件拷贝命令。scp是加密的,rcp是不加密的,scp是rcp的加强版。
scp [可选参数] file_source file_target
scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 ... [[user@]host2:]file2
参数说明:
-1: 强制scp命令使用协议ssh1
-2: 强制scp命令使用协议ssh2
-4: 强制scp命令只使用IPv4寻址
-6: 强制scp命令只使用IPv6寻址
-B: 使用批处理模式(传输过程中不询问传输口令或短语)
-C: 允许压缩 (将-C标志传递给ssh,从而打开压缩功能)
-p: 保留源文件的修改时间,访问时间和访问权限
-q: 不显示传输进度条
-r: 递归复制整个目录
-v: 详细方式显示输出。scp和ssh(1)会显示出整个过程的调式信息。这些信息用于调试连接,验证和配置问题
-c cipher:以cipher将数据传输进行加密,这个选项将直接传递给ssh
-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh
-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位
-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式
-P port: 注意是大写的P, port是指定数据传输用到的端口号
-S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项
从本地复制文件到远程
scp local_file remote_username@remote_ip:remote_folder // 从本地复制文件到远程
scp local_file remote_ip:remote_folder // 省略了用户名,默认为root,等同于 scp local_file root@remote_ip:remote_folder
从远程复制到本地
从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可:
scp remote_username@remote_ip:remote_folder local_file
ssh
SSH 为Secure Shell 的缩写,SSH为创建在应用层和传输层基础上的安全协议。通过SSH协议远程登录其他主机。
SSH(远程连接工具[客户端命令])连接原理:ssh服务是一个守护进程(daemon),系统后台监听客户端 /usr/bin/ssh 的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(默认监听在22端口),包括公共密钥等交换信息。
ssh服务端由2部分组陈: openssh(提供ssh服务) openssl(提供加密的程序)
备注:ssh的客户端图形化工具有: xshell、securecrt、Mobaxterm等
传统的网络服务程序,如FTP、POP和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。
而SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
SSH之另一项优点为其传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP、甚至为PPP提供一个安全的"通道"。
ssh: /usr/bin/ssh /etc/ssh /usr/share/man/man1/ssh.1.gz
ssh username@remote_ip
sshpass
sshpass 实用程序旨在使用键盘交互密码身份验证模式运行SSH ,但以非交互方式运行。
SSH使用直接TTY访问来确保密码确实是由交互式键盘用户发出的。sshpass 在专用的TTY中运行SSH,让SSH认为它是从交互式用户那里获取密码的。
安装 sshpass:
yum install sshpass -y
sshpass [-f filename | -d num | -p password | -e] [options]
-p 密码 密码在命令行中给出。 (这是最不安全的选择,不应使用)
用于sshpass通过SSH登录到远程服务器。假设密码为 abc。以下是使用sshpass选项的几种方法。
sshpass -p "abc" ssh <username>@<服务器地址>
-p在shell脚本中使用时,该选项如下所示:
sshpass -p "abc" ssh -o StrictHostKeyChecking=no <username>@<服务器地址>
-f 文件名 密码是文件名的第一行。
echo'abc' > pass_file
chmod 0400 pass_file
sshpass -f pass_file ssh <username>@<服务器地址>
在shell脚本中使用以下选项:
sshpass -f pass_file ssh -o StrictHostKeyChecking=no <username>@<服务器地址>
-d number number是sshpass从运行程序继承的文件描述符。从打开的文件描述符中读取密码。
-e 密码来自环境变量"SSHPASS"。(密码应该是文件名的第一行)
SSHPASS='abc' sshpass -e ssh <username>@<服务器地址>
在shell脚本中使用时,该选项如下所示:
SSHPASS ='abc' sshpass -e ssh -o StrictHostKeyChecking=no <username>@<服务器地址>
sshpass搭配使用rsync:
下面使用了 -e 选项,该选项将密码传递给环境变量SSHPASS
SSHPASS='abc' rsync --rsh="sshpass -e ssh -l <username>" /环境变量地址/地址
可以 -f 像这样使用开关:
rsync --rsh="sshpass -f pass_file ssh -l <username>" /环境变量地址/地址
可以使用 sshpassGPG 加密的文件。使用该-f开关时,参考文件为纯文本格式。
echo 'abc' // 创建文件
.sshpasswd
gpg -c .sshpasswd // 使用gpg加密文件
rm .sshpasswd // 删除包含明文的文件
gpg -d -q .sshpassword.gpg // 使用
pass_file; sshpass -f pass_file ssh <username>@<服务器地址>
写代码中需要注意的点:
shell 指令在linux中严格区分大小写, l L 不同
使用分号( ; ) 可以在一行中输入多个命令
ls;lld ; echo "helloworld" ; lok
按下Table键,自动补齐命令、目录或文件名
系统会将过去输入过的命令记忆下来,只要按方向键中的上下箭头
输入输出重定向:
输入定向:
输出定向: >, >>
如下图所示:
管道:可以将多个命令组合到一起,把管道左边的命令的输出 作为右边命令的输入
这只是一些常用的Linux Shell命令的介绍和用法,还有很多其他命令可以去进一步了解和使用。使用这些命令可以帮助您更好地管理和操作Linux系统。
以上。仅供学习与分享交流,请勿用于商业用途!
我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!