cow-shell(1)
π cow-shell(1) π
okay bestie, so this is a page from the cowdancer manual and it's literally about cow-shell, and I am so ready to tell you about it. buckle up π
β¨ NAME β¨
cow-shell β start a copy-on-write session and invoke a shell, periodt. π
πΈ SYNOPSIS πΈ
cow-shell [commandline]
that's it. that's the whole vibe. π¦
π« DESCRIPTION π«
so cow-shell runs whatever command you hand it, using cowdancer. and if you give it no command-line option at all? it just drops you into a shell. no big deal, iconic behavior. π
here's the tea: once you're inside the cowdancer session, the files under your current directory get protected in a very specific way β if you do a write operation to an i-node that already existed back when you ran cow-shell, that i-node does NOT get modified. she's protected. she's safe. she's not taking that energy today. π
ngl this is super useful for managing hard-linked source-trees and scratch-filesystems. that's the whole point, iykyk. π§
π₯ EXAMPLES π₯
cp -al cowdancer/ cowdancer.new && cd cowdancer.new && cow-shellβ make a hardlinked tree, then cd into the freshly created tree. after you invokecow-shellinside that tree, any write operation against a file that's hardlinked with the original tree gets copied to a new file before the write. the original tree is untouched, as she should be. πcp -al cowdancer/ cowdancer.new && cd cowdancer.new && cow-shelldebuildβ this one tries to rundpkg-buildpackageon the new tree, specifically so the original tree doesn't get damaged. queen behavior, protecting the original. π
heads up bestie!! you need to configuredebuildto ignore.ilistfiles β do it through the-ior-Ioption. don't skip this one fr fr. π
π FILES π
.ilistβ generated dynamically in the current directory. this file holds the list of i-node numbers that should be protected from write operations. she's the VIP list. π/usr/lib/cowdancer/libcowdancer.soβ the shared library used internally that overrides some functions that could potentially write to files. this library is literally the COW feature, and it gets preloaded withLD_PRELOAD. main character library energy, no cap. β/bin/cpβ used for copying. requires the GNU option-ato be functional. non-negotiable. π
π¦ ENVIRONMENT π¦
COWDANCER_ILISTFILEβ the path to the current.ilistfile.COWDANCER_IGNOREβ used internally to work around infinite loops. it will be unset.LD_PRELOADβ utilized to preloadlibcowdancer.so.COWDANCER_DEBUGβ debugging option. enables debug messages. cowdancer will give verbose debug messages on standard error output.COWDANCER_SOβ debugging option. specifies a different path forlibcowdancer.so.COWDANCER_REUSE=yesβ enables reuse of the cowdancer.ilistfile found for consecutive runs ofcow-shell.
π RETURN VALUE π
the functions that get overridden with cowdancer will give an errno value of ENOMEM when there's a problem.
and before you panic β the system isn't actually out of memory, bestie. π this error code was chosen on purpose because this error is usually handled gracefully by applications. it's giving strategic drama. π
π RESTRICTIONS π
okay this is the part where we get real. read it. love it. respect it.
- can only support directories that are scanned by the
cow-shellcommand. - the operation is not semantically correct when files are originally hardlinked β hardlinks are always broken.
- does not support anything when the
LD_PRELOADtrick doesn't work. - does not work unless hardlinks are supported on the filesystem.
- not very user-friendly. (she said it, not me π)
- leaves the
.ilistfile around. yeah. she does that. π
π AUTHOR π
Junichi Uekawa (dancer@debian.org)
the upstream page is available at http://www.netfort.gr.jp/~dancer/software/cowdancer.html β go show some love. π«Ά
π SEE ALSO π
cowdancer-ilistcreate(1)
and that's the whole page bestie!! this one's from the cowdancer manual, dated 2006 Jan 25. yes, she's vintage. yes, she still slays. mwah ππ β¨
π¦ where this page comes from
- debian bookworm: cowdancer 0.89 Β· GPL-2.0-or-later
- debian trixie: cowdancer 0.90 Β· GPL-2.0-or-later
- ubuntu jammy: cowdancer 0.89 Β· GPL-2.0-or-later
- ubuntu noble: cowdancer 0.89 Β· GPL-2.0-or-later
- ubuntu questing: cowdancer 0.90
- ubuntu resolute: cowdancer 0.90build1 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms