一、域名解析命令
域名解析是将域名与IP地址进行映射的过程,它使得用户可以通过简单易记的域名访问到具体的网站或服务器。域名解析命令是控制域名解析的关键工具,它可以帮助网站管理员、开发人员和系统管理员轻松管理域名解析。
常用的域名解析命令
下面是一些常用的在命令行中使用的域名解析命令:
- nslookup:用于查询域名的IP地址、域名服务器等相关信息。
- dig:是一个功能强大的域名解析工具,可以提供更详细的解析结果。
- host:用于查询域名的IP地址。
- ping:用于测试网络连通性,也可用来查询域名的IP地址。
nslookup命令
nslookup命令是一个非常实用的域名解析命令,它可以通过域名查询对应的IP地址、域名服务器、域名的别名等信息。
nslookup的基本语法是:
nslookup [选项] [主机名] [域名服务器]
其中,选项包括:
- -query=类型:指定查询的类型,如A记录、NS记录等。
- -debug:显示调试信息。
- -type=类型:指定查询的类型,与-query选项相同。
例如,要查询百度的IP地址,可以执行以下命令:
nslookup www.baidu.com
执行上述命令后,nslookup会返回www.baidu.com的IP地址、域名服务器等相关信息。
dig命令
dig是一个功能强大的域名解析工具,可以提供更详细的解析结果,并支持更多的查询选项。
dig命令的基本语法是:
dig [选项] [主机名] [查询类型]
其中,选项包括:
- +trace:显示查询过程中的详细信息。
- +short:只显示简要的查询结果。
- +answer:只显示回答部分。
例如,要查询GitHub的IP地址,可以执行以下命令:
dig github.com
执行上述命令后,dig会返回github.com的IP地址、域名服务器等详细信息。
host命令
host命令是另一个常用的域名解析命令,它主要用于查询域名的IP地址。
host命令的基本语法是:
host [选项] [域名]
其中,选项包括:
- -t:指定查询的类型,如A记录、MX记录等。
- -a:显示详细的查询结果。
- -v:显示详细的调试信息。
例如,要查询Google的IP地址,可以执行以下命令:
host -t A google.com
执行上述命令后,host会返回google.com的IP地址。
ping命令
ping命令通常用于测试网络连通性,但也可以用来查询域名的IP地址。
ping命令的基本语法是:
ping [选项] [域名]
其中,选项包括:
- -c:指定发送的ping包数量。
- -t:设置ping的超时时间。
- -v:显示详细的查询结果。
例如,要查询Microsoft的IP地址,可以执行以下命令:
ping -c 1 microsoft.com
执行上述命令后,ping会发送一个ping包给microsoft.com,并返回该域名的IP地址。
总结
通过使用这些常用的域名解析命令,我们可以轻松地获取域名的IP地址、域名服务器等相关信息,有助于网站管理员、开发人员和系统管理员更好地管理和配置域名解析。
二、关闭dns域名解析命令?
关闭DNS域名解析命令因操作系统和网络服务而异。以下是一些可能适用于您的命令:
- Linux:systemctl stop systemd-resolved.service或dnsmasq.service
- Windows:打开命令提示符,输入“netsh winsock reset”并按回车键,然后输入“netsh int ip reset”并按回车键
三、测试域名解析命令
测试域名解析命令
在网络世界中,域名解析是一项必不可少的工作。它将域名转换为与之相关联的IP地址,使得用户可以通过域名访问特定的网站。域名解析命令是进行域名解析的关键工具之一。在本篇文章中,我们将讨论常用的域名解析命令,并提供相应的示例。
1. Dig命令
Dig命令在Linux和Unix系统中被广泛使用,它是一款强大的域名解析工具。使用Dig命令可以获取域名的相关信息,包括域名的NS、A、CNAME等记录。
以下是一些常用的Dig命令示例:
dig www.example.com
这个命令将显示域名www.example.com的相关信息,包括它的IP地址、TTL值等。
dig @ns1.example.com www.example.com
这个命令将通过DNS服务器ns1.example.com查询域名www.example.com的相关信息。
2. Nslookup命令
Nslookup命令是另一个常用的域名解析工具,它可以用于查询域名的IP地址、CNAME等记录。
以下是一些常用的Nslookup命令示例:
nslookup www.example.com
这个命令将显示域名www.example.com的IP地址。
nslookup -type=MX example.com
这个命令将显示域名example.com的MX记录,即与该域名相关的邮件服务器。
3. Host命令
Host命令是一款用于查询域名解析的简单实用工具。它可以获取域名的IP地址以及与之相关的记录。
以下是一些常用的Host命令示例:
host www.example.com
这个命令将显示域名www.example.com的IP地址。
host -t NS example.com
这个命令将显示域名example.com的NS记录,即与该域名相关的域名服务器。
4. Traceroute命令
Traceroute命令可以用于追踪数据包在网络中的传输路径。它可以帮助我们了解数据包在传输过程中经过的路由节点。
以下是一些常用的Traceroute命令示例:
traceroute www.example.com
这个命令将显示到达域名www.example.com所经过的路由节点。
traceroute -p 80 www.example.com
这个命令将显示到达域名www.example.com在80端口上所经过的路由节点。
以上介绍了一些常见的域名解析命令及其示例。了解这些命令,可以帮助我们更轻松地进行域名解析工作,从而更好地管理和维护我们的网络。
四、linux 域名解析 命令
欢迎阅读本篇关于Linux中域名解析命令的博客文章。随着互联网的快速发展,域名解析成为了现代计算机网络的重要组成部分。在本文中,我将向您介绍一些基本的Linux命令,以帮助您在系统中进行域名解析。
1. Ping命令
Ping命令是检查网络是否连通的最常用命令之一。通过向特定的域名或IP地址发送Internet控制消息协议(ICMP)回显请求,它能够判断网络是否能够实现通信。在Linux中,您可以使用以下命令执行ping操作:
$ ping 域名或IP地址
该命令将向指定的域名或IP地址发送数据包,并显示包含源地址、目标地址以及往返时间(RTT)等信息的响应结果。
2. Dig命令
Dig命令是一个非常强大的工具,常用于DNS(域名系统)查询。它能够通过查询域名服务器来获取域名的相关信息。以下命令演示了如何使用dig命令进行域名解析:
$ dig 域名
执行这个命令后,您将看到包含域名的详细信息,包括NS记录、A记录、CNAME记录等。它还可以显示域名的TTL(生存时间)和解析到的IP地址。
3. Host命令
Host命令是另一个用于域名解析的常用工具。它提供了对域名进行IP地址解析的功能。以下是host命令的使用示例:
$ host 域名
host命令将列出被指定域名解析到的IP地址。
4. Nslookup命令
Nslookup命令是一个用于查询域名系统(DNS)的实用工具。它能够查询域名服务器以获取IP地址和其他相关信息。您可以使用以下命令来执行nslookup操作:
$ nslookup 域名
nslookup命令将返回与特定域名相关联的详细信息,包括IP地址、域名服务器等。
5. Nmap命令
Nmap命令是一种常用的网络扫描工具,可用于识别网络上的存活主机。虽然它不仅限于域名解析,但也可以用于查找域名解析的相关信息。以下是使用nmap命令进行网络扫描的示例:
$ nmap -sn IP地址/子网掩码
此命令将扫描指定IP地址范围内的主机,并显示其相关信息,包括域名解析结果。
结论
通过了解并使用Linux中的这些常见域名解析命令,您可以更好地管理和故障排除网络问题。无论是检查网络连通性还是查询DNS记录,这些命令都能提供有用的信息,帮助您更好地了解和解决相关问题。
希望本文对您在Linux中使用域名解析命令有所帮助。如果您有任何疑问,请随时在下方评论区留言。
五、反向域名解析命令
反向域名解析命令:简化网络地址查询的利器
反向域名解析(Reverse DNS Lookup),也被称为逆向域名解析、PTR查询,是一种在互联网中获取特定IP地址所对应域名的方法。通过反向域名解析命令,我们可以轻松地将IP地址转换为对应的域名,使网络地址查询变得更加便捷,提高了网络管理和维护的效率。
反向域名解析命令的作用
在日常的网络管理中,我们经常需要确定一个特定IP地址的对应域名。这种情况下,反向域名解析命令就发挥了巨大的作用。通过执行反向域名解析命令,我们可以快速地获取到一个IP地址所对应的域名,方便我们进行网络故障排查、安全防护、访问控制等操作。
常用的反向域名解析命令
以下是一些常用的反向域名解析命令:
- nslookup:nslookup命令是一个非常强大的网络工具,通过它我们可以进行多种类型的DNS查询,包括反向域名解析。使用命令
nslookup IP地址
,即可获取对应的域名信息。 - host:host命令也是一种常用的反向域名解析工具。通过命令
host IP地址
,我们可以获得IP地址所对应的域名和其他相关信息。 - dig:dig命令是Linux和Unix系统中一个非常强大的域名查询工具。可以通过命令
dig -x IP地址
来进行反向域名解析。 - ping:ping命令通常用于测试网络连接和测量网络延迟,但也可以用来进行反向域名解析。使用命令
ping -a IP地址
,我们可以获取到IP地址的对应域名信息。
反向域名解析的应用场景
反向域名解析在网络管理和维护中有广泛的应用场景。
1. 网络故障排查
当网络中发生故障时,我们经常需要快速定位问题的源头。通过反向域名解析命令,我们可以迅速地确定特定IP地址的对应域名,进而判断故障发生的位置。这对于网络工程师来说,是一项非常重要的技能。
2. 安全防护
在进行网络安全防护时,我们经常需要对恶意IP地址进行封锁或限制访问。通过反向域名解析命令,我们可以快速获取到特定IP地址所对应的域名,从而更好地进行安全策略的制定和实施。
3. 访问控制
在企业网络中,访问控制是一项必不可少的任务。通过反向域名解析命令,我们可以方便地对访问企图进行过滤和控制。通过限制或允许特定IP地址所对应的域名访问,可以提高网络的安全性和可控性。
4. 运维管理
在大型网络中,进行运维管理是一个挑战性的任务。反向域名解析命令的应用使得网络运维工作更加高效。通过获取特定IP地址的域名,我们可以对网络设备和服务进行准确的标识和管理。
总结
反向域名解析命令是网络管理和维护中不可或缺的工具之一。通过反向域名解析,我们可以快速地将IP地址转换为对应的域名,方便进行网络故障排查、安全防护、访问控制等操作。在日常的网络管理工作中,我们应该熟练掌握常用的反向域名解析命令,并善于应用于实际工作中。
六、linux域名解析命令
在Linux环境中,域名解析是非常重要的功能之一。域名解析命令可以帮助我们将域名转换为IP地址,从而实现对网络资源的访问。本文将详细介绍Linux环境下常用的域名解析命令,帮助读者更好地理解和应用这些命令。
1. host命令
host命令是Linux环境下常用的域名解析命令之一。通过host命令,我们可以查询指定域名对应的IP地址。
使用host命令非常简单,只需在命令行中输入host [域名]
即可。下面是一个示例:
host example.com
运行上述命令后,会返回该域名对应的IP地址。
2. dig命令
dig命令是Linux环境下非常强大的域名解析命令,提供了更多高级的功能和选项。
使用dig命令可以查询域名的多种信息,包括域名对应的IP地址、DNS记录的详细信息等。
下面是dig命令的基本用法:
dig [选项] [域名]
其中,选项可以根据需求进行调整,常用的选项包括:
- -t: 指定查询的记录类型,例如A记录、MX记录等。
- @: 指定查询的DNS服务器地址。
下面是一个示例:
dig -t A example.com
上述命令会查询example.com域名对应的A记录。
3. nslookup命令
nslookup命令是Linux环境下常用的网络工具之一,也可以用于域名解析。
使用nslookup命令可以查询指定域名对应的IP地址、DNS记录等信息。
nslookup命令的基本用法如下:
nslookup [域名] [DNS服务器]
其中,域名是要查询的域名,DNS服务器是可选参数,用于指定查询的DNS服务器地址。
下面是一个示例:
nslookup example.com
上述命令会查询example.com域名对应的IP地址。
4. whois命令
whois命令可以查询域名的注册信息,包括域名所有者、注册商、注册日期等。
使用whois命令非常简单,只需在命令行中输入whois [域名]
即可。
下面是一个示例:
whois example.com
上述命令会查询example.com域名的注册信息。
5. ip命令
ip命令是Linux环境下常用的网络工具之一,也可以用于域名解析。
通过ip命令,我们可以查询指定域名对应的IP地址。
ip命令的基本用法如下:
ip [地址]
其中,地址可以是域名或IP地址。
下面是一个示例:
ip example.com
上述命令会查询example.com域名对应的IP地址。
总结
本文介绍了Linux环境下常用的域名解析命令,包括host、dig、nslookup、whois和ip命令。通过这些命令,我们可以方便地查询域名对应的IP地址、DNS记录等信息,帮助我们更好地管理和维护网络资源。
希望本文对读者有所帮助,如果有任何问题或建议,请随时留言。
七、linux 域名解析命令
Linux域名解析命令:深入了解网络地址转换
在今天的数码时代,互联网已经成为人们生活中不可或缺的一部分。作为互联网的基础,域名解析是一个广为人知却又不太为人所熟知的技术。在Linux系统中,我们可以使用一些强大的命令来了解和操作域名解析。
本文将着重介绍一些在Linux系统中经常使用的域名解析命令,同时,我们将探讨如何使用这些命令来深入了解网络地址转换方面的知识。
1. nslookup:查找域名解析的详细信息
nslookup是Linux中一个非常强大的用于查找域名解析的命令行工具。它可以帮助我们查找特定域名的IP地址,以及域名服务器的详细信息。
要使用nslookup命令,只需在终端中输入以下命令:
nslookup domain_name
这里的domain_name是你要查询的域名。例如,如果我们想要查找www.example.com的IP地址,我们可以运行:
nslookup www.example.com
nslookup会返回包含该域名的IP地址和其他相关信息的结果。
2. dig:更详细地了解域名解析
dig(Domain Information Groper)是另一个用于查询域名解析信息的强大命令。与nslookup不同,dig提供了更详细和灵活的数据。我们可以使用dig来获取域名的各种信息。
要使用dig命令,我们可以在终端中键入以下命令:
dig domain_name
在这里,domain_name是您要查询的域名。例如,如果我们要获取example.com的MX记录,我们可以运行:
dig MX example.com
这将返回包含example.com MX记录的详细信息。
3. host:查找域名的IP地址
host命令是另一个在Linux系统中常用的域名解析命令。所不同的是,host命令仅返回与特定域名关联的IP地址。
要使用host命令,请在终端中键入以下命令:
host domain_name
在这里,domain_name是您要查询的域名。例如,如果我们要查找example.com的IP地址,我们可以运行:
host example.com
host命令将返回与该域名关联的IP地址。
4. whois:查找域名的注册信息
whois命令是用于查询域名注册信息的常用命令行工具。它可以帮助我们查找指定域名的注册商、注册日期、过期日期等详细信息。
要使用whois命令,请在终端中键入以下命令:
whois domain_name
在这里,domain_name是您要查询的域名。例如,如果我们要查找example.com的注册信息,我们可以运行:
whois example.com
whois命令将返回包含该域名注册信息的结果。
结论
通过使用Linux系统中的这些强大的域名解析命令,我们可以深入了解网络地址转换,并获得与域名相关的详细信息。无论您是一名系统管理员、网络工程师还是对互联网感兴趣的普通用户,这些命令都会对您的工作或学习起到重要作用。
域名解析是构建互联网基础的重要组成部分,了解如何操作和理解域名解析是非常有价值的。希望通过本文的介绍,能使读者对Linux系统中的域名解析命令有所了解,从而在日常工作中更加得心应手。
八、cisco关闭dns域名解析命令?
cisco关闭dns域名解析的命令是:
no ip domain-lookup
这个命令将禁用路由器在命令行中解释主机名或域名,从而避免了不必要的网络延迟和安全风险。
九、Linux 创建文件命令是如何实现的?
Linux 创建文件命令,也就是touch命令呗~
此命令系统自带,官方提供源文件,请下载官方utilities,查看其源代码,如下:
Coreutils - GNU core utilities
源代码可以分为以下几个主要步骤:
- 初始化和解析命令行参数:
使用getopt_long函数解析命令行参数,识别各种选项(如-a,-c,-d,-h,-m,-r,-t等)并设置相应的变量。
- 遍历文件列表并更新时间戳:
对于命令行参数中指定的每个文件,执行以下操作:
a. 尝试打开文件,如果需要创建文件(没有指定-c选项),则创建一个空文件。
b. 根据前面的设置,更新文件的访问和修改时间戳。如果指定了-h选项并且文件是符号链接,那么会更新符号链接本身的时间戳。
c. 关闭文件并记录操作结果。
- 基于所有文件的操作结果返回退出状态:
如果所有文件的时间戳都已成功更新,则返回成功退出状态(EXIT_SUCCESS);否则,返回错误退出状态(EXIT_FAILURE)。
C实现如下:
#include <config.h>
#include <stdio.h>
#include <getopt.h>
#include <sys/types.h>
#include <assert.h>
#include "system.h"
#include "argmatch.h"
#include "error.h"
#include "fd-reopen.h"
#include "parse-datetime.h"
#include "posixtm.h"
#include "posixver.h"
#include "quote.h"
#include "stat-time.h"
#include "utimens.h"
/* The official name of this program (e.g., no `g' prefix). */
#define PROGRAM_NAME "touch"
#define AUTHORS \
proper_name ("Paul Rubin"), \
proper_name ("Arnold Robbins"), \
proper_name ("Jim Kingdon"), \
proper_name ("David MacKenzie"), \
proper_name ("Randy Smith")
/* Bitmasks for `change_times'. */
#define CH_ATIME 1
#define CH_MTIME 2
/* Which timestamps to change. */
static int change_times;
/* (-c) If true, don't create if not already there. */
static bool no_create;
/* (-r) If true, use times from a reference file. */
static bool use_ref;
/* (-h) If true, change the times of an existing symlink, if possible. */
static bool no_dereference;
/* If true, the only thing we have to do is change both the
modification and access time to the current time, so we don't
have to own the file, just be able to read and write it.
On some systems, we can do this if we own the file, even though
we have neither read nor write access to it. */
static bool amtime_now;
/* New access and modification times to use when setting time. */
static struct timespec newtime[2];
/* File to use for -r. */
static char *ref_file;
/* For long options that have no equivalent short option, use a
non-character as a pseudo short option, starting with CHAR_MAX + 1. */
enum
{
TIME_OPTION = CHAR_MAX + 1
};
static struct option const longopts[] =
{
{"time", required_argument, NULL, TIME_OPTION},
{"no-create", no_argument, NULL, 'c'},
{"date", required_argument, NULL, 'd'},
{"reference", required_argument, NULL, 'r'},
{"no-dereference", no_argument, NULL, 'h'},
{GETOPT_HELP_OPTION_DECL},
{GETOPT_VERSION_OPTION_DECL},
{NULL, 0, NULL, 0}
};
/* Valid arguments to the `--time' option. */
static char const* const time_args[] =
{
"atime", "access", "use", "mtime", "modify", NULL
};
/* The bits in `change_times' that those arguments set. */
static int const time_masks[] =
{
CH_ATIME, CH_ATIME, CH_ATIME, CH_MTIME, CH_MTIME
};
/* Store into *RESULT the result of interpreting FLEX_DATE as a date,
relative to NOW. If NOW is null, use the current time. */
static void
get_reldate (struct timespec *result,
char const *flex_date, struct timespec const *now)
{
if (! parse_datetime (result, flex_date, now))
error (EXIT_FAILURE, 0, _("invalid date format %s"), quote (flex_date));
}
/* Update the time of file FILE according to the options given.
Return true if successful. */
static bool
touch (const char *file)
{
bool ok;
int fd = -1;
int open_errno = 0;
struct timespec const *t = newtime;
if (STREQ (file, "-"))
fd = STDOUT_FILENO;
else if (! (no_create || no_dereference))
{
/* Try to open FILE, creating it if necessary. */
int default_permissions =
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
fd = fd_reopen (STDIN_FILENO, file,
O_WRONLY | O_CREAT | O_NONBLOCK | O_NOCTTY,
default_permissions);
/* Don't save a copy of errno if it's EISDIR, since that would lead
touch to give a bogus diagnostic for e.g., `touch /' (assuming
we don't own / or have write access to it). On Solaris 5.6,
and probably other systems, it is EINVAL. On SunOS4, it's EPERM. */
if (fd == -1 && errno != EISDIR && errno != EINVAL && errno != EPERM)
open_errno = errno;
}
if (change_times != (CH_ATIME | CH_MTIME))
{
/* We're setting only one of the time values. */
if (change_times == CH_MTIME)
newtime[0].tv_nsec = UTIME_OMIT;
else
{
assert (change_times == CH_ATIME);
newtime[1].tv_nsec = UTIME_OMIT;
}
}
if (amtime_now)
{
/* Pass NULL to futimens so it will not fail if we have
write access to the file, but don't own it. */
t = NULL;
}
ok = (fdutimensat (fd, AT_FDCWD, (fd == STDOUT_FILENO ? NULL : file), t,
(no_dereference && fd == -1) ? AT_SYMLINK_NOFOLLOW : 0)
== 0);
if (fd == STDIN_FILENO)
{
if (close (STDIN_FILENO) != 0)
{
error (0, errno, _("closing %s"), quote (file));
return false;
}
}
else if (fd == STDOUT_FILENO)
{
/* Do not diagnose "touch -c - >&-". */
if (!ok && errno == EBADF && no_create)
return true;
}
if (!ok)
{
if (open_errno)
{
/* The wording of this diagnostic should cover at least two cases:
- the file does not exist, but the parent directory is unwritable
- the file exists, but it isn't writable
I think it's not worth trying to distinguish them. */
error (0, open_errno, _("cannot touch %s"), quote (file));
}
else
{
if (no_create && errno == ENOENT)
return true;
error (0, errno, _("setting times of %s"), quote (file));
}
return false;
}
return true;
}
void
usage (int status)
{
if (status != EXIT_SUCCESS)
fprintf (stderr, _("Try `%s --help' for more information.\n"),
program_name);
else
{
printf (_("Usage: %s [OPTION]... FILE...\n"), program_name);
fputs (_("\
Update the access and modification times of each FILE to the current time.\n\
\n\
A FILE argument that does not exist is created empty, unless -c or -h\n\
is supplied.\n\
\n\
A FILE argument string of - is handled specially and causes touch to\n\
change the times of the file associated with standard output.\n\
\n\
"), stdout);
fputs (_("\
Mandatory arguments to long options are mandatory for short options too.\n\
"), stdout);
fputs (_("\
-a change only the access time\n\
-c, --no-create do not create any files\n\
-d, --date=STRING parse STRING and use it instead of current time\n\
-f (ignored)\n\
"), stdout);
fputs (_("\
-h, --no-dereference affect each symbolic link instead of any referenced\n\
file (useful only on systems that can change the\n\
timestamps of a symlink)\n\
-m change only the modification time\n\
"), stdout);
fputs (_("\
-r, --reference=FILE use this file's times instead of current time\n\
-t STAMP use [[CC]YY]MMDDhhmm[.ss] instead of current time\n\
--time=WORD change the specified time:\n\
WORD is access, atime, or use: equivalent to -a\n\
WORD is modify or mtime: equivalent to -m\n\
"), stdout);
fputs (HELP_OPTION_DESCRIPTION, stdout);
fputs (VERSION_OPTION_DESCRIPTION, stdout);
fputs (_("\
\n\
Note that the -d and -t options accept different time-date formats.\n\
"), stdout);
emit_ancillary_info ();
}
exit (status);
}
int
main (int argc, char **argv)
{
int c;
bool date_set = false;
bool ok = true;
char const *flex_date = NULL;
initialize_main (&argc, &argv);
set_program_name (argv[0]);
setlocale (LC_ALL, "");
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
atexit (close_stdout);
change_times = 0;
no_create = use_ref = false;
while ((c = getopt_long (argc, argv, "acd:fhmr:t:", longopts, NULL)) != -1)
{
switch (c)
{
case 'a':
change_times |= CH_ATIME;
break;
case 'c':
no_create = true;
break;
case 'd':
flex_date = optarg;
break;
case 'f':
break;
case 'h':
no_dereference = true;
break;
case 'm':
change_times |= CH_MTIME;
break;
case 'r':
use_ref = true;
ref_file = optarg;
break;
case 't':
if (! posixtime (&newtime[0].tv_sec, optarg,
PDS_LEADING_YEAR | PDS_CENTURY | PDS_SECONDS))
error (EXIT_FAILURE, 0, _("invalid date format %s"),
quote (optarg));
newtime[0].tv_nsec = 0;
newtime[1] = newtime[0];
date_set = true;
break;
case TIME_OPTION: /* --time */
change_times |= XARGMATCH ("--time", optarg,
time_args, time_masks);
break;
case_GETOPT_HELP_CHAR;
case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
default:
usage (EXIT_FAILURE);
}
}
if (change_times == 0)
change_times = CH_ATIME | CH_MTIME;
if (date_set && (use_ref || flex_date))
{
error (0, 0, _("cannot specify times from more than one source"));
usage (EXIT_FAILURE);
}
if (use_ref)
{
struct stat ref_stats;
/* Don't use (no_dereference?lstat:stat) (args), since stat
might be an object-like macro. */
if (no_dereference ? lstat (ref_file, &ref_stats)
: stat (ref_file, &ref_stats))
error (EXIT_FAILURE, errno,
_("failed to get attributes of %s"), quote (ref_file));
newtime[0] = get_stat_atime (&ref_stats);
newtime[1] = get_stat_mtime (&ref_stats);
date_set = true;
if (flex_date)
{
if (change_times & CH_ATIME)
get_reldate (&newtime[0], flex_date, &newtime[0]);
if (change_times & CH_MTIME)
get_reldate (&newtime[1], flex_date, &newtime[1]);
}
}
else
{
if (flex_date)
{
struct timespec now;
gettime (&now);
get_reldate (&newtime[0], flex_date, &now);
newtime[1] = newtime[0];
date_set = true;
/* If neither -a nor -m is specified, treat "-d now" as if
it were absent; this lets "touch" succeed more often in
the presence of restrictive permissions. */
if (change_times == (CH_ATIME | CH_MTIME)
&& newtime[0].tv_sec == now.tv_sec
&& newtime[0].tv_nsec == now.tv_nsec)
{
/* Check that it really was "-d now", and not a time
stamp that just happens to be the current time. */
struct timespec notnow, notnow1;
notnow.tv_sec = now.tv_sec ^ 1;
notnow.tv_nsec = now.tv_nsec;
get_reldate (¬now1, flex_date, ¬now);
if (notnow1.tv_sec == notnow.tv_sec
&& notnow1.tv_nsec == notnow.tv_nsec)
date_set = false;
}
}
}
/* The obsolete `MMDDhhmm[YY]' form is valid IFF there are
two or more non-option arguments. */
if (!date_set && 2 <= argc - optind && posix2_version () < 200112
&& posixtime (&newtime[0].tv_sec, argv[optind],
PDS_TRAILING_YEAR | PDS_PRE_2000))
{
newtime[0].tv_nsec = 0;
newtime[1] = newtime[0];
date_set = true;
if (! getenv ("POSIXLY_CORRECT"))
{
struct tm const *tm = localtime (&newtime[0].tv_sec);
error (0, 0,
_("warning: `touch %s' is obsolete; use "
"`touch -t %04ld%02d%02d%02d%02d.%02d'"),
argv[optind],
tm->tm_year + 1900L, tm->tm_mon + 1, tm->tm_mday,
tm->tm_hour, tm->tm_min, tm->tm_sec);
}
optind++;
}
if (!date_set)
{
if (change_times == (CH_ATIME | CH_MTIME))
amtime_now = true;
else
newtime[1].tv_nsec = newtime[0].tv_nsec = UTIME_NOW;
}
if (optind == argc)
{
error (0, 0, _("missing file operand"));
usage (EXIT_FAILURE);
}
for (; optind < argc; ++optind)
ok &= touch (argv[optind]);
exit (ok ? EXIT_SUCCESS : EXIT_FAILURE);
}
十、ping命令 如何实现的?
ping命令是基于ICMP协议来工作的,ping命令会发送一份ICMP回显请求报文给目标主机,并等待目标主机返回ICMP回显应达,如果源主机在一定时间内收到了目标主机的应答,则表明两台主机间是连通的。ping是定位网络通不通的一个重要手段,是用来探测本机与网络中另一台主机之间是否可达的命令,如果两台主机之间ping不通,则表明这两台主机不能建立起连接。