Re: Dolphin starts programs with a wrong current directory

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



spir posted on Wed, 09 Dec 2009 11:51:11 +0100 as excerpted:

> Great explaination of one thing I guess unix/linux/bsd/etc... have
> wrong! To even a power user, linux filesystem is just a huge chaotic
> mess, unexplicable, unmanageable, random-like organisation. It's simply
> impossible to guess or remember where things are supposed to live. Two
> seemingly identical install cases will actually not produce same install
> locations, and locations even change with versions.

I'd disagree.  Maybe it's because I had a /proper/ explanation of where 
stuff goes and why, from reading the books I mentioned in another post, 
but I have a reliable enough understanding of the filesystem that I, for 
instance, don't use the locate service at all, having turned it off and 
uninstalled it years ago.  There's places where stuff /goes/, and I get 
very peeved as a user AND my own sysadmin, if something breaks those 
rules, and puts stuff in unexpected locations (and data or config in a 
bindir would be entirely unexpected).

Core-system config goes under /etc.  That's where boot-time services, 
etc, normally have their config.  Early boot binaries go in /bin for 
executables and /lib (/lib64 in many 64-bit installation, that's the 
standard FHS, file hierarchy standard, location for amd64 aka x86_64, but 
ia64 uses /lib for 64-bit and puts 32-bit elsewhere) for libraries.  
/root is the root user's homedir.  All those are normally on the rootfs, 
because in many cases they're used early enough in the boot that other 
filesystems aren't yet mounted, with /root there so a root login works as 
expected in single-user-mode, again when other filesystems are 
traditionally not mounted.  The rootfs is often mounted read-only in 
normal operation, particularly on more secure installations like public 
internet facing servers (ideally), etc.

System stuff that's not core enough to be needed before filesystems other 
than rootfs come online, lives under /usr.  /usr therefore has its own 
bin and lib dirs, with /usr/share corresponding to /etc, and including a 
documentation subdir /usr/share/doc .  Often, /usr does not live on the 
rootfs and must be mounted during the boot process.  This is the reason 
binaries and config used for early system boot cannot be in /usr.

There's also a /usr/local, generally used for stuff the sysadmin installs 
from source, or that the system's normal package manager doesn't know 
about or manage.  Package managers are supposed to leave this alone, 
unless specifically told otherwise by the sysadmin.  Again, this is often 
a separate partition, for ease of administration.

/mnt is the traditional location for temporary mountpoints, and remains 
the usual location for manually mounted filesystems.  /media is the newer 
location for temporary mountpoints.  It's normally used by/for hal 
assisted auto-mounting, etc.  These will of course exist on the rootfs, 
tho their subdir's contents of course is assumed NOT to be, because 
that's the point, these are the locations for temporarily mounted 
filesystems.

/var (various or variable data) is the system's data dir.  This is where 
print-spools, system mail spools if the system's running its own mail 
system (not just a mail client for each user), the distribution's package 
database, and other similar services, normally keep their data and 
caches.  Again, /var is often on its own filesystem.  

/var/log is of course under /var, for logging, but is often kept as its 
own separate filesystem in ordered to contain the damage should something 
go wrong and the logs start to fill with errors, perhaps many a second.  
A full rootfs or /var can be a bit difficult to recover from and may 
involve other more important data being lost, while a full /var/log is 
much easier to recover from and generally the only thing lost is the logs 
from the point at which it filled up to the point at which a sysadmin 
noticed and corrected the problem.  Of course, professionally managed 
systems normally have a cron job checking the status of the filesystems 
and mailing warnings to the sysadmin well before they entirely fill up, 
but /var/log is still a useful precaution, even more so on systems 
without this level of monitoring and notification.

/dev was traditionally a static dir existing on the rootfs, its contents 
a bunch of special files, device nodes, one for every conceivable device 
a normal system might have, whether they did or not.  These days, on 
Linux, it's generally a tmpfs or similar RAM based filesystem, managed by 
udev in cooperation with the Linux kernel, such that only devices that 
actually exist on the system appear here.

/sys and /proc are similar "virtual" filesystems, at least on Linux, 
setup and managed by the kernel, tho a sysadmin doesn't /have/ to 
actually mount them (but a lot of functionality will be missing if he 
doesn't).  Linux kernel developers may also have a /debug virtual 
filesystem, similarly kernel related, tho that's relatively uncommon and 
of little use for those not doing kernel debugging.

/tmp is where temporary files go.  On today's multi-gig-memory systems, 
/tmp is often not even on-disk, but a tmpfs or other RAM based filesystem.
/dev/shm is the standard location for a normally much smaller tmpfs 
(shmfs being the former name for tmpfs), designed to be used for lock-
files and other very tiny, often very temporary (seconds to minutes), 
files.  A 20 MB max size should be plenty, if you are configuring it in 
your /etc/fstab.  However, while standard, this one's obscure enough not 
all distributions have it, so few apps actually use it, preferring 
something in /tmp or the user's ~/tmp, which are far more certain to 
exist.

/home is of course the standard location for user's homedirs, and 
probably the most common separately mounted system filesystem, as having 
it on its own filesystem makes keeping the user data during system 
upgrades very simple -- just don't mkfs the existing filesystem used for 
/home.

Let's bring up "hidden" files and the parent and current directory 
entries, here.  On *ix, a filename beginning with a dot (.) indicates a 
hidden file that will not normally be listed or displayed in a 
filemanager, unless the option to view hidden files is enabled.  The two 
most common directory entries of that type are "." and "..", the single 
dot referring to "me", that is, the current directory, with the double 
dot referring to the parent dir.  Thus, all directories have a "." (that 
is "me") entry, and with the sole exception of / itself, all directories 
have a ".." entry referring to their parent.  Other .* entries may exist 
as well, but they're deliberately created, either by the user/sysadmin, 
or by a program such as the system package manager while installing a 
package, or the like.  Thus is born the possibility of trying to 
"rm .test", for instance, and accidentally getting an extra space in 
there, so it becomes "rm . test".  By itself that's not too bad, but add 
the recursive switch so it recurses into subdirs, and if you're operating 
on a file in /, **BAD** things can happen!  A variant on the theme is 
"rm .*", forgetting that ".*" includes ".."!  I once did something close 
to that in a script, as a result of a typo in a variable name, such that 
the variable was empty and the script started at / instead of in the 
directory it was supposed to start in, as stored in the (non-typoed) 
variable!  This is one reason you're not supposed to run as root by 
default -- or test your scripts as root!!  Tho a user testing a similar 
script could as easily lose everything in his homedir, which could be 
worse, if it's not backed up as it should be.

That covers the main standard "system" dirs.  The layout of /home/$USER 
(commonly seen as ~/ or $HOME, $ of course referring to an environmental 
variable with $HOME and $USER being standardized) is, unfortunately, not 
as standardized.  However, a user who cares can quickly grasp the general 
layout used by the applications they normally use, and manage them 
appropriately.

As with the system, there's normally a ~/bin for the user's own 
executable scripts and misc. binary executables they may run, having 
built or at least installed them, themselves.  This and a ~/tmp, which 
may simply be a symlink to a user subdir of the system /tmp (especially 
if the system /tmp is tmpfs, thus ensuring that it's wiped clean at every 
boot), are relatively standard.

Depending on the desktop environment, a ~/Desktop is also fairly 
standard.  It contains the files traditionally shown as icons on the 
desktop.

Beyond that, nearly all non-user-created files and subdirs of ~/ are 
hidden.  ~/.config is a standard hidden dir, tho unfortunately a late 
enough standard that far too many applications store their user data in 
hidden files or directories directly under ~/.  .bashrc is probably the 
most common individual config file under ~/, as it's where one sets up 
their own shell environment and does various other user initialization 
tasks, but there's typically dozens of hidden files and dirs in $HOME.

As this is a kde list, it's worth noting that kde's user homedir is 
normally either ~/.kde or ~/.kde<ver>, where <ver> may be 3 or 4 
depending on what you are running.  Under that, there's a few socket 
files that kde uses to communicate between programs, a share directory 
containing most user kde config, and a couple other misc. dirs.

The ~/$KDEDIR/share directory further contains various subdirs, mirroring 
those in /usr/share that store the system config. The two most 
interesting subdirs in terms of config are apps and config.  If your kde 
app uses only a single config file (typically suffixed with rc) or two, 
these files should be named according to the app, and placed in config.  
If your kde app uses more than a couple config files, they should be 
placed in a subdir named after your app, and placed in apps.

Really, there's nothing confusing at all about any of that, once you 
understand why it's done that way, altho that may indeed require being 
actually motivated enough to look and find a proper explanation such as 
this.  It may take some learning initially, and some getting used to 
thinking that way for a few weeks after that, but it quickly becomes 
second nature, and it's relatively easy to find any particular file 
because knowing its purpose, it's almost certainly in one of only a 
couple standard locations, with a quick browse (for the gui folks) or ls 
(for the cli folks) of the filesystem in those locations quickly 
revealing the file of interest.  Autocompletion, using tab at the CLI (at 
least in bash) or assuming your GUI filebrowser is sophisticated enough 
to support such functionality, makes it even easier.

-- 
Duncan - List replies preferred.   No HTML msgs.
"Every nonfree program has a lord, a master --
and if you use the program, he is your master."  Richard Stallman

___________________________________________________
This message is from the kde mailing list.
Account management:  https://mail.kde.org/mailman/listinfo/kde.
Archives: http://lists.kde.org/.
More info: http://www.kde.org/faq.html.

[Index of Archives]     [Trinity (TDE) Desktop Users]     [Fedora KDE]     [Fedora Desktop]     [Linux Kernel]     [Gimp]     [GIMP for Windows]     [Gnome]     [Yosemite Hiking]
  Powered by Linux