[lug] strange filesystem behavior

Michael Hirsch mdhirsch at gmail.com
Wed Apr 13 15:45:46 MDT 2016


Thanks Jeffrey and Davide.

I guess it makes sense--I'm not sure why I never noticed it before.  I
still have one file path that isn't resolving correctly, but I think
it is a slightly different issue.

Michael

On Wed, Apr 13, 2016 at 1:57 PM, Jeffrey S. Haemer
<jeffrey.haemer at gmail.com> wrote:
> Michael,
>
> It's because "ls" is a program, but "cd" is a builtin.  From the bash man
> page:
>
> cd [-L|[-P [-e]] [-@]] [dir]
>               Change  the  current  directory  to dir.  if dir is not
> supplied, the value of the HOME shell variable is the default.  Any
> additional
>               arguments following dir are ignored.  The variable CDPATH
> defines the search path for the directory  containing  dir:  each  directory
>               name  in  CDPATH  is  searched for dir.  Alternative directory
> names in CDPATH are separated by a colon (:).  A null directory name in
>               CDPATH is the same as the current directory, i.e., ``.''.  If
> dir begins with a slash (/), then CDPATH is  not  used.  The  -P  option
>               causes  cd to use the physical directory structure by
> resolving symbolic links while traversing dir and before processing
> instances of
>               .. in dir (see also the -P option to the set builtin command);
> the -L option forces symbolic links to be  followed  by  resolving  the
>               link  after  processing  instances  of .. in dir.  If ..
> appears in dir, it is processed by removing the immediately previous
> pathname
>               component from dir, back to a slash or the beginning of dir.
> If the -e option is supplied with -P, and the current working  directory
>               cannot be successfully determined after a successful directory
> change, cd will return an unsuccessful status.  On systems that support
>               it, the -@ option presents the extended attributes associated
> with a file as a directory.  An argument of - is  converted  to  $OLDPWD
>               before  the  directory change is attempted.  If a non-empty
> directory name from CDPATH is used, or if - is the first argument, and the
>               directory change is successful, the absolute pathname of the
> new working directory is written to  the  standard  output.   The  return
>               value is true if the directory was successfully changed; false
> otherwise.
>
>
> Moreover
>
> set -P      If set, the shell does not resolve symbolic links when executing
> commands such as cd that change the  current  working  direc‐
>                 tory.   It uses the physical directory structure instead.
> By default, bash follows the logical chain of directories when per‐
>                 forming commands which change the current directory.
>
> HTH!
>
> On Wed, Apr 13, 2016 at 1:28 PM, Davide Del Vento
> <davide.del.vento at gmail.com> wrote:
>>
>> The point with syslinked directories is that if you have
>>
>> /foo/bar/baz
>>
>> which is a syslink to
>>
>> /whatever/the/heck
>>
>> and you cd into /foo/bar/baz, then when you do "cd .." or "ls .." in one
>> case you go to /foo/bar/ in the other you go /whatever/the/ (forgot
>> what-is-what)
>>
>> I noticed it pretty early when I encountered syslink'ed directories years
>> ago, and never investigated further, just learnt to live with it.
>>
>> On Wed, Apr 13, 2016 at 1:17 PM, Michael Hirsch <mdhirsch at gmail.com>
>> wrote:
>>>
>>> Can anyone explain this?  The owners of this system use a lot of
>>> symlinks to play weird games with their files.  For instance, in the
>>> directory used below, /var/tmp/jobsched/jaws/conf the last entry,
>>> conf, is actually a symlink into another filesystem entirely.  But I
>>> still don't understand how this is possible.
>>>
>>> Consider this:
>>> bash-4.1$ pwd
>>> /var/tmp/jobsched/jaws/conf
>>> bash-4.1$ ls ../../../..
>>> autosys_api  common  daemon         jaws.sh            jboss  log
>>> sbin     sdk
>>> batch        config  import_export  jaws.sh.vmoptions  lib    README
>>> scripts  tools
>>> bash-4.1$ cd ../../../..
>>> bash-4.1$ ls
>>> account  cvs    etscfg  lib    lost+found  mqm.client  phd        run
>>>    VRTSat_lhc  yp
>>> adm      db     ftp     local  lum         nis         preserve
>>> spool   VRTSvcs     zapplets
>>> cache    db2    games   lock   mail        openv       prodperim  tmp
>>> vx
>>> crash    empty  gdm     log    mqm         opt         redhat     VRTSat
>>> vxvm
>>>
>>> So when I "ls ../../../.." ls sees a bunch of file, starting with
>>> "autosys_api" and "common".  But if I cd to that directory ls sees a
>>> completely different set of files.
>>>
>>> I didn't think that symlinks and filesystems worked like this.  I
>>> expected to see the same files in the two "ls" commands.
>>>
>>> What is making this happen?  What am I missing.
>>>
>>> Thanks,
>>>
>>> Michael
>>> _______________________________________________
>>> Web Page:  http://lug.boulder.co.us
>>> Mailing List: http://lists.lug.boulder.co.us/mailman/listinfo/lug
>>> Join us on IRC: irc.hackingsociety.org port=6667 channel=#hackingsociety
>>
>>
>>
>> _______________________________________________
>> Web Page:  http://lug.boulder.co.us
>> Mailing List: http://lists.lug.boulder.co.us/mailman/listinfo/lug
>> Join us on IRC: irc.hackingsociety.org port=6667 channel=#hackingsociety
>
>
>
>
> --
> Jeffrey Haemer <jeffrey.haemer at gmail.com>
> 720-837-8908 [cell], http://seejeffrun.blogspot.com [blog],
> http://www.youtube.com/user/goyishekop [vlog]
> פרייהייט? דאס איז יאַנג דינען וואָרט.
>
> _______________________________________________
> Web Page:  http://lug.boulder.co.us
> Mailing List: http://lists.lug.boulder.co.us/mailman/listinfo/lug
> Join us on IRC: irc.hackingsociety.org port=6667 channel=#hackingsociety


More information about the LUG mailing list