Big News: Socket Selected for OpenAI's Cybersecurity Grant Program.Details
Socket
Book a DemoSign in
Socket

rreadlink

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rreadlink - npm Package Compare versions

Comparing version
0.1.6
to
0.2.0
+109
doc/rreadlink.md
<!-- DO NOT EDIT THIS FILE: It is auto-generated by `make update-man` -->
# rreadlink(1) - recursively resolve symlinks
## SYNOPSIS
Recursively resolves symlinks by printing the chain of targets using absolute
paths or prints the canonical path of a symlink's ultimate target or of a
non-symlink.
rreadlink [-s|-1] symLink
rreadlink -e symLink
-s single-line output format using ' -> ' between paths and
@ to mark symlinks (default when printing to terminal)
-1 one-line-per-path output format, without the @ marker (default
when NOT printing to a terminal)
-e print only the symlink's ultimate target, in canonical form
Standard options: `--help`, `--man`, `--version`, `--home`
## DESCRIPTION
`rreadlink` (*r*ecursive *readlink*) improves upon `readlink`'s functionality
by:
* printing a symlink's target *chain* from the input file to its ultimate target.
* using absolute paths.
* also working with non-symlinks by printing their canonical paths.
If the input file is indeed a symlink, you'll get at least 2 output paths
(unless `-e` is specified): the input symlink and its target; if there are
intermediate symlinks, you'll get more.
While each file is output by its absolute path, it is only the *ultimate*
target whose path will be *canonical*.
CAVEAT: *Circular* symlinks are NOT detected and will result in an infinite
loop.
If any of the files in the chain do not exist, processing stops, an error
message is output, and exit code 1 is returned.
If the input file is NOT a symlink, only *its* full path is printed in its
*canonical* form. I.e., the file's directory path - if it happens to have
symlink components - is resolved to its ultimate target.
Thus, you can use `rreadlink -e <anyFile>` on any existing filesystem object,
and you'll either get its own canonical path (if not a symlink) or its
ultimate target's canonical path (if a symlink).
## OPTIONS
* `-s`, ``
Single-line output format, with ' -> ' between paths, and symlinks marked
with a terminal `@` (similar to `ls -lF`).
This is the default output format when printing to a terminal.
* `-1`, ``
(The number one.) One-line-per-path output format.
Prints each output path on its own line, without the terminal `@`.
This is the default output format when *not* printing to a terminal.
* `-e`, `--ultimate`
Prints only the *ultimate* target's absolute, canonical path.
Same as GNU `readlink`'s `-e` (`--canonicalize-existing`) option.
If a non-symlink is given, its own canonical path is output.
## STANDARD OPTIONS
All standard options provide information only.
* `-h, --help`
Prints the contents of the synopsis chapter to stdout for quick reference.
* `--man`
Displays this manual page, which is a helpful alternative to using `man`,
if the manual page isn't installed.
* `--version`
Prints version information.
* `--home`
Opens this utility's home page in the system's default web browser.
## SEE ALSO
`typex`(1) reports the path of executables in the system's path, among other
things, and has `rreadlink`'s functionality built in, so as to show what
file is ultimately invoked for a given executable name.
See https://github.com/mklement0/typex
## LICENSE
For license information, bug reports, and more, visit this utility's home page
by running `rreadlink --home`.
## EXAMPLES
# Print the chain of symlinks for the `nawk` executable.
# (Sample output from Ubuntu.)
$ rreadlink $(which nawk)
/usr/bin/nawk@ -> /etc/alternatives/nawk@ -> /usr/bin/gawk
# Print the canonicalized path of a non-symlink.
# (Sample output from a Fedora, where /bin is symlinked to /usr/bin.)
$ rreadlink -e /bin/sed
/usr/bin/sed

Sorry, the diff of this file is not supported yet

+10
-0

@@ -7,2 +7,12 @@ ## Changelog

* **[v0.2.0](https://github.com/mklement0/rreadlink/compare/v0.1.6...v0.2.0)** (2015-09-18):
* [potentially breaking change] `rreadlink` now also accepts options placed
_after_ operands on the command line (except after `--`).
* [doc] `rreadlink` now has a man page (if manually installed,
use `rreadlink --man`); `rreadlink -h` now just prints concise usage
information.
* [doc] `README.md` cleaned up and extended.
* [dev] Removed post-install command that verifies presence of Bash, because
`npm` _prints_ the command during installation, which can be confusing.
* **[v0.1.6](https://github.com/mklement0/rreadlink/compare/v0.1.5...v0.1.6)** (2015-09-15):

@@ -9,0 +19,0 @@ * [dev] Makefile improvements; various other behind-the-scenes tweaks.

+2
-1

@@ -1,1 +0,2 @@

Copyright (c) 2015 Michael Klement, released under the [MIT license](https://spdx.org/licenses/MIT#licenseText).
Copyright (c) 2015 Michael Klement <mklement0@gmail.com> (http://same2u.net),
released under the [MIT license](https://spdx.org/licenses/MIT#licenseText).

@@ -204,3 +204,3 @@ # Since we rely on paths relative to the Makefile location, abort if make isn't being run from there.

view-man: update-man
@manfile=`json -f package.json man` || { echo "ERROR: No `man` property found in 'package.json'." >&2; exit 2; }; \
@manfile=`json -f package.json man`; [[ -n $$manfile ]] || { echo "ERROR: No 'man' property found in 'package.json'." >&2; exit 2; }; \
man "$$manfile"

@@ -207,0 +207,0 @@

@@ -5,3 +5,3 @@ {

"private": false,
"version": "0.1.6",
"version": "0.2.0",
"os": [

@@ -23,4 +23,3 @@ "!win32"

"scripts": {
"test": "make test",
"postinstall": "bash --version >/dev/null 2>&1 || printf '%s\\n\\n' \"WARNING: bash not found; make sure it is installed before running this utility.\" >&2"
"test": "make test"
},

@@ -39,3 +38,5 @@ "keywords": [

"devDependencies": {
"doctoc": "^0.15.0",
"json": "^9.0.3",
"marked-man": "^0.1.5",
"replace": "^0.3.0",

@@ -45,3 +46,11 @@ "semver": "^4.2.0",

"urchin": "^0.0.5"
}
},
"net_same2u": {
"make_pkg": {
"manOn": true,
"tocOn": true,
"tocTitle": "**Contents**"
}
},
"man": "./man/rreadlink.1"
}
+89
-71
[![npm version](https://img.shields.io/npm/v/rreadlink.svg)](https://npmjs.com/package/rreadlink) [![license](https://img.shields.io/npm/l/rreadlink.svg)](https://github.com/mklement0/rreadlink/blob/master/LICENSE.md)
# rreadlink
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
A **multi-platform Unix CLI** that **prints a symlink's _complete chain_ of targets** using **_absolute_ paths**.
**Contents**
The primary purpose of `rreadlink` (*r*ecursive *readlink*) is to _follow a given symlink to its ultimate target_, printing _all intermediate symlinks_ along the way.
- [rreadlink &mdash; introduction](#rreadlink-&mdash-introduction)
- [Examples](#examples)
- [Installation](#installation)
- [Installation from the npm registry](#installation-from-the-npm-registry)
- [Manual installation](#manual-installation)
- [Usage](#usage)
- [License](#license)
- [Acknowledgements](#acknowledgements)
- [npm dependencies](#npm-dependencies)
- [Changelog](#changelog)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# rreadlink &mdash; introduction
`rreadlink` is a **multi-platform Unix CLI** that **prints a symlink's _complete chain_ of targets** using **_absolute_ paths**; it can
also determine the canonical path of non-symlinks.
The primary purpose of `rreadlink` (*r*ecursive *readlink*) is to follow a given symlink to its ultimate target, printing _all intermediate symlinks_ along the way.
All paths are printed as _absolute_ paths, with the ultimate target printed in _canonical_ form.
This is hepful on Linux platforms, for instance, where some utilities are installed as symlinks that point to _other_ symlinks before resolving
to the ultimate target, making it difficult to understand what is ultimately invoked; e.g., on some Linux distros `/usr/bin/nawk` links to `/etc/alternatives/nawk`, which in turn links to the actual target, `/usr/bin/gawk`.
Note that the native GNU `readline` can either only give you the _next_ target (not the ultimate one), or, with `-f` or `-e` or `-m`, _only_ the _ultimate_ target (not intermediate ones).
to the ultimate target, making it difficult to understand what is ultimately invoked;
e.g., on some Linux distros `/usr/bin/nawk` links to `/etc/alternatives/nawk`, which in turn links to the actual target, `/usr/bin/gawk`.
Note that the native GNU `readlink` utility can either only give you the _next_ target (not the ultimate one), or, with `-f` or `-e` or `-m`,
_only_ the _ultimate_ target (not intermediate ones).
Loosely speaking, `rreadlink` provides the functionality of GNU `readline -e` while also including _intermediate_ targets.
`rreadlink` has the added advantage of being multi-platform (see [Supported Platforms](#supported-platforms) below).
Loosely speaking, `rreadlink` provides the functionality of GNU `readlink -e` while also including _intermediate_ targets.
`rreadlink` has the added advantage of being multi-platform (see [Installation](#installation) below).
Alternatively, given a _non_-symlink, `rreadlink` prints the argument's canonical path (i.e., any _directory_ components that are symlinks are resolved to their ultimate targets).
Alternatively, given a _non_-symlink, `rreadlink` prints the argument's canonical path (i.e., any _directory_ components that are symlinks
are resolved to their ultimate targets).
See the [Usage](#usage) chapter for details.
Find examples below, concise [usage information](#usage) further below, or
read the [manual](doc/rreadlink.md).
<sup>**See also**: [`typex`](https://github.com/mklement0/typex) provides information about _executables in the path_ (among other things) and has `rreadlink`'s behavior built in to show what file is ultimately invoked.</sup>
<sup>**See also**: The [`typex`](https://github.com/mklement0/typex) utility
provides information about _executables in the path_ (among other things) and
has `rreadlink`'s behavior built in to show what file is ultimately invoked.</sup>
## Supported Platforms
# Examples
Any Unix-like platform with POSIX-compatible utilities, with `bash` installed; for instance, Linux and OS X.
## Quick Examples
```shell

@@ -45,72 +66,56 @@ # Print the symlink chain for executable /usr/bin/nawk (e.g., on Ubuntu):

/private/var/log
```
## Installation
# Installation
With [node.js](http://nodejs.org/) installed, install via the [npm registry](https://www.npmjs.com/) (you may have to prepend `sudo`):
**Supported platforms**
npm install rreadlink -g
**Unix-like platforms** with **POSIX-compatible utilities** and
[Bash](http://www.gnu.org/software/bash/), such as Linux and OS X.
## Usage
## Installation from the npm registry
<!-- DO NOT EDIT THE FENCED CODE BLOCK and RETAIN THIS COMMENT: The fenced code block below is updated by `make update-readme/release` with CLI usage information. -->
<sup>Note: Even if you don't use Node.js, its package manager, `npm`, works across platforms and is easy to install; try [`curl -L http://git.io/n-install | bash`](https://github.com/mklement0/n-install)</sup>
```nohighlight
$ rreadlink --help
With [Node.js](http://nodejs.org/) or [io.js](https://iojs.org/) installed, install [the package](https://www.npmjs.com/package/rreadlink) as follows:
[sudo] npm install rreadlink -g
SYNOPSIS
rreadlink [-s|-1] symLink
rreadlink -e symLink
**Note**:
DESCRIPTION
Recursive readlink: prints the CHAIN OF SYMLINKS
from the input file to its ultimate target, using ABSOLUTE PATHS.
* Whether you need `sudo` depends on how you installed Node.js / io.js and whether you've [changed permissions later](https://docs.npmjs.com/getting-started/fixing-npm-permissions); if you get an `EACCES` error, try again with `sudo`.
* The `-g` ensures [_global_ installation](https://docs.npmjs.com/getting-started/installing-npm-packages-globally) and is needed to put `rreadlink` in your system's `$PATH`.
-s
Short output format - a single line is output with ' -> ' between paths,
with symlinks marked with a terminal '@' (similar to `ls -lF`).
This is the default output format when printing to a terminal.
## Manual installation
-1
(The number one.) One-line-per-path output format.
Prints each output path on its own line, without the terminal '@'.
This is the default output format when not printing to a terminal.
* Download [the CLI](https://raw.githubusercontent.com/mklement0/rreadlink/stable/bin/rreadlink) as `rreadlink`.
* Make it executable with `chmod +x rreadlink`.
* Move it or symlink it to a folder in your `$PATH`, such as `/usr/local/bin` (OSX) or `/usr/bin` (Linux).
-e
Prints only the *ultimate* target's absolute path.
Same as GNU readlink's -e (--canonicalize-existing) option.
If the input file is indeed a symlink, you'll get at least 2
output paths (unless -e is specified): the input symlink and its
target; if there are intermediate symlinks, you'll get more.
While each file is output by its absolute path, it is only
the *ultimate* target whose path will be *canonical*.
# Usage
CAVEAT: *Circular* symlinks are NOT detected and will result in
an infinite loop.
Find concise usage information below; for complete documentation, read the [manual online](doc/rreadlink.md) or,
once installed, run `rreadlink nws` (`rreadlink --man` if installed manually).
If any of the files in the chain do not exist, processing
stops, an error message is output and exit code 1 is returned.
<!-- DO NOT EDIT THE FENCED CODE BLOCK and RETAIN THIS COMMENT: The fenced code block below is updated by `make update-readme/release` with CLI usage information. -->
If the input file is NOT a symlink, only *its* full path is
printed in its *canonical* form. I.e., the file's directory
path - if it happens to have symlink components - is resolved to
its ultimate target.
```nohighlight
$ rreadlink --help
Thus, you can use
rreadlink -e anyFile
on any existing filesystem object, and you'll either get its own
canonical path (if not a symlink) or its ultimate target's canonical
path (if a symlink).
EXAMPLES
# Prints the chain of symlinks for the `git` executable
# in the $PATH.
rreadlink $(which git)
# Prints the canonicalized path of the given non-symlink.
# (Example from OSX, where /var links to /private/var.)
rreadlink /var/log # -> '/private/var/log'
Recursively resolves symlinks by printing the chain of targets using absolute
paths or prints the canonical path of a symlink's ultimate target or of a
non-symlink.
rreadlink [-s|-1] symLink
rreadlink -e symLink
-s single-line output format using ' -> ' between paths and
@ to mark symlinks (default when printing to terminal)
-1 one-line-per-path output format, without the @ marker (default
when NOT printing to a terminal)
-e print only the symlink's ultimate target, in canonical form
Standard options: --help, --man, --version, --home
```

@@ -120,7 +125,8 @@

## License
# License
Copyright (c) 2015 Michael Klement, released under the [MIT license](https://spdx.org/licenses/MIT#licenseText).
Copyright (c) 2015 Michael Klement <mklement0@gmail.com> (http://same2u.net),
released under the [MIT license](https://spdx.org/licenses/MIT#licenseText).
### Acknowledgements
## Acknowledgements

@@ -133,5 +139,7 @@ This project gratefully depends on the following open-source components, according to the terms of their respective licenses.

### npm dependencies
## npm dependencies
* [doctoc (D)](https://github.com/thlorenz/doctoc)
* [json (D)](https://github.com/trentm/json)
* [marked-man (D)](https://github.com/kapouer/marked-man#readme)
* [replace (D)](https://github.com/harthur/replace)

@@ -144,3 +152,3 @@ * [semver (D)](https://github.com/npm/node-semver#readme)

## Changelog
# Changelog

@@ -151,2 +159,12 @@ Versioning complies with [semantic versioning (semver)](http://semver.org/).

* **[v0.2.0](https://github.com/mklement0/rreadlink/compare/v0.1.6...v0.2.0)** (2015-09-18):
* [potentially breaking change] `rreadlink` now also accepts options placed
_after_ operands on the command line (except after `--`).
* [doc] `rreadlink` now has a man page (if manually installed,
use `rreadlink --man`); `rreadlink -h` now just prints concise usage
information.
* [doc] `README.md` cleaned up and extended.
* [dev] Removed post-install command that verifies presence of Bash, because
`npm` _prints_ the command during installation, which can be confusing.
* **[v0.1.6](https://github.com/mklement0/rreadlink/compare/v0.1.5...v0.1.6)** (2015-09-15):

@@ -153,0 +171,0 @@ * [dev] Makefile improvements; various other behind-the-scenes tweaks.

Sorry, the diff of this file is not supported yet