Linux入门一

一、Linux上的软件管理

1. centor-os

  • 共有两种管理软件的方式:yumrpm

1.1 yum命令(推荐)

  • yum 是改进型的 RPM 软件管理器,它很好的解决了 RPM 所面临的软件包依赖问题

  • yum 主要功能是更方便的添加/删除/更新RPM 包,自动解决包的倚赖性问题,便于管理大量系统的更新问题

  • yum 可以同时配置多个资源库(Repository),简洁的配置文件(/etc/yum.conf),自动解决增加或删除rpm 包时遇到的依赖性问题,保持与RPM 数据库的一致性

1.1.1 yum源

  • 使用 yum 安装软件包之前,需指定好 yum 下载 RPM 包的位置,此位置称为 yum 源。换句话说,yum 源指的就是软件安装包的来源。使用 yum 安装软件时至少需要一个 yum 源。yum 源既可以使用网络 yum 源,也可以将本地光盘/镜像作为 yum 源。接下来就给大家介绍这两种 yum 源的搭建方式

(1)网络 yum 源搭建

  • 一般情况下,只要你的主机网络正常,可以直接使用网络 yum 源,不需要对配置文件做任何修改,这里对 yum 源配置文件做一下简单介绍

  • 网络 yum 源配置文件位于 /etc/yum.repos.d/ 目录下,文件扩展名为".repo"(只要扩展名为 ".repo" 的文件都是 yum 源的配置文件)

    • [root@localhost ~]# ls /etc/yum.repos.d/
      CentOS-Base.repo
      CentOS-Media.repo
      CentOS-Debuginfo.repo.bak
      CentOS-Vault.repo
      
      可以看到,该目录下有 4 个 yum 配置文件,通常情况下 CentOS-Base.repo 文件生效。我们可以尝试打开此文件,命令如下:
      
      [root@localhost yum.repos.d]# vim /etc/yum.repos.d/ CentOS-Base.repo
      [base]
      name=CentOS-$releasever - Base
      mirrorlist=http://mirrorlist.centos.org/? release= $releasever&arch=$basearch&repo=os
      baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
      gpgcheck=1
      gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
      …省略部分输出…
      
      此文件中含有 5 个 yum 源容器,这里只列出了 base 容器,其他容器和 base 容器类似。base 容器中各参数的含义分别为:
      
      [base]:容器名称,一定要放在[]中。
      
      name:容器说明,可以自己随便写。
      
      mirrorlist:镜像站点,这个可以注释掉。
      
      baseurl:我们的 yum 源服务器的地址。默认是 CentOS 官方的 yum 源服务器,是可以使用的。如果你觉得慢,则可以改成你喜欢的 yum 源地址。
      
      enabled:此容器是否生效,如果不写或写成 enabled 则表示此容器生效,写成 enable=0 则表示此容器不生效。
      
      gpgcheck:如果为 1 则表示 RPM 的数字证书生效;如果为 0 则表示 RPM 的数字证书不生效。
      
      gpgkey:数字证书的公钥文件保存位置。不用修改
      

(2)本地 yum 源搭建

  • 在无法联网的情况下,yum 可以考虑用本地光盘(或安装映像文件)作为 yum 源。

  • Linux 系统安装映像文件中就含有常用的 RPM 包,我们可以使用压缩文件打开映像文件(iso文件),进入其 Packages 子目录

  • 可以看到,该子目录下含有几乎所有常用的 RPM 包,因此使用系统安装映像作为本地 yum 源没有任何问题。

  • 在 /etc/yum.repos.d/ 目录下有一个 CentOS-Media.repo 文件,此文件就是以本地光盘作为 yum 源的模板文件,只需进行简单的修改即可,步骤如下:

    • 1. 放入 CentOS 安装光盘,并挂载光盘到指定位置。命令如下:
      
      [root@localhost ~]# mkdir /mnt/cdrom
      #创建cdrom目录,作为光盘的挂载点
      [root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
      mount: block device/dev/srO is write-protected, mounting read-only
      #挂载光盘到/mnt/cdrom目录下
      
      2. 修改其他几个 yum 源配置文件的扩展名,让它们失效,因为只有扩展名是"*.repo"的文件才能作为 yum 源配置文件。当也可以删除其他几个 yum 源配置文件,但是如果删除了,当又想用网络作为 yum 源时,就没有了参考文件,所以最好还是修改扩展名。 命令如下:
      
      [root@localhost ~]# cd /etc/yum.repos.d/
      [root@localhost yum.repos.d]# mv CentOS-Base, repo CentOS-Base.repo.bak
      [root@localhost yum.repos.d]#mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
      [root@localhost yum.repos.d]# mv CentOS-Vault.repo CentOS-Vault.repo.bak
      
      修改光盘 yum 源配置文件 CentOS-Media.repo,参照以下方修改:
      
      [root@localhost yum.repos.d]# vim CentOS-Media.repo
      [c6-media]
      name=CentOS-$releasever - Media
      baseurl=file:///mnt/cdrom
      #地址为你自己的光盘挂载地址
      #file:///media/cdrom/
      #file:///media/cdrecorder/
      #注释这两个的不存在地址
      gpgcheck=1
      enabled=1
      #把enabled=0改为enabled=1, 让这个yum源配置文件生效
      
      3. 如此,本地 yum 源就配置完成了
      

1.1.2 yum相关命令

1. yum的查询相关的命令
yum search  # 使用 yum 查找软件包
yum list  # 列出仓库所有可安装的软件包
yum list updates  # 列出所有可更新的软件包
yum list installed  # 列出所有已安装的软件包,可加 “ |grep 要搜索关键字 ” 来查询你想查询的软件
yum repolist all  # 列出所有仓库
yum  info <package_name>  # 查看软件包信息

2. 安装相关命令
	-y 参数,表示跳过确认直接安装
    
# 安装之前可以通过如下命令查看 yum 是否已安装:  rpm -qa | grep yum
2.1 安装软件包
yum install <package_name>  # 如:yum install net-tools

2.2 重新安装软件包
yum install  reinstall  <package_name>  

3. 下载软件包 

3.1 使用 yum 命令只下载不安装(并且会自动帮你解决依赖)
yum install --downloadonly --downloaddir 保存rpm包的目录 包名

3.2 yumdownloader 命令(只下载不安装)
yum -y install yum-utils  # yumdownloader 命令需要yum-utils 包才能使用,需要先下载这个包

yumdownloader --destdir 保存rpm包的目录 --resolve 包名   (--resolve 参数会自动解决软件的依赖关系)

4. 升级软件包
yum update <package_name>

例:yum  update nginx  # 这个命令将会更新指定的软件包到最新版本

5. 删除软件包
yum remove <package_name>

如:yum -y remove  nginx  # 这个命令将会从系统中删除指定的软件包

6. 清除yum缓存
yum clean all  # 这个命令将会清除yum缓存,以便重新从远程仓库下载软件包

7. 更新yum源
yum makecache  # 这个命令将会更新yum源,以便获取最新的软件包列表。一般在修改yum源配置之后,使新换上的yum源生效时使用

1.2 rpm命令

  • RPM 软件管理器
# linux上几乎所有的软件均通过RPM 进行安装、卸载及管理等操作。用于管理Linux 下软件包的软件
# rpm用于离线安装,不能同时安装一个包的依赖,而yum可以

rpm [选项] <package.rpm>  # 后面可以跟多个包名,表示总左往右顺序操作

RPM有多种基本的模式:它们是安装、查询、验证、删除等。

安装模式:rpm –i

查询模式:rpm -q

验证模式:rpm –V或 -verify

删除模式:rpm –e

安装时的参数:
--force 即使覆盖属于其它包的文件也强迫安装

--nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装

# 如:
rpm -ivh <package.rpm>   # 安装一个包,安装时可以跟包的路径
rpm -Uvh <package.rpm>   # 升级一个包
rpm -e <package.rpm>   # 卸载一个包
rpm -qa  # 列出所有被安装的rpm package
rpm -q <package.rpm>   # 查询一个包是否被安装
rpm -qi <package.rpm>   # 得到被安装的包的信息
rpm -ql <package.rpm>   # 列出该包中有哪些文件
rpm -qf <filename>  # 查找包含指定文件的软件包

例:
[root@localhost Packages]# rpm -qf /usr/sbin/vipw
shadow-utils-4.6-5.el7.x86_64
其中,-f表示查找包含指定文件的软件包

2. ubantu

apt-get install net-tools

apt-get install -y nano

3. 查看某端口的使用情况:

netstat -anp |grep 端口号  

4. 常用命令

cd 路径  # 切换路径
pwd  # 查看当前所在路径
ls 目录  # 列出指定目录下的所有内容,ls后面没有加目录,则列出当前目录下的所有内容
ls -l | grep "^-" | wc -l  # 统计当前目录下文件的个数(不包括目录)
ls -lR| grep "^-" | wc -l  # 统计当前目录下文件的个数(包括子目录)
ls -lR | grep "^d" | wc -l  # 查看某目录下文件夹(目录)的个数(包括子目录)
find . -name filename | wc -l  # 统计当前文件夹下叫某某的文件的数量
find -name "*.js" | wc -l  # 统计当前文件夹下指定类型的文件的数量,例如这里需要找 js 文件的数量
ls -l  # 长列表输出该目录下文件信息(注意这里的文件是指目录、链接、设备文件等),每一行对应一个文件或目录,ls -lR 是列出所有文件,包括子目录
ll 内容名  # 不加内容名:列出当前目录下的所有详细信息(包含权限信息、日期信息等),加内容名:列出当前目录下的某个内容的详细信息(包含权限信息、日期信息等)

du -sh *  # 查看当前目录下所有文件、文件夹的大小
df -h  # 查看服务器的磁盘使用情况(包括挂载的网盘)

二、Linux启动和关闭

  • linux中常用的关机/重启命令有shutdown、reboot、init、halt和poweroff。它们都可以达到重启系统的目的,但每个命令的内部工作过程是不同的
  • 常用reboot 立即重启shutdown -r now 立即重启

1. shutdown 命令

  • -h:停止系统服务并关机
  • -r: 停止系统服务后重启
shutdown -h now  --立即关机  

shutdown -h 10:53  --到10:53关机,如果该时间小于当前时间,则到隔天  

shutdown -h +10  --10分钟后自动关机  

shutdown -r now  --立即重启  

shutdown -r +30 'The System Will Reboot in 30 Mins'   --30分钟后重启并并发送通知给其它在线用户

2. reboot 命令

  • reboot表示立即重启,效果等同于shutdown -r now

3. init 命令

  • init是所有进程的祖先,它的进程号始终为1,所以发送TERM信号给init会终止所有的 用户进程﹑守护进程等。shutdown 就是使用这种机制
  • init定义了7个运行级别(runlevel):
init 0为停机或者关机(千万不能将initdefault设置为0)﹐

init 1为单用户模式,只root用户进行维护。

init 2 - 多用户,没有 NFS 不联网

init 3 - 完全多用户模式(标准的运行级)

init 4 - 没有用到

init 5 - X11 (xwindow) 图形化界面模式

init 6 - 重新启动 (千万不要把initdefault 设置为6 )

4. halt 命令

  • halt命令是最简单的关机命令,其实就是调用shutdown -h。halt执行时﹐不理会目前系统状况下,进行硬件关机;杀死应用进程﹐执行sync系统调用﹐文件系统写操作完成后就会停止内核

5. poweroff 命令

  • poweroff表示立即关机,效果等同于shutdown -h now,在多用户模式下(Run Level 3)不建议使用

三、文件的上传下载

  • 通过在Linux上下载相关的软件工具,如 lrzsz、zip、unzip、tar 等来实现

  • 这里只介绍两种方法(其实两种就已经很够用了)

1. 上传rz 下载sz

  • 若linux上无法使用,则安装一下即可

  • centor-os: yum install lrzsz

  • rz、sz详细使用

  • 这两个命令只能上传和下载文件,注意:不能之间上传、下载文件夹(目录)

    # 上传文件夹到Linux
    可以在本地用 WinRAR 或其他软件将文件夹压缩成 zip 格式,再通过 "rz"命令上传到linux上用 "unzip 压缩文件"名解压即可
    
    语法:rz [options]
    
    options的参数:
    
    -b: 使用二进制模式进行传输,这是默认设置,可以防止上传文本文件时,文件格式的问题。
    -e: 接收文件后退出rz。
    -v: 在传输过程中显示详细信息。
    -h: 显示用法信息的帮助文档。
    -k: 保持权限不变。
    -q: 静默模式,取消传输过程中所有确认型提示。
    -z: 以压缩方式传输。
    -l: 文件名的大小写为区分大小写(默认为不区分大小写)
    
    

2. 通过xshell和xftp工具上传下载文件

  • 本地安装好xshell和xftp软件之后,用xshell连接到服务器,然后通过xshell窗口上的 新建文件传输 图标实现文件和文件夹的传输

四、rm命令

  • 用法
完整命令:rm [options] name

参数:
1.  -i 删除前逐一询问确认
2.  -f 无需确认,直接删除,即使文件属性是 '唯读'
3.  -r 将目录及以下的内容全部删除

删除当前目录下的所有内容(包括文件和文件夹)
命令: rm -r *

rm -r test/hsw/  # 删除test目录下的 hsw目录
rm -r test1/hsw1/123.txt  # 删除test1目录下的 hsw1目录下的 123.txt文件

# 删除文件名乱码的文件
# 先ls -i 查看文件的节点号,再用find命令将文件名传给rm命令
ls -i  
find ./ -inum 要删除的文件节点号 -print -exec rm -rf {} \;

五、cp命令

  • 不管是 cp 还是 scprsync 的上传或下载命令,他们的命令书写都遵循一个规则,就是从哪传到哪,前面是(从哪)源文件,后面是(到哪)目标文件

  • 复制源文件或目录到指定目录

  • 语法:cp +参数+源文件或目录+目标目录(可以改名)

-r或-R:递归处理,将指定目录下的子文件和子目录一并处理(复制目录的时候使用)
-f:强行复制文件或目录,不论目标文件或目录是否已存在
-p:保留文件属性(所有者、所属组、文件权限、文件时间·····)
-a:相当于-prd
-i:覆盖既有文件时先询问用户。(默认-i)
-l:对源文件建立硬连接,非复制文件。
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀。
-b:覆盖已存在的文件目标前将目标文件备份。
-v:详细显示命令执行的操作。
-d:–no-dereference –preserv=links 复制符号连接加的选项
注意:当复制目录的时候一定要加上选项-r,不然不能复制
实例:
1. 复制并重命名
cp a.txt b.txt  # 复制a.txt 到本目录下并命名为 b.txt

2. 复制目录的时候必须加 -r  # 将test目录复制一份成 test2目录,注意:复制目录时,不能复制到他本身下
cp -r test/ test2

六、mv命令

1. 介绍

  • mv命令是move英文单词的缩写,可以用来移动文件或者将文件改名
  • mv命令是Linux操作系统下的一个文件管理命令,主要有三大功能,如下:
    • 将文件改名
    • 移动文件
    • 移动目录

2. 用法

  • 命令书写都遵循一个规则,就是从哪传到哪

  • mv [选项] 源文件或目录 目标文件或目录
    
    参数如下:
    
    ①-i:移动文件至某一指定目录时,如果存在同名文件,则向用户询问是否覆盖。
    
    ②-f:移动文件至某一指定目录时,如果存在同名文件则覆盖已有同名文件,不进行任何提示。
    
    ③-b:移动文件至某一指定目录时,如果存在同名文件在覆盖前为其创建一个备份。
    
    ④-u:移动文件至某一指定目录时,当源文件比目标文件新,或者目标文件不存在时,才执行移动操作。
    
    ⑤-t:移动多个文件至某一指定目录时,使用-t参数,此时目录在前,文件在后
    

七、scp命令

1. 介绍

  • scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用

2. 用法

  • 命令书写都遵循一个规则,就是从哪传到哪
# 命令格式:
scp [参数] [原路径] [目标路径]


# 命令参数

-1 强制scp命令使用协议ssh1

-2 强制scp命令使用协议ssh2

-4 强制scp命令只使用IPv4寻址

-6 强制scp命令只使用IPv6寻址

-B 使用批处理模式(传输过程中不询问传输口令或短语)

-C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)

-p 保留原文件的修改时间,访问时间和访问权限。

-q 不显示传输进度条。

-r 递归复制整个目录,传目录时,不能在命令的后面加 /   如:主机1的test1目录传到 主机2的test2目录,在主机1上执行:  scp -r /jtdata/test1 jt@主机2:/jtdata/test2  ;或在主机2上执行:  scp -r jt@主机1:/jtdata/test1 /jtdata/test2

-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)的选项

3. 实例

# 命令格式:

1. scp local_file remote_username@remote_ip:remote_folder

或者

2. scp local_file remote_username@remote_ip:remote_file

或者

3. scp local_file remote_ip:remote_folder

或者

4. scp local_file remote_ip:remote_file

第1,2个指定了用户名,命令执行后需要输入用户密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名

第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名

# 示例1,从本地复制到远程

# 在本地服务器上将/root/lk目录下所有的文件传输到服务器43.224.34.73的/home/lk/cpfile目录下,命令为:

scp -r /root/lk root@43.224.34.73:/home/lk/cpfile
    
# 示例2. 从远程复制到本地
# 在本地服务器上操作,将服务器43.224.34.73上/home/lk/目录下所有的文件全部复制到本地的/root目录下,命令为:

scp -r root@43.224.34.73:/home/lk /root    

八、rsync命令

1. 介绍

  • rsync 可以理解为 remote sync(远程同步),但它不仅可以远程同步数据(类似于 scp 命令),还可以本地同步数据(类似于 cp 命令)。不同于 cp 或 scp 的一点是,使用 rsync 命令备份数据时,不会直接覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异(用加密算法校验本地和目标文件内容),只有数据不同时才会把不相同的部分覆盖
  • 使用 rsync 在远程传输数据(备份数据)前,是需要进行登陆认证的,这个过程需要借助 ssh 协议或者 rsync 协议才能完成。在 rsync 命令中,如果使用单个冒号(:),则默认使用 ssh 协议;反之,如果使用两个冒号(::)或者 使用 url格式的命令,则使用 rsync 协议
    • 使用rsync协议则需要进行服务端的 rsync 配置,另外这种方式是不需要 服务端的用户名和密码(rsync配置如下)
    • 注意 rsync协议 传输时,只会在目标方创建一层目录,所以有时候必须要提前创建好目录(如何创建目录看下面的示例的第三个)
1. 使用rsync前需要安装

yum install -y rsync 

2. 进行rsync配置

配置文件路径为 /etc/rsyncd.conf

# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# configuration example:

# 允许客户端连接到本地的jt用户
uid = jt  
# 无所谓
gid = jt
# 默认为873端口
port = 873
use chroot = yes
max connections = 10000
pid file = /opt/var/run/rsync/rsyncd.pid
log file = /opt/var/log/rsync/rsync.log
log format = %t %a %m %f %b
syslog facility = local3

# 允许连接到本地的客户端IP段
hosts allow =  0.0.0.0/0
transfer logging = yes
timeout = 900

# 模块必须要配置 (模块的作用可以看下面的示例中的第3个)
[jtdata]
path = /jtdata
list = no
read only = false

3. 启动rsync服务
root用户执行:  rsync --daemon

至此,rsync服务配置完成

2. 用法

  • 命令书写都遵循一个规则,就是从哪传到哪
1. rsync三种工作方式

以下是rsync的语法:

# 本地同步
Local:  rsync [OPTION...] SRC... [DEST]
 
# 基于ssh协议的远程同步
Access via remote shell:
  Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
  Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
 
# 基于rsync协议的远程同步
Access via rsync daemon:
  Pull: 
    ::格式   rsync [OPTION...] [USER@]HOST::SRC... [DEST]
    url格式  rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
        
  Push: 
    ::格式   rsync [OPTION...] SRC... [USER@]HOST::DEST
    url格式  rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

2. 命令参数      
-v:显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息。
-P:显示文件传输的进度信息。(实际上"-P"="--partial --progress",其中的"--progress"才是显示进度信息的)。
--port      :连接daemon时使用的端口号,默认为873端口。
-n --dry-run  :仅测试传输,而不实际传输。常和"-vvvv"配合使用来查看rsync是如何工作的。
-a --archive  :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl" 加起来的作用。
-r --recursive:递归到目录中去。
-t --times:保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新
          :检查出mtime不同从而导致增量传输无效。
-o --owner:保持owner属性(属主)。
-g --group:保持group属性(属组)。
-p --perms:保持perms属性(权限,不包括特殊权限)。
-D        :是"--device --specials"选项的组合,即也拷贝设备文件和特殊文件。
-l --links:如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象。
-z        :传输时进行压缩提高效率。
-R --relative:使用相对路径。意味着将命令行中指定的全路径而非路径最尾部的文件名发送给服务端,包括它们的属性。用法见下文示例。
--size-only :默认算法是检查文件大小和mtime不同的文件,使用此选项将只检查文件大小。
-u --update :仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判断的,不会影响删除行为。
-d --dirs   :以不递归的方式拷贝目录本身。默认递归时,如果源为"dir1/file1",则不会拷贝dir1目录,使用该选项将拷贝dir1但不拷贝file1。
--max-size  :限制rsync传输的最大文件大小。可以使用单位后缀,还可以是一个小数值(例如:"--max-size=1.5m")
--min-size  :限制rsync传输的最小文件大小。这可以用于禁止传输小文件或那些垃圾文件。
--exclude   :指定排除规则来排除不需要传输的文件。
--delete    :以SRC为主,对DEST进行同步。多则删之,少则补之。注意"--delete"是在接收端执行的,所以它是在
            :exclude/include规则生效之后才执行的。
-b --backup :对目标上已存在的文件做一个备份,备份的文件名后默认使用"~"做后缀。
--backup-dir:指定备份文件的保存路径。不指定时默认和待备份文件保存在同一目录下。
-e          :指定所要使用的远程shell程序,默认为ssh。
--password-file:daemon模式时的密码文件,可以从中读取密码实现非交互式。注意,这不是远程shell认证的密码,而是rsync模块认证的密码。

注意:rsync使用的是密码文件方式进行密码传输,因此我们需要在服务端配置文件中配置rsync的用户和密码文件,如下:
auth users = test_user
secrets file = /etc/rsyncd.secrets  # 服务端密码文件路径,该文件中是test_user的密码

客户端也生成一个任意名字的密码文件,其权限必须是 600,不是 600 的修改一下即可:chmod 600 文件名

-W --whole-file:rsync将不再使用增量传输,而是全量传输。在网络带宽高于磁盘带宽时,该选项比增量传输更高效。
--existing  :要求只更新目标端已存在的文件,目标端还不存在的文件不传输。注意,使用相对路径时如果上层目录不存在也不会传输。
--ignore-existing:要求只更新目标端不存在的文件。和"--existing"结合使用有特殊功能,见下文示例。
--remove-source-files:要求删除源端已经成功传输的文件。

3. 实例

1. rsync -a 选项
[root@localhost rsync]# rsync -a test1 test2
[root@localhost rsync]# ls test2
test1 
[root@localhost rsync]# ls test2/test1/
1  123.txt  2  3

这里有一个问题,我们本来是想把 test1 目录中的内容直接放到 test2 目录中,可结果 rsync 命令却新建了 test2 目录,然后把 test1 放到 test2 中
如果想要实现将 test1 目录中的内容直接备份到 test2 目录中,需修改上面的命令为
[root@localhost rsync]#rm -rf test2
[root@localhost rsync]# rsync -a test1/ test2/
[root@localhost rsync]# ls test2/
1  123.txt  2  3


2. rsync --delete选项
通过表 1 可以看到,--delete 选项用来--delete 删除 DEST 中 SRC 没有的文件
#拷贝 test1 目录下的数据
[root@localhost rsync]# rsync -a test1/ test2
#删除 test1/123.txt 文件
[root@localhost rsync]# rm -f test1/123.txt
[root@localhost rsync]# ls test1/
1 2 3
[root@localhost rsync]# rsync -av test1/ test2/
sending incremental file list
./

sent 55 bytes  received 15 bytes 140.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost rsync]# ls test2/
1 123.txt 2 3

3. 下载文件,url格式的远程同步( :: 格式同理)

注意:3.1,3.2,3.3示例的远程端8.219.187.132的rsync配置的 jtdata 模块的path为 /jtdata
# 3.1 文件到文件,将8.219.187.132主机上的/jtdata/products/data/JTGMCJIC/2022091306/test.txt 文件拉取到本地/hsw/products/data/JTGMCJIC/2022091306/test02.txt 保存为test02.txt文件 

rsync -a --progress --port=873 rsync://jt@8.219.187.132/jtdata/products/data/JTGMCJIC/2022091306/test.txt /hsw/products/data/JTGMCJIC/2022091306/test02.txt  
# 注意:这种写法不会创建目标路径中的目录
        
# 3.2 文件到目录,将8.219.187.132主机上的/jtdata/products/data/JTGMCJIC/2022091306/test.txt 文件拉取到本地/jtdata/products/data/JTGMCJIC/2022091306/ 目录下,保存为相同文件名的文件

rsync -a --progress --port=873 rsync://jt@8.219.187.132/jtdata/products/data/JTGMCJIC/2022091306/test.txt /hsw/products/data/JTGMCJIC/2022091306/  
# 注意:若本地有/hsw/products/data/JTGMCJIC目录,则会自动创建2022091306目录,否则会报错   
    
# 3.3 目录到目录,将8.219.187.132主机上的/jtdata/products/data/JTGMCJIC/2022091306/ 目录下的文件全部拉取到本地/jtdata/products/data/JTGMCJIC/2022091306/ 目录下

rsync -a --progress --port=873 rsync://jt@8.219.187.132/jtdata/products/data/JTGMCJIC/2022091306/ /hsw/products/data/JTGMCJIC/2022091306/  
# 注意:若本地有/hsw/products/data/JTGMCJIC目录,则会自动创建2022091306目录,否则会报错    
    
# 3.4 注意若远程端的rsync配置的 jt_test 模块的path为 /jtdata/products

# 再看 3.1的文件到文件,将8.219.187.132主机上的/jtdata/products/data/JTGMCJIC/2022091306/test.txt 文件拉取到本地/hsw/products/data/JTGMCJIC/2022091306/test02.txt 保存为test02.txt文件 

rsync -a --progress --port=873 rsync://jt@8.219.187.132/jt_test/data/JTGMCJIC/2022091306/test.txt /hsw/products/data/JTGMCJIC/2022091306/test02.txt  
# 模块只会影响 远程主机ip后的目录写法    

4. 上传文件
注意:远程端8.219.187.132的rsync配置的 jtdata 模块的path为 /jtdata
# 4.1 文件到目录,将本地的/hsw/products/data/JTGMCJIC/2022091306/test02.txt 文件上传到8.219.187.132主机上/jtdata/products/data/JTGMCJIC/2022091306/ 目录下,保存为相同文件名的文件

rsync -a --progress --port=873 /hsw/products/data/JTGMCJIC/2022091306/test02.txt rsync://jt@8.219.187.132/jtdata/products/data/JTGMCJIC/2022091306/
# 注意:若8.219.187.132主机上有/jtdata/products/data/JTGMCJIC目录,则会自动创建2022091306目录,否则会报错    

九、tar命令

1. 介绍和用法

  • tar命令用于文件的打包或压缩,是最为常用的打包压缩命令
1. 命令格式:
tar [选项] 文件名.tar.gz  源文件

tar -czvf xxx.tar.gz  source_file (tar -czvf 包名.tar.gz  源文件)        #以tar.gz方式打包并gz方式压缩
tar -xzvf xxx.tar.gz -C path (tar -xzvf xxx.tar.gz -C 目标路径)          #解压缩包

# 注意:使用tar命令,打包仅仅是打包xxx.tar,打包并压缩就是xxxx.tar.gz,打包压缩的文件一定要指定文件格式,这样解包解压才好用对应的参数来解包解压缩,注意压缩包文件名和源文件位置不要颠倒了

2. 常用参数
-c --create			:创建新的归档文件,即打包,打包的意思就是说把一堆文件打包成一个文件
-v --verbose 		:可视化,显示详细的tar处理的文件信息的过程
-f --file 			:要操作的文件名,# 注意:********f参数要放在cvxzj参数的最后********
-x  --extract		:解压文件
-z --gzip, --gunzip, --ungzip      :通过 gzip 来进行归档压缩,如 tar -czvf etc.tar.gz /etc/,解压使用tar -zxvf test.tar.gz
-j  --bzip2      	:通过 bzip2 来归档压缩文件,如 tar -jcvf test.tar.bz2 /etc/,解压使用tar -jxvf test.tar.bz2
-J					:使用xz压缩工具压缩成.xz文件,如 tar -Jcvf test.tar.xz /etc/,解压使用tar -Jxvf test.tar.xz
-t  --list 			:表示查看文件,查看文件中的文件内容
-C --directory=DIR  :解压文件至指定的目录,如果是解压到当前目录,可以不加-C

3. 压缩时排除指定的文件或目录
tar -zcvf xxx.tar.gz 要打包的目录 --exclude=dir1 --exclude=file1

注意:
(1)--exclude=file1 而不是 --exclude file1
(2)要排除一个目录是 --exclude=dir1,而不是 --exclude=dir1/

(3)也可以在父目录打包
tar -zcvf afish.tar.gz pardir --exclude=pardir/file1 --exclude=pardir/dir1

4. 示例:
[root@Centos8 shell_scripy]# tar -cvf etc.tar  /etc/						#仅仅是打包,并没有压缩
[root@Centos8 shell_scripy]# tar -xvf etc.tar								#解包

[root@Centos8 shell_scripy]#  tar -czvf etc.tar.gz /etc/					#打包并压缩/etc/目录,压缩包存放在当前目录,名字为etc.tar.gz
[root@Centos8 shell_scripy]#  tar -xzvf  etc.tar.gz -C ./find/				#解压缩etc.tar.gz到指定目录,如果是解压到当前目录,可以不用加-C
[root@Centos8 shell_scripy]# tar -tvf  etc.tar.gz 							#查看压缩包内容

# 比如你想打包/home这个目录,但是/home/afish/目录和/home/www/afish.php文件你都不想打包,方法是:
[root@Centos8 shell_scripy]# tar -zcvf home.tar.gz /home --exclude=/home/afish --exclude=/home/www/afish.php

十、vim 命令编辑文本文件

  • 打开并编辑文本文件
  • 共有三种模式:命令模式、输入模式、末行模式

1. 完整命令: "vim 文件路径"

vim + file: 从文件的末尾开始;
vim +num file: 从第num行开始

2. 简单介绍

命令模式: 在文件中进行 查找、删除、复制、粘贴 操作
输入模式: 就是正常的编辑文件
末行模式: 对文件的操作进行 保存、退出vim等

3. 三种模式之间的切换 

命令模式 --> 输入模式  # i、I、a、A、o、O、Insert 键
输入模式 --> 命令模式  # Esc 键
命令模式 --> 末行模式  # : 键
末行模式 --> 命令模式  # Esc 键

1. 命令模式

命令模式: # 实际上看不到输入的命令
默认处于命令模式,此模式下可以用方向键或者" h、j、k、l " 移动光标,还可以对文件进行复制、粘贴、替换、删除等操作

# 光标操作:
跳转到行首: Home 键、 "^"键、数字"0"
跳转到行尾: End 键、"$"键
跳转到文件的首行: "1G"、"gg"
跳转到文件的尾行: "G"
跳转到文件的第n行: "nG"  # n为数字
行号显示/不显示:   ":set nu"  ":set nonu"

# 文件内容操作
撤销:
	u 撤消
	U 撤消对一行的全部操作

删除: 
    删除光标处的单个字符: "x、X、Del"键 
    删除当前光标所在行: "dd"
    删除从光标处开始的 n 行内容  "ndd"  # n为数字
    删除从行首到光标的所有内容 "d^"
    删除从行尾到光标的所有内容 "d$"
复制:
    复制光标所在行的整行 "yy"
    复制从光标往上的 n 行内容 "nyy"  # n为数字
    
粘贴:
    粘贴到光标之后 "p"  # 小写
    粘贴到光标之前 "P"  # 大写
    
查找: # 能看到命令,
    n: 向后查找下一个
    N: 向前查找下一个
    * 向后搜索光标所在位置的一个word
	# 向前搜索光标所在位置的一个word
    查找字符串  "/word"  # 在后面的文本中查找"word"字符串
    查找字符串  "?word"  # 在前面的文本中查找"word"字符串

2. 末行模式

  • 主要是用来对文件进行保存、退出vim编辑器 等操作
1. 重新加载
:e  # 重新加载当前文档。
:e!  # 重新加载当前文档,并丢弃已做的改动
:e#或ctrl+^  # 回到刚才编辑的文件,很实用

2. 保存文件
:w
:w 文件路径  # 另存为其他文件,如 :w /root/new_file/test.txt ,另存为/root/new_file目录下的test.txt

3. 退出vim
:q  # 未修改任何内容的情况下,退出vim
:q!  # 放弃修改,退出vim

4. 保存文件并退出vim
:wq
:wq!  # 强制保存并退出
    
5. 修改文件格式为unix
:set fileformat=unix

十一、cat 命令

  • 查看详情

  • cat 命令 两种用法

    • 显示文件内容,打印到终端
    • 也可以把几个文件内容附加到另一个文件中,即连接合并文件
  • 基本使用:

    1. 查看文件内容(会把内容全部打印到终端)
    cat [选项] 文件路径  # 不论文件内容有多少,都会一次性显示。如果文件非常大,那么文件开头的内容就看不到了不过 Linux 可以使用 PgUp+上箭头 组合键向上翻页,但是这种翻页是有极限的,如果文件足够长,那么还是无法看全文件的内容
    
    参数说明:
    -A	相当于 -vET 选项的整合,用于列出所有隐藏符号;
    -E	列出每行结尾的回车符 $;
    -n	对输出的所有行进行编号;
    -b	同 -n 不同,此选项表示只对非空行进行编号。
    -T	把 Tab 键 ^I 显示出来;
    -V	列出特殊字符;
    -s	当遇到有连续 2 行以上的空白行时,就替换为 1 行的空白行。
    
    2. 查找文件中的内容
    cat a.txt |grep **  # ** 即是要查找的内容
    
    3. 利用cat 创建文件
    若原来没有文件:
    cat > b.txt <<EOF  
    >你要输入的内容...
    >EOF
    
    # 上面三行的意思是创建并打开一个 b.txt文件,并且以EOF为结束编辑并保存的结束语(也可以用自定义的结束语),中间输入自己要编辑的内容,最后输入EOF保存退出。
    
    4. 利用cat清空文件内容(实际就是利用cat的编辑模式,进行覆盖写,和python中的 w 模式相同)
    cat >c.txt<<EOF
    >EOF
    
    5. 像文件的尾部写入内容(追加写)
    命令与上面的覆盖写类似,只是把 > 换成 >> 即可
    cat >> b.txt <<EOF  
    
    6. cat 可以实现调用变量,对关键字$的转义
    如 不转义$
    cat >test.txt <<EOF
    >DATE=$(date + %Y%m%d)
    >mkdir /root/$DATE
    >EOF
    cat test.txt
    结果为:
    DATE=20220620
    mkdir /root/
    
    转义 $
    cat >test.txt <<EOF
    >DATE=$(date + %Y%m%d)
    >mkdir /root/\$DATE
    >EOF
    cat test.txt
    结果为:
    DATE=20220620
    mkdir /root/$DATE
    
    7. 合并文件的内容到一个新的文件中
    [root@localhost base]# ls
    
    file1.txt    file2.txt
    
    [root@localhost base]# cat file1.txt
    
    http://c.biancheng.net(file1.txt)
    
    [root@localhost base]# cat file2.txt
    
    is great(file2.txt)
    
    [root@localhost base]# cat file1.txt file2.txt > file3.txt
    
    [root@localhost base]# more file3.txt
    
    # more 命令也可查看文件中的内容
    
    http://c.biancheng.net(file1.txt)
    
    is great(file2.txt)
    
    [root@localhost base]# ls
    
    file1.txt    file2.txt    file3.txt
    
    

十二、后台执行程序

1. 后台执行

  • nohup 命令
    • 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行
    • 在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out 文件中
1. 完整命令:

" nohup Command [ Arg … ] [ & ] "

参数说明:
	Command:要执行的命令。

	Arg:一些参数,可以指定输出文件。

	&:让命令在后台执行,终端退出后命令仍旧执行。
	
2. 实例

nohup python /opt/project/test.py  &  # 以下命令在后台执行 /opt/project 目录下的 test.py 脚本,在终端如果看到以下输出说明运行成功 appending output to nohup.out

nohup /root/runoob.sh > runoob.log 2>&1 &

2>&1 解释:
	# 将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 runoob.log 文件中
    0 – stdin (standard input,标准输入)
	1 – stdout (standard output,标准输出)
	2 – stderr (standard error,标准错误输出)
    
3. 结束后台运行的程序
	- 可以用杀死进程的方法实现
    - 可以查看当前终端后台执行的任务,然后用 kill jobnum 命令来删除任务(这种不太推荐,终端断开或关闭之后,就差看不到之前的任务了)

ps -aux | grep "test.py" 
ps -aux | grep "runoob.sh" 

参数说明:
    a : 显示所有程序
    u : 以用户为主的格式来显示
    x : 显示所有程序,不区分终端机

找到进程号PID之后,可以用 kill PID 命令来删除
kill -9 进程号PID

2. 前、后台任务切换

  • 将后台执行的程序调到前台继续执行

    命令: fg
    将后台中的命令调至前台继续运行
    
    如果后台中有多个命令,可以先用jobs查看jobnun,然后用 fg jobnum 将选中的命令调出
    
    命令: Ctrl + z
    将一个正在前台执行的命令放到后台,并且处于暂停状态
    
    命令: bg
    将一个在后台暂停的命令,变成在后台继续执行
    
    如果后台中有多个命令,可以先用jobs查看jobnum,然后用 bg jobnum 将选中的命令调出继续执行
    

3. nohup.out 维护

  • nohup.out会一直增加内容,因此就有了不停止服务直接,清空nohup.out文件的方法。
    两个可以不用停止WEB服务就可以清空nohup.out的命令

    第一种:
    cp  /dev/null nohup.out
    
    第二种:
    cat /dev/null > nohup.out
    

十三、进程相关

1. ps 命令 查看进程

语法:ps [options]  # ps命令用于查看当前系统中正在运行的进程信息,通常和 grep 方法联合使用,查看指定的进程信息

options的参数:(这些参数可以根据需要进行组合使用)

-a:显示所有用户的进程,包括其他用户的进程。
-u:以用户为主的格式来显示进程信息。
-x:显示无控制终端的进程。
-e:显示所有进程,包括没有控制终端的进程。
-f:以树状结构来显示进程信息。
-r:显示正在运行的进程。
-h:不显示进程的标题行。
-o:自定义输出格式

常用格式:
ps -ef | grep 进程关键字
ps -aux”可以显示所有用户的进程信息,包括进程的PID、进程状态、CPU占用率、内存占用率等信息

2. kill 命令 杀死进程

语法:kill [options] 进程号 # kill 命令用于删除服务器上的进程

options的参数:

-9:强制终止进程,无论进程是否愿意终止。
-15:向进程发送终止信号,让进程正常终止

常用:
kill PID  # 杀死某进程
kill -9 PID  # 彻底杀死某进程

例1. 杀死指定用户的所有进程
kill -9 $(ps -ef | grep hsw_linux)  # 方法一 过滤出 hsw_linux 用户进程
kill -u hsw_linux  # 方法二

例2:杀死指定的进程
ps -ef|grep 程序文件名| awk '{print $2}'|xargs kill -9  # 杀死特定进程

十四、防火墙相关

请点击查看防火墙详情

十五、su 和 sudo

1. su介绍

  • su的全称是switch user,用来切换当前用户。su的一般使用方法是su 或者su -

    su是切换到root用户的命令,主要用法如下:
    su  # 不带参数直接输入su将切换到root用户,需要输入root密码
    su -  # 等同于 su -l,切换到root用户并加载root的环境变量(等同于root身份登录),加入了 - 或 -l 参数表示同时切换到该用户的环境
    su username  # 切换到其他用户,需要输入该用户的密码
    su -c ‘commond’  # 以root用户执行命令,类似于sudo,不同之处是需要输入root密码
    su命令主要是用来切换root身份,前提是需要知道root密码
    

2. sudo介绍

  • 全称为super user do,即以超级用户的方式执行命令,这里的超级用户指的就是root用户,我们在Linux中有时会遇到permission denied的情况,如以ubuntu用户的身份查看/etc/shadow的内容,因为它是只有root用户才能查看的,这个时候就可以使用sudo
  • 使用sudo su -,提供当前用户的密码,可以切换到root用户
  • 完整命令sudo '要执行的commond'

十六、用户管理

1. 查询用户

1. id 

id 命令用于显示当前用户的UID(用户ID)、GID(组ID)以及所属的附加组ID

2. id [用户名]

id [用户名] 命令用于显示指定用户的UID(用户ID)、GID(组ID)以及所属的附加组ID

3. 文件 /etc/passwd 里面保存用户信息

如:qpwang:x:666:666::/home/qpwang:/bin/bash
                        
按照:分割,共7栏
1:用户名 2:密码 3:用户ID 4:组ID 5:解释用户名信息 6:用户根目录 7:shell登陆指令


4. 文件 /etc/group 里面保存用户组信息

如:shadow:x:15:vnc
1组名 2密码 3组ID 4 支持的用户


5. 文件 /etc/shadow 保存密码信息

如:qpwang:$6$kOkq7NkJqCSjXlKZ$qbIoKaOUy41OnsV/R2ZwV9ymVIXHWQP69iJ6Vhemeu2eTRGQVhOCoi0vN3UQkW3lI1/Ek3oKCIz1quyNzCGIn.:18826:0:99999:7:::
                                
信息按照:分割,共9栏
1:用户名 2:密码,如果密码以*开头,则该用户无法登陆

3:上次密码修改期限 1970.1.1为0 每国一年加上天书

4:密码允许被修改的天书,0表示岁时可修改 

5:密码必须在多少天修改一次 99999表示不用修改

6:密码快过期时候,还剩几天开始警告

7:密码几天会失效

8:账户失效日期

9:保留字段

2. 添加用户

  • 注意:如果添加用户需要先添加组,如果删除组需要先删除用户
语法:useradd [option1] value1 [option2] value2 ...  # 该命令可以指定新用户的用户名、用户ID、所属组、家目录、登录Shell等信息

option的参数:

-c:指定用户的备注信息,没啥用,一般不写
-d:指定用户的家目录,一般不写,默认即可,默认即可
-e:指定用户账号的失效日期,没啥用,一般不写
-f:指定在密码过期后,账号仍旧可用的天数,没啥用,一般不写,默认即可
-g:指定用户所属的初始组
-m:自动创建用户的家目录
-s:指定用户的默认shell,一般不写,默认即可
-u:指定用户的UID,一般不写,默认即可

例如,以下命令将创建一个名为“test”的新用户,其用户ID为1001,所属组为“users”,家目录为“/home/test”,登录Shell为“/bin/bash”

useradd -u 1001 -g users -d /home/test -s /bin/bash test

注意:使用useradd命令只会创建一个新的用户账号,但不会设置该用户的密码。如果需要为该用户设置密码,可以使用passwd命令

3. 删除、禁用用户

1. 删除用户

userdel [用户名]

# 注意,这将永久删除该用户及其相关文件和目录

2. 禁用用户
语法:usermod --expiredate n [用户名]

如:usermod --expiredate 1 user1  # 这将在明天到来时禁用user1,但不会删除其帐户或文件

3. 删除用户组

groupdel [group_name]  # 需要先删除用户才能删除用户组

4. 修改用户密码

1. 更改当前用户的密码(系统会提示您输入当前用户的旧密码,然后要求您输入新密码两次以确认)
passwd  

2. 更改其他用户的密码(系统会提示您输入管理员密码,然后要求您输入新密码两次以确认)
sudo passwd <username>

3. 解锁用户密码(系统会解锁指定用户的密码,使其能够登录)
passwd -u <username>

4. 禁用用户密码(系统会禁用指定用户的密码,使其无法登录)
sudo passwd -l <username>

十七、权限相关

1. 关键字解释

通过ls -l 查看详细信息时,例如:
-rwxrwxrwx. 1 root root 181 3月 15 15:34 test.txt

从左往右:(r 为 读,w 为 写,x 为 可执行)

-  # 表示类型 -表示普通文件;d表示目录;l 表示软连接;b表示块特殊文件(b是block的第1个字符),一般指块设备,如硬盘;c表示字符特殊文件(c是character的第1个字符),一般指字符设备,如键盘
rwx  # 第一组rwx:当前用户权限,某个权限没有就显示 - 
rwx  # 第二组rwx:当前用户组权限,某个权限没有就显示 - 
rwx  # 第三组rwx:其他用户权限,某个权限没有就显示 - 

2. chmod 命令修改权限

  • 完整命令 chmod [options] mode 文件或目录名

  • 修改文件权限,共两种命令方式

    • 使用相加减表达权限,

    • 使用数字表达权限

    权限介绍:4=可读 2=可写 1=可执行
          7 7 7
          第一个7 是 文件所有者的权限
          第二个7 是 文件所属组的权限
          第三个7 是 其他用户的权限
          7 = 4+2+1 表示有可读可写可执行
          6 = 4+2 表示有可读可写权限
          5 = 4+1 表示有可读可执行
        
    [options]:
        -c  # 若该文件权限确实已经更改,才显示其更改动作
        -f  # 若该文件权限无法被更改也不要显示错误讯息
        -v  # 显示权限变更的详细资料
        -R  # 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
        
    mode :
    	u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。u用户 g组 o其它  a 所有用户(默认)
        
    	+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
        
    	r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行
    

2.1 chmod 实例

1. chmod u+x file  # 给file的属主增加执行权限
2. chmod 751 file  # 给file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限
3. chmod u=rwx,g=rx,o=x file  # 同 2 效果一样
4. chmod =r file  # 为所有用户分配读权限
5. chmod 444 file  # 同 4 效果一样
6. chmod a-wx,a+r file  # 同 4、5 效果一样
7. chmod -R u+r directory  # 递归地给directory目录下所有文件和子目录的属主分配读的权限
8. chmod 4755  # 设置用ID,给属主分配读、写和执行权限,给组和其他用户分配读、执行的权限。

3. 更改目录所有者(非 chmod命令

chown [-R] 所有者 文件或目录 # 不常用
chown [-R] 所有者:所属组 文件或目录

注意,在 chown 命令中,所有者和所属组中间也可以使用点(.),但会产生一个问题,如果用户在设定账号时加入了小数点(例如 zhangsan.temp),就会造成系统误判。因此,建议大家使用冒号连接所有者和所属组。

当然,chown 命令也支持单纯的修改文件或目录的所属组,例如 chown :group install.log 就表示修改 install.log 文件的所属组,但修改所属组通常使用 chgrp 命令,因此并不推荐大家使用 chown 命令。

另外需要注意的一点是,使用 chown 命令修改文件或目录的所有者(或所属者)时,要保证使用者用户(或用户组)存在,否则该命令无法正确执行,会提示 "invalid user" 或者 "invaild group"

示例:
chown -R kafka:kafka /jtdata  # 将jtdata目录和其中的子目录所属用户和组修改为kafka用户和kafka用户组

十八、wget 命令

1. wget介绍

  • 查看详情
  • wget命令是Linux系统用于从Web下载文件的命令行工具,支持 HTTP、HTTPS及FTP协议下载文件,而且wget还提供了很多选项,例如下载多个文件、后台下载,使用代理等等

2. wget用法

  • 完整命令 wget [options] [url]

  • curl 命令类似get请求,会把请求的内容打印到终端

    [options]: 常用参数,'注意大小写'
    	-O  # 以其他名称保存下载的文件
    	-P  # 将文件下载到指定目录
        -c  # 断点续传
        -nc  # 不要重复下载已存在的文件
        -b  # 在后台下载
        -i  # 下载多个文件
        -limit-rate  # 限制下载速度
        -U  # 设定模拟下载
        -t  # 增加重试次数
    实例:
    # 该命令会下载文件到当前工作目录中,在下载过程中,会显示进度条、文件大小、下载速度等
    wget https://download.redis.io/releases/redis-6.0.8.tar.gz
        
    wget -O redis.tar.gz https://download.redis.io/releases/redis-6.0.8.tar.gz    
    
    wget -P /usr/software https://download.redis.io/releases/redis-6.0.8.tar.gz
        
    wget -c https://download.redis.io/releases/redis-6.0.8.tar.gz   
        
    # 如果先要一次下载多个文件,首先需要创建一个文本文件,并将所有的url添加到该文件中,每个url都必须是单独的一行    
    vim download_list.txt
    wget -i download_list.txt
    
    # 下载速度限制为1m/s
    wget --limit-rate=1m https://download.redis.io/releases/redis-6.0.8.tar.gz
        
    # 如果远程服务器阻止wget下载资源,我们可以通过-U选项模拟浏览器进行下载,例如下面模拟谷歌浏览器下载    
    wget -U 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.43 Safari/537.36' https://download.redis.io/releases/redis-6.0.8.tar.gz  
    
    # 设置重试次数为40次    
    wget --t=40 https://download.redis.io/releases/redis-6.0.8.tar.gz  
        
    # 通过FTP下载如果要从受密码保护的FTP服务器下载文件,需要指定用户名和密码,格式如下    
    wget --ftp-user=<username> --ftp-password=<password> url 
    

十九、常用命令

1. find 命令

语法:find  目录 [options] [-print -exec -ok ...]  # 查询指定目录下的指定文件或目录

options的参数:(这些参数可以根据需要进行组合使用)

-name:按照文件名进行查找。
-type:按照文件类型进行查找,如f表示普通文件,d表示目录,l表示符号链接等。
-size:按照文件大小进行查找,如`-size +10M`表示查找大于10MB的文件。
-user:按照文件属主进行查找。

-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为 'command' {} \;  ,注意{}和 \;之间有一个空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行

- 其中options的参数的时间相关参数有以下几种:

-amin n:查找在 n 分钟内被访问过的文件。
-atime n:查找在 n*24 小时内被访问过的文件。
-cmin n:查找在 n 分钟内状态发生变化的文件(例如权限)。
-ctime n:查找在 n*24 小时内状态发生变化的文件(例如权限)。
-mmin n:查找在 n 分钟内被修改过的文件。
-mtime n:查找在 n*24 小时内被修改过的文件。
    - 在这些参数中,n 可以是一个正数、负数或零。
    - 有符号正数应该表示时间之前,负数表示时间之内,无符号正数表示指定的时间点

    例如:-mtime 0 表示查找今天修改过的文件,-mtime -7 表示查找一周以前修改过的文件。

        关于时间 n 参数的说明:

        +n:查找比 n 天前更早的文件或目录。

        -n:查找在 n 天内更改过属性的文件或目录。

        n:查找在 n 天前(指定那一天)更改过属性的文件或目录。

例:

find 目录 -type f  # 找出指定目录下的所有文件,-type 可以有多个
find 目录 -name "*.txt" 或 find 目录 -name \*.txt  # 找出指定目录下的txt文件,-name 可以有多个,注意转译 *
find 目录 -size +30M  # 找出指定目录下大于30M的文件,-size 可以有多个
find 目录 -size +10M -size -30M  # 找出指定目录下大于10M 小于30M 的文件
find 目录 -size +2M -type f -name "*.txt"

find /jtdata/test/ -type f -mtime +3 -exec rm -f {} \;  #  ; 不能省略 。表示删除/jtdata/test目录下修改时间为3天之前的文件
find /jtdata/test/ -type d ! -path /jtdata/test/ -exec rmdir {} \;  #  ; 不能省略 。表示删除/jtdata/test目录下不为 /jtdata/test 本身的空目录

2. du 命令

语法:du [options] 目录  # 查看指定目录的磁盘使用情况

options的参数:(这些参数可以根据需要进行组合使用)

-h:以人类可读的格式显示文件或目录的大小,K M G T
-s:仅显示总大小,不显示每个文件或目录的大小
-c:同时显示总大小和每个文件或目录的大小
-a:显示所有文件或目录的大小,包括隐藏文件或目录
-x:仅显示当前文件系统的大小,不包括挂载的其他文件系统的大小
--max-depth:限制显示文件或目录的深度,例如--max-depth=1表示仅显示当前目录下的文件或目录大小
-m	以MB为单位显示

3. df 命令

语法:df [options]  # df命令用于显示文件系统的磁盘空间使用情况

options的参数:(这些参数可以根据需要进行组合使用)

-h:以人类可读的方式显示磁盘空间使用情况,例如使用GB、MB等单位。
-T:显示文件系统类型。
-i:显示inode的使用情况。
-x:排除指定文件系统类型的磁盘空间使用情况。
-a:显示所有文件系统的磁盘空间使用情况,包括空的文件系统。
--total:显示所有文件系统磁盘空间使用情况的总和

3.1 fdisk 命令

# fdisk命令用于分区表管理

fdisk [选项] [设备]
	-b          指定磁盘的扇区大小(有效值是 512、1024、2048或4096)
	-c          兼容模式:“dos”或“nondos”(默认)
	-h          打印此帮助文本
    -s			显示分区大小,单位为块
    -l 			列出指定磁盘的分区表信息  # 最常用
 	-u          搭配-l使用,显示单位:“cylinders”(柱面)或“sectors”(扇区,默认)
	-v          打印程序版本
 	-C          指定柱面数
 	-H          指定磁头数
 	-S          指定每个磁道的扇区数

3.2 lsblk 命令

# lsblk命令主要用于展示块设备(block devices)的信息,包括磁盘、分区和挂载点等

lsblk [选项] [设备]  # 显示设备信息(不跟设备参数,显示所有设备信息)
    -a 或 --all:列出所有设备,包括空设备。
    -b 或 --bytes:以字节为单位显示设备大小。
    -d 或 --nodeps:不显示设备的依赖关系,即不显示分区信息。
    -e 或 --exclude:排除特定设备。
    -f 或 --fs:显示文件系统相关信息,如类型、标签、UUID等。
    -l 或 --list:以列表格式显示设备信息。
    -o 或 --output:自定义输出格式。
    -P 或 --pairs:以键值对形式显示设备信息,便于脚本处理。
    -r 或 --raw:以原始格式显示设备信息,便于脚本处理。
    -t 或 --topology:显示设备拓扑信息,如对齐、最小/最优IO大小等。(块设备中的树状图)
    
# 例子: 
lsblk -o NAME,SIZE,TYPE  # 显示设备的名称、大小和类型        

4. free 命令

语法:free [options]  # 用来查看系统的内存使用情况

options的参数:(这些参数可以根据需要进行组合使用)

-b:以字节为单位显示内存使用情况。
-k:以千字节为单位显示内存使用情况。
-m:以兆字节为单位显示内存使用情况。
-g:以吉字节为单位显示内存使用情况。
-s <秒数>:连续显示内存使用情况,每隔指定的秒数更新一次。
-t:在输出的最后一行显示总计内存使用情况。
-h:以人类可读的格式显示内存使用情况,例如使用KB、MB、GB等单位

例:
#要以兆字节为单位显示内存使用情况并每隔5秒更新一次
free -m -s 5

5. top 命令

语法:top [options]  # top命令是一个实时的系统监视器,它可以用来查看系统的各种性能指标

options的参数:(这些参数可以根据需要进行组合使用)

-d seconds:指定top命令的刷新间隔时间,单位为秒。
-n iterations:指定top命令的刷新次数。
-b:以批处理模式运行top命令。
-c:显示命令行和进程的完整路径。
-u username:只显示特定用户的进程。
-p pid:只显示特定进程ID的信息。
-H:显示进程的层次结构。
-i:不显示任何闲置或僵尸进程。
-S:累计各个进程的CPU使用时间。
-s field:根据特定的字段进行排序,如pid、cpu、mem等

6. history 命令

history  用于查看当前用户之前执行过的命令

1. 系统变量 HISTSIZE 用于记录history会保留最近多少条历史命令,可以在 /etc/profile 中永久修改HISTSIZE

2. 和!的联合使用

history

...
454  ls /jtdata/products/
455  ls /mydata/
456  ls /mydata/docker/
457  ls /mydata/docker/mysql/
458  ls /mydata/docker/mysql/data/
...

!454  表示 执行历史命令的第454行命令

7. export 命令

1. 介绍
export是一个命令,它用于将一个变量或函数设置为环境变量,以便在当前会话中的所有子进程中都可以访问。通过使用export命令,可以将变量或函数从当前bash传递到子bash中,以便它们在子bash中也可以使用

2. 用法
如果您想将一个名为MY_VAR的变量设置为环境变量,可以使用以下命令:

    (1)export MY_VAR=value
    
    (2)MY_VAR=value
    	export MY_VAR

修改网络代理:(ip:port为你要指定的代理ip和端口)

export http_proxy="http://ip:port"
export https_proxy="https://ip:port"

8. source 命令

1. 介绍
source 命令用于从当前shell会话中的文件读取和执行命令。source命令通常用于保留、更改当前shell中的环境变量。简而言之,source一个脚本,将会在当前shell中运行执行一遍该脚本中的命令

2. source命令的用途:

(1)刷新当前的shell环境
(2)在当前环境使用source执行Shell脚本
(3)从脚本中导入环境中一个Shell函数
(4)从另一个Shell脚本中读取变量

3. source命令的使用方法

source file [参数1 参数2 参数2 ...]

# source命令可以简写为"."
. file [参数1 参数2 参数2 ...]

9. echo 命令

echo是一个linux中的输出命令,常用的两个选项: -n 和 -e

语法:echo [options] ...

-n : 表示输出之后不换行,直接显示新行的提示符

 -e : 表示对于转义字符按对应的方式进行处理。使用-e选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出,若不加-e ,那么在输出时转义字符会按照普通字符进行处理
 
 转义字符    含义
\a       发出警告声
\b       删除前一个字符
\c       \c后面的字符将不再输出,同一时候,输出完毕后也不换行
\f       换页符,光标停在原来的位置
\n       换行且光标移至行首
\r       回车符
\t       水平制表符,也就是Tab键
\v       垂直制表符
\       插入\字符
\e       Esc键
\0nnn     按照八进制 ASCII 码表输出字符。其中 0 为数字 0,nnn 是三位八进制数
\xhh      按照十六进制 ASCH 码表输出字符。其中 hh 是两位十六进制数

二十、其他常用

1. 简单命令

1. id 命令用于显示当前用户的UID(用户ID)、GID(组ID)以及所属的附加组ID

它的使用方法非常简单,只需在终端中输入"id"命令即可

2. pwd 显示当前所在的目录全路径

3. clear  清屏

4. exit  退出当前bash

5. bash  开启新的子bash


# 下面介绍几种根据关键字查找其路径的命令:whereis、which、locate  它们都能带参数,但一般直接使用就足够了

6. whereis 关键字  可以搜索系统命令的可执行文件路径和帮助文档的位置

如:
[root@localhost ~]# whereis tomcat
tomcat:

[root@localhost ~]# whereis svn
svn: /usr/bin/svn /usr/local/svn /usr/share/man/man1/svn.1.gz

 
7. which 关键字   搜索系统命令的可执行文件的路径(如果这个命令有别名,则还可以找到别名命令)

如:
[root@localhost ~]# which pwd
/bin/pwd

[root@localhost ~]# which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
   /usr/bin/which

- 分析:其中一个是 alias 这就是所谓的『命令别名』,意思是输入 which 会等於后面接的那串命令    
    
8. locate 关键字  按照数据库所搜,搜索速度快,消耗资源小(是可以按照文件名搜索普通文件的命令)

8.1 如查找和pwd****相关的所有文件:
[root@localhost ~]# locate pwd

/bin/pwd

/etc/.pwd.lock

/sbin/unix_chkpwd

/usr/bin/pwdx

/usr/include/pwd.h

/usr/lib/python2.7/dist-packages/twisted/python/fakepwd.py

/usr/lib/python2.7/dist-packages/twisted/python/fakepwd.pyc

/usr/lib/python2.7/dist-packages/twisted/python/test/test_fakepwd.py

/usr/lib/python2.7/dist-packages/twisted/python/test/test_fakepwd.pyc

/usr/lib/syslinux/pwd.c32

/usr/share/help/C/empathy/irc-join-pwd.page

/usr/share/help/ca/empathy/irc-join-pwd.page

/usr/share/help/cs/empathy/irc-join-pwd.page

/usr/share/help/de/empathy/irc-join-pwd.page

/usr/share/help/el/empathy/irc-join-pwd.page

8.2 搜索etc目录下所有以sh开头的文件:
[root@localhost ~]# locate /etc/sh

/etc/shadow

/etc/shadow-

/etc/shells

2. 执行脚本文件

# 在linux里,source、sh、bash、./ 都可以执行shell script文件
# 有两种方式执行shell script文件,一种是新产生一个shell,然后执行相应的shell script文件;一种是在当前shell下执行,不再启用其他shell

1、source

source a.sh
# 在当前shell内去读取、执行a.sh,而a.sh不需要有"执行权限"

source命令可以简写为"."

. a.sh
# 注意:中间是有空格的

 
2、sh 、bash

sh a.sh
bash a.sh
# 都是打开一个sub-shell(新的子进程)去读取、执行a.sh,而a.sh不需要有"执行权限"
# 通常在sub-shell(新的子进程)里运行的脚本里设置变量,不会影响到父shell的

 
3、./

cd到.sh文件所在的目录,然后执行./xxx.sh  # 注意:前提是该xxx.sh文件要有可执行的权限

./a.sh  # 打开一个sub-shell(新的子进程)去读取、执行a.sh

添加执行权限的方法,如下:
(1)chmod u+x xxx.sh  # 给xxx.sh文件的属主增加执行权限
(2)chmod +x xxx.sh  # 给所有用户增加xxx.sh文件的执行权限


4、fork、source、exec的区别

使用fork方式运行script时, 就是让shell(parent process)产生一个child process去执行该script,child process从父进程那里获得一定的资源分配以及 继承父进程的环境 ,当child process结束后,会返回parent process,但parent process的环境是不会因child process的改变而改变的

使用source方式运行script时, 就是让script在当前process内执行, 而不是产生一个child process来执行。由于所有执行结果均于当前process内完成,若script的环境有所改变, 当然也会改变当前process环境了

使用exec方式运行script时, 它和source一样,也是让script在当前process内执行,但是process内的原代码剩下部分将被终止。同样,process内的环境随script改变而改变

3. 快捷键

TAB  命令补齐

上下键  查历史命令记录,查询范围受HISTSIZE大小影响

CTRL+d 退出当前bash,相当于输入exit,也可以用来退出python的交互、docker容器等
CTRL+c 中止、取消当前的操作
CTRL+l 清屏

CTRL+r 输入匹配
CTRL+A 返回到行首
CTRL+E 返回到行尾
CTRL+U 删除自光标到行首串
CTRL+K 删除自光标到行尾串
posted @ 2022-06-20 16:13  BigSun丶  阅读(232)  评论(0编辑  收藏  举报