帮助我们改善您的体验。

让我们了解您的想法。

您是否能抽出两分钟的时间完成一份问卷调查?

close
keyboard_arrow_left
Junos PyEZ 开发人员指南
Table of Contents Expand all
list Table of Contents
keyboard_arrow_right

机器翻译对您有帮助吗?

starstarstarstarstar
Go to English page
免责声明:

我们将使用第三方机器翻译软件翻译本页面。瞻博网络虽已做出相当大的努力提供高质量译文,但无法保证其准确性。如果对译文信息的准确性有任何疑问,请参阅英文版本. 可下载的 PDF 仅提供英文版.

使用 Junos PyEZ 执行文件系统操作

date_range 20-May-24

总结 使用 Junos PyEZ 管理文件和目录、计算校验和以及查看和清理 Junos 设备上的系统存储。

Junos PyEZ 应用程序可以使用该 jnpr.junos.utils.fs 实用程序在 Junos 设备上执行文件系统操作,包括:

  • 管理文件

  • 管理目录

  • 管理磁盘空间

本主题讨论如何使用该实用程序执行一些常见的文件系统操作。

执行文件操作

可以使用 jnpr.junos.utils.fs 实用程序执行常见的文件和目录操作。例如,您可以:

  • 查看文件和目录信息

  • 创建和删除目录

  • 查看、删除以及移动或复制文件

  • 计算文件的校验和

本节讨论一些常见操作。有关支持操作的完整列表,请参阅 jnpr.junos.utils.fs 文档。

查看文件列表

可以使用该方法 ls() 查看给定路径上的文件和目录列表。例如:

content_copy zoom_out_map
          
         
               
from jnpr.junos import Device
from jnpr.junos.utils.fs import FS
from pprint import pprint

with  Device(host='router1.example.net') as dev:
    fs = FS(dev)
    pprint (fs.ls(path='/var/db/scripts/commit'))
content_copy zoom_out_map
user@server:~$ python3 junos-pyez-file-ls.py 
{'file_count': 3,
 'files': {'filter_type_check.py': {'owner': 'root',
                                    'path': 'filter_type_check.py',
                                    'permissions': 771,
                                    'permissions_text': '-rwxrwx--x',
                                    'size': 30070,
                                    'ts_date': 'Oct 25 03:24',
                                    'ts_epoc': '1698229487',
                                    'type': 'file'},
           'services': {'owner': 'root',
                        'path': 'services',
                        'permissions': 771,
                        'permissions_text': 'drwxrwx--x',
                        'size': 4096,
                        'ts_date': 'Oct 25 03:25',
                        'ts_epoc': '1698229535',
                        'type': 'dir'},
           'services_evpn_commit_script.py': {'owner': 'root',
                                              'path': 'services_evpn_commit_script.py',
                                              'permissions': 771,
                                              'permissions_text': '-rwxrwx--x',
                                              'size': 698,
                                              'ts_date': 'Oct 25 03:25',
                                              'ts_epoc': '1698229535',
                                              'type': 'file'}},
 'path': '/var/db/scripts/commit',
 'size': 34864,
 'type': 'dir'}

管理文件

jnpr.junos.utils.fs 实用程序使您能够在目标设备上执行常见的文件操作。 表 1 概述了这些方法。方法名称与类 Unix 操作系统上的相应命令相同。

表 1:Junos PyEZ 文件操作方法

方法

描述

cat()

查看文件。

cp()

复制文件。

mv()

重命名文件。

rm()

删除文件。

以下 Junos PyEZ 应用程序连接到 Junos 设备,并使用 cat() 该方法查看文件的内容。如果该文件不存在,应用程序将 None打印 。

content_copy zoom_out_map
          
         
               
from jnpr.junos import Device
from jnpr.junos.utils.fs import FS

with  Device(host='router1.example.net') as dev:
    fs = FS(dev)
    filepath = '/var/db/scripts/commit/filter_type_check.py'
    print(fs.cat(path=filepath))

以下应用程序连接到 Junos 设备,并将文件从 /var/tmp 目录复制到 /var/db/scripts/op 目录。如果操作成功或False出现错误,应用程序将True打印。

content_copy zoom_out_map
          
         
               
from jnpr.junos import Device
from jnpr.junos.utils.fs import FS

src='/var/tmp/bgp-neighbors.slax'
dest='/var/db/scripts/op'

with  Device(host='router1.example.net') as dev:
    fs = FS(dev)
    print(fs.cp(from_path=src, to_path=dest))

从 Junos PyEZ 2.6.8 版开始,您可以为文件复制操作指定路由实例。 routing_instance 包括参数,并指定实例的名称。例如:

content_copy zoom_out_map
fs.cp(from_path=src, to_path=dest, routing_instance='mgmt_junos')

计算校验和

可以使用该方法 checksum() 计算文件的校验和。默认情况下, checksum() 计算 MD5 校验和。若要显式指定算法,请包含 calc 参数并指定以下值之一:

  • MD5

  • SHA256

  • SHA1

以下 Junos PyEZ 应用程序连接到 Junos 设备,使用该方法验证 cat() 文件是否存在,如果文件存在,则计算 SHA256 校验和:

content_copy zoom_out_map
          
         
               
from jnpr.junos import Device
from jnpr.junos.utils.fs import FS

with  Device(host='router1.example.net') as dev:
    fs = FS(dev)

    # if file exists, calculate checksum
    filepath = '/var/db/scripts/commit/filter_type_check.py'
    if fs.cat(path=filepath) is not None:
        print(fs.checksum(path=filepath, calc='sha256'))
    else:
        print('File not found.')
content_copy zoom_out_map
user@server:~$ python3 junos-pyez-file-checksum.py
d5e28ddde10a38b247d491b524b59c022297b01a9d3a00b83b11be5eb7b81be3

管理文件系统存储

您可以使用 jnpr.junos.utils.fs 实用程序来管理文件系统存储,如以下各节所述。

查看文件系统磁盘空间使用情况

您可以使用该方法 storage_usage() 返回有关文件系统的已用空间和可用空间的信息。该方法返回命令的 show system storage 输出。该信息类似于 Unix df 命令输出。

以下 Junos PyEZ 应用程序检索并打印所连接设备的磁盘空间使用情况:

content_copy zoom_out_map
          
         
               
from jnpr.junos import Device
from jnpr.junos.utils.fs import FS
from pprint import pprint

with  Device(host='router1.example.net') as dev:
    fs = FS(dev)
    pprint(fs.storage_usage())
content_copy zoom_out_map
user@server:~$ python3 junos-pyez-storage-usage.py
{'/dev/ada1p2': {'avail': '406M',
                 'avail_block': 831176,
                 'mount': '/.mount/var/log',
                 'total': '475M',
                 'total_blocks': 973368,
                 'used': '31M',
                 'used_blocks': 64328,
                 'used_pct': '7'},
 '/dev/ada1p3': {'avail': '833M',
                 'avail_block': 1705144,
                 'mount': '/.mount/var/tmp',
                 'total': '2.7G',
                 'total_blocks': 5586168,
                 'used': '1.6G',
                 'used_blocks': 3434136,
                 'used_pct': '67'},
 '/dev/gpt/junos': {'avail': '4.3G',
                    'avail_block': 8989740,
                    'mount': '/.mount',
                    'total': '6.0G',
                    'total_blocks': 12540924,
                    'used': '1.2G',
                    'used_blocks': 2547912,
                    'used_pct': '22'},
...
}

查看目录使用情况

可以使用该方法 directory_usage() 查看给定目录及其子目录的磁盘空间使用情况(可选)。此方法在设备上执行 show system directory-usage path 命令并返回信息。如果未指定深度,Junos PyEZ 将使用默认深度零。该信息类似于 Unix du 命令返回的统计信息。

以下 Junos PyEZ 应用程序打印目录的 /var/tmp 磁盘空间使用情况。

content_copy zoom_out_map
          
         
               
from jnpr.junos import Device
from jnpr.junos.utils.fs import FS

with  Device(host='router1.example.net') as dev:
    fs = FS(dev)
    print(fs.directory_usage(path='/var/tmp/'))
content_copy zoom_out_map
user@server:~$ python3 junos-pyez-directory-usage.py
{'/var/tmp/': {'size': '16K', 'blocks': 32, 'bytes': 16384}}

清理系统存储

您可以使用该方法 storage_cleanup() 释放 Junos 设备上的磁盘空间。该方法执行该 request system storage cleanup 命令,该命令将轮换日志文件并删除临时文件。

若要仅查看将在清理操作中删除的文件列表,请改用 storage_cleanup_check() 该方法。此方法在设备上执行 request system storage cleanup dry-run 命令,并返回候选文件列表而不删除它们。

以下 Junos PyEZ 应用程序首先执行该 storage_cleanup_check 操作并打印建议删除的文件列表。然后,应用程序查询用户是否要继续存储清理并删除文件。如果用户确认清理操作,应用程序将 storage_cleanup() 执行删除文件的操作,然后打印已删除文件的列表。

content_copy zoom_out_map
          
         
               
from jnpr.junos.utils.fs import FS
from pprint import pprint

with  Device(host='router1.example.net') as dev:
    fs = FS(dev)
    print('\n*** Cleanup Check - files to delete ***\n')
    pprint(fs.storage_cleanup_check())

    cleanup = input('\nProceed with storage cleanup '
                    'and delete these files [yes,no] (no) ? ').lower()
    if cleanup in ['yes', 'y']:
        print('Cleaning up storage.')
        files = fs.storage_cleanup()
        pprint(files)
    elif cleanup in ['no', 'n', '']:
        print('Cleanup operation canceled.')
    else:
        print('Please enter a valid response.')
content_copy zoom_out_map
user@server:~$ python3 junos-pyez-storage-cleanup.py 

*** Cleanup Check - files to delete ***

{'/var/log/ifstraced.0.gz': {'size': 8474516, 'ts_date': 'Feb  7 09:12'},
 '/var/log/ifstraced.1.gz': {'size': 8464409, 'ts_date': 'Feb  6 19:17'},
 '/var/log/ifstraced.2.gz': {'size': 8476558, 'ts_date': 'Feb  6 05:19'},
 '/var/log/ifstraced.3.gz': {'size': 8477741, 'ts_date': 'Feb  5 15:20'},
 '/var/log/license.0.gz': {'size': 27591, 'ts_date': 'Feb  7 17:03'},
 '/var/log/license.1.gz': {'size': 27802, 'ts_date': 'Feb  7 15:11'},
 '/var/log/messages.0.gz': {'size': 189, 'ts_date': 'Feb  7 17:53'},
 '/var/log/messages.1.gz': {'size': 173, 'ts_date': 'Feb  7 17:52'},
 '/var/log/messages.2.gz': {'size': 128, 'ts_date': 'Feb  7 17:52'},
 '/var/log/messages.3.gz': {'size': 190, 'ts_date': 'Feb  7 17:52'},
 '/var/log/messages.4.gz': {'size': 173, 'ts_date': 'Feb  7 17:48'},
 '/var/log/security.0.gz': {'size': 499, 'ts_date': 'Feb  7 17:53'},
 '/var/log/security.1.gz': {'size': 358, 'ts_date': 'Feb  7 17:52'},
 '/var/log/security.2.gz': {'size': 305, 'ts_date': 'Feb  7 17:52'},
 '/var/log/security.3.gz': {'size': 536, 'ts_date': 'Feb  7 17:52'},
 '/var/log/wtmp.0.gz': {'size': 27, 'ts_date': 'Feb  7 17:52'},
 '/var/log/wtmp.1.gz': {'size': 27, 'ts_date': 'Feb  7 17:52'},
 '/var/tmp/LOCK_FILE': {'size': 0, 'ts_date': 'Jan  2 11:08'},
 '/var/tmp/appidd_cust_app_trace': {'size': 0, 'ts_date': 'Jan  2 11:08'},
 '/var/tmp/appidd_trace_debug': {'size': 198, 'ts_date': 'Jan  2 11:08'},
 '/var/tmp/krt_rpf_filter.txt': {'size': 57, 'ts_date': 'Jan  2 11:08'},
 '/var/tmp/netproxy': {'size': 0, 'ts_date': 'Jan  2 11:11'},
 '/var/tmp/pfe_debug_commands': {'size': 111, 'ts_date': 'Jan  2 11:08'},
 '/var/tmp/planeDb.log': {'size': 524, 'ts_date': 'Jan  2 11:08'},
 '/var/tmp/rtsdb/if-rtsdb': {'size': 0, 'ts_date': 'Jan  2 11:08'}}

Proceed with storage cleanup and delete these files [yes,no] (no) ? yes
Cleaning up storage.
{'/var/log/ifstraced.0.gz': {'size': 8474516, 'ts_date': 'Feb  7 09:12'},
 '/var/log/ifstraced.1.gz': {'size': 8464409, 'ts_date': 'Feb  6 19:17'},
 '/var/log/ifstraced.2.gz': {'size': 8476558, 'ts_date': 'Feb  6 05:19'},
 '/var/log/ifstraced.3.gz': {'size': 8477741, 'ts_date': 'Feb  5 15:20'},
 '/var/log/license.0.gz': {'size': 27591, 'ts_date': 'Feb  7 17:03'},
 '/var/log/license.1.gz': {'size': 27802, 'ts_date': 'Feb  7 15:11'},
 '/var/log/messages.0.gz': {'size': 130, 'ts_date': 'Feb  7 17:54'},
 '/var/log/messages.1.gz': {'size': 189, 'ts_date': 'Feb  7 17:53'},
 '/var/log/messages.2.gz': {'size': 173, 'ts_date': 'Feb  7 17:52'},
 '/var/log/messages.3.gz': {'size': 128, 'ts_date': 'Feb  7 17:52'},
 '/var/log/messages.4.gz': {'size': 190, 'ts_date': 'Feb  7 17:52'},
 '/var/log/security.1.gz': {'size': 499, 'ts_date': 'Feb  7 17:53'},
 '/var/log/security.2.gz': {'size': 358, 'ts_date': 'Feb  7 17:52'},
 '/var/log/security.3.gz': {'size': 305, 'ts_date': 'Feb  7 17:52'},
 '/var/log/wtmp.0.gz': {'size': 27, 'ts_date': 'Feb  7 17:53'},
 '/var/log/wtmp.1.gz': {'size': 27, 'ts_date': 'Feb  7 17:52'},
 '/var/tmp/LOCK_FILE': {'size': 0, 'ts_date': 'Jan  2 11:08'},
 '/var/tmp/appidd_cust_app_trace': {'size': 0, 'ts_date': 'Jan  2 11:08'},
 '/var/tmp/appidd_trace_debug': {'size': 198, 'ts_date': 'Jan  2 11:08'},
 '/var/tmp/krt_rpf_filter.txt': {'size': 57, 'ts_date': 'Jan  2 11:08'},
 '/var/tmp/netproxy': {'size': 0, 'ts_date': 'Jan  2 11:11'},
 '/var/tmp/pfe_debug_commands': {'size': 111, 'ts_date': 'Jan  2 11:08'},
 '/var/tmp/planeDb.log': {'size': 524, 'ts_date': 'Jan  2 11:08'},
 '/var/tmp/rtsdb/if-rtsdb': {'size': 0, 'ts_date': 'Jan  2 11:08'}}
external-footer-nav