Why this hard-to-understand 'find' command broke my system?
I am using archlinux and I was trying to delete core dumps file to save space on the root partition.
I stupidly ran this which I found in internet without really understanding it:
sudo find / -xdev -name core -ls -o -path "/lib*" -prune -exec rm {} ;
from what I understand so far. It will delete everything under root '/' that has the exact name 'core' except anything under '/lib'
and this is the output I got
399883 4 drwxr-xr-x 2 root root 4096 Sep 21 18:33 /usr/share/lightdm-webkit/themes/litarvan/packages/$sdk/lib/core
401640 4 drwxr-xr-x 11 root root 4096 Sep 21 18:33 /usr/share/lightdm-webkit/themes/litarvan/packages/angular2/src/core
992335 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/log/core
999740 4 drwxr-xr-x 7 root root 4096 Dec 5 14:36 /usr/include/boost/spirit/home/classic/core
999834 4 drwxr-xr-x 3 root root 4096 Dec 5 14:36 /usr/include/boost/spirit/home/x3/core
999557 4 drwxr-xr-x 3 root root 4096 Dec 5 14:36 /usr/include/boost/phoenix/core
992045 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/hana/fwd/core
992030 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/hana/core
991963 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/geometry/multi/core
991928 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/geometry/core
991626 4 drwxr-xr-x 4 root root 4096 Dec 5 14:36 /usr/include/boost/beast/experimental/core
991622 4 drwxr-xr-x 4 root root 4096 Dec 5 14:36 /usr/include/boost/beast/core
991735 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/contract/detail/inlined/core
991731 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/contract/core
1000174 4 drwxr-xr-x 3 root root 4096 Dec 5 14:36 /usr/include/boost/xpressive/detail/core
991744 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/core
1062959 4 drwxr-xr-x 3 root root 4096 Dec 6 01:31 /usr/lib/python3.7/site-packages/ranger/core
1088768 4 drwxr-xr-x 3 root root 4096 Oct 22 21:00 /usr/lib/python3.7/site-packages/core
450582 4 drwxr-xr-x 6 root root 4096 Dec 6 01:07 /usr/lib/ruby/gems/2.5.0/gems/rspec-core-3.8.0/lib/rspec/core
1008621 4 drwxr-xr-x 4 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/sound/core
1008442 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/usb/core
1007844 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/infiniband/core
1008479 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/video/fbdev/core
1007786 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/gpu/drm/tinydrm/core
1008033 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/mmc/core
1008005 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/memstick/core
1008133 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/net/ethernet/mellanox/mlx5/core
1008569 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/net/core
415080 4 drwxr-xr-x 4 root root 4096 Sep 9 09:36 /usr/lib/python2.7/site-packages/wx-3.0-gtk3/wx/lib/pubsub/core
1074158 4 drwxr-xr-x 2 root root 4096 Sep 7 03:10 /usr/lib/python2.7/site-packages/radialnet/core
So, all of the matches are directory, and because I use rm
without the -r
option, it should not delete directories, which means it should delete nothing.
However, after I ran the command, most of the things in my system broke, e.g., zsh, i3. and when I reboot my PC, I got a kernel panic, bad rip value or something.
I could reinstall again since I have separate root and home partition. But I'm very curious why it broke the system.
find rm
add a comment |
I am using archlinux and I was trying to delete core dumps file to save space on the root partition.
I stupidly ran this which I found in internet without really understanding it:
sudo find / -xdev -name core -ls -o -path "/lib*" -prune -exec rm {} ;
from what I understand so far. It will delete everything under root '/' that has the exact name 'core' except anything under '/lib'
and this is the output I got
399883 4 drwxr-xr-x 2 root root 4096 Sep 21 18:33 /usr/share/lightdm-webkit/themes/litarvan/packages/$sdk/lib/core
401640 4 drwxr-xr-x 11 root root 4096 Sep 21 18:33 /usr/share/lightdm-webkit/themes/litarvan/packages/angular2/src/core
992335 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/log/core
999740 4 drwxr-xr-x 7 root root 4096 Dec 5 14:36 /usr/include/boost/spirit/home/classic/core
999834 4 drwxr-xr-x 3 root root 4096 Dec 5 14:36 /usr/include/boost/spirit/home/x3/core
999557 4 drwxr-xr-x 3 root root 4096 Dec 5 14:36 /usr/include/boost/phoenix/core
992045 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/hana/fwd/core
992030 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/hana/core
991963 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/geometry/multi/core
991928 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/geometry/core
991626 4 drwxr-xr-x 4 root root 4096 Dec 5 14:36 /usr/include/boost/beast/experimental/core
991622 4 drwxr-xr-x 4 root root 4096 Dec 5 14:36 /usr/include/boost/beast/core
991735 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/contract/detail/inlined/core
991731 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/contract/core
1000174 4 drwxr-xr-x 3 root root 4096 Dec 5 14:36 /usr/include/boost/xpressive/detail/core
991744 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/core
1062959 4 drwxr-xr-x 3 root root 4096 Dec 6 01:31 /usr/lib/python3.7/site-packages/ranger/core
1088768 4 drwxr-xr-x 3 root root 4096 Oct 22 21:00 /usr/lib/python3.7/site-packages/core
450582 4 drwxr-xr-x 6 root root 4096 Dec 6 01:07 /usr/lib/ruby/gems/2.5.0/gems/rspec-core-3.8.0/lib/rspec/core
1008621 4 drwxr-xr-x 4 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/sound/core
1008442 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/usb/core
1007844 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/infiniband/core
1008479 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/video/fbdev/core
1007786 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/gpu/drm/tinydrm/core
1008033 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/mmc/core
1008005 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/memstick/core
1008133 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/net/ethernet/mellanox/mlx5/core
1008569 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/net/core
415080 4 drwxr-xr-x 4 root root 4096 Sep 9 09:36 /usr/lib/python2.7/site-packages/wx-3.0-gtk3/wx/lib/pubsub/core
1074158 4 drwxr-xr-x 2 root root 4096 Sep 7 03:10 /usr/lib/python2.7/site-packages/radialnet/core
So, all of the matches are directory, and because I use rm
without the -r
option, it should not delete directories, which means it should delete nothing.
However, after I ran the command, most of the things in my system broke, e.g., zsh, i3. and when I reboot my PC, I got a kernel panic, bad rip value or something.
I could reinstall again since I have separate root and home partition. But I'm very curious why it broke the system.
find rm
Short answer: you need to be very very very careful offind
commands that contain-o
. Like you would if a snake offered you a mushroom to eat.
– Scott
Dec 21 '18 at 1:56
I know-o
means 'logical or' now, but still confused about the-prune
option. Did I just delete everything that doesn't havecore
and under lib or? everything except files under/lib' and have
core` in the name?
– Rashad
Dec 21 '18 at 3:04
Hmm. I took a quick look at the command in your question and I thought I understood what was happening. On closer examination, I don’t understand; at least not fully. Unfortunately, I don’t have time to investigate right now. … (Cont’d)
– Scott
Dec 21 '18 at 4:55
1
(Cont’d) … Look at Why does ‘find’ in Linux skip expected results when ‘-o’ is used?, Why does the “-or” flag to GNU find cause my expression to evaluate in an unexpected way?, 'find' with '-o' and '-exec chown' not working as expected and find command: -or option doesn’t work, and see whether they help you.
– Scott
Dec 21 '18 at 4:55
add a comment |
I am using archlinux and I was trying to delete core dumps file to save space on the root partition.
I stupidly ran this which I found in internet without really understanding it:
sudo find / -xdev -name core -ls -o -path "/lib*" -prune -exec rm {} ;
from what I understand so far. It will delete everything under root '/' that has the exact name 'core' except anything under '/lib'
and this is the output I got
399883 4 drwxr-xr-x 2 root root 4096 Sep 21 18:33 /usr/share/lightdm-webkit/themes/litarvan/packages/$sdk/lib/core
401640 4 drwxr-xr-x 11 root root 4096 Sep 21 18:33 /usr/share/lightdm-webkit/themes/litarvan/packages/angular2/src/core
992335 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/log/core
999740 4 drwxr-xr-x 7 root root 4096 Dec 5 14:36 /usr/include/boost/spirit/home/classic/core
999834 4 drwxr-xr-x 3 root root 4096 Dec 5 14:36 /usr/include/boost/spirit/home/x3/core
999557 4 drwxr-xr-x 3 root root 4096 Dec 5 14:36 /usr/include/boost/phoenix/core
992045 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/hana/fwd/core
992030 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/hana/core
991963 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/geometry/multi/core
991928 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/geometry/core
991626 4 drwxr-xr-x 4 root root 4096 Dec 5 14:36 /usr/include/boost/beast/experimental/core
991622 4 drwxr-xr-x 4 root root 4096 Dec 5 14:36 /usr/include/boost/beast/core
991735 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/contract/detail/inlined/core
991731 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/contract/core
1000174 4 drwxr-xr-x 3 root root 4096 Dec 5 14:36 /usr/include/boost/xpressive/detail/core
991744 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/core
1062959 4 drwxr-xr-x 3 root root 4096 Dec 6 01:31 /usr/lib/python3.7/site-packages/ranger/core
1088768 4 drwxr-xr-x 3 root root 4096 Oct 22 21:00 /usr/lib/python3.7/site-packages/core
450582 4 drwxr-xr-x 6 root root 4096 Dec 6 01:07 /usr/lib/ruby/gems/2.5.0/gems/rspec-core-3.8.0/lib/rspec/core
1008621 4 drwxr-xr-x 4 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/sound/core
1008442 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/usb/core
1007844 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/infiniband/core
1008479 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/video/fbdev/core
1007786 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/gpu/drm/tinydrm/core
1008033 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/mmc/core
1008005 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/memstick/core
1008133 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/net/ethernet/mellanox/mlx5/core
1008569 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/net/core
415080 4 drwxr-xr-x 4 root root 4096 Sep 9 09:36 /usr/lib/python2.7/site-packages/wx-3.0-gtk3/wx/lib/pubsub/core
1074158 4 drwxr-xr-x 2 root root 4096 Sep 7 03:10 /usr/lib/python2.7/site-packages/radialnet/core
So, all of the matches are directory, and because I use rm
without the -r
option, it should not delete directories, which means it should delete nothing.
However, after I ran the command, most of the things in my system broke, e.g., zsh, i3. and when I reboot my PC, I got a kernel panic, bad rip value or something.
I could reinstall again since I have separate root and home partition. But I'm very curious why it broke the system.
find rm
I am using archlinux and I was trying to delete core dumps file to save space on the root partition.
I stupidly ran this which I found in internet without really understanding it:
sudo find / -xdev -name core -ls -o -path "/lib*" -prune -exec rm {} ;
from what I understand so far. It will delete everything under root '/' that has the exact name 'core' except anything under '/lib'
and this is the output I got
399883 4 drwxr-xr-x 2 root root 4096 Sep 21 18:33 /usr/share/lightdm-webkit/themes/litarvan/packages/$sdk/lib/core
401640 4 drwxr-xr-x 11 root root 4096 Sep 21 18:33 /usr/share/lightdm-webkit/themes/litarvan/packages/angular2/src/core
992335 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/log/core
999740 4 drwxr-xr-x 7 root root 4096 Dec 5 14:36 /usr/include/boost/spirit/home/classic/core
999834 4 drwxr-xr-x 3 root root 4096 Dec 5 14:36 /usr/include/boost/spirit/home/x3/core
999557 4 drwxr-xr-x 3 root root 4096 Dec 5 14:36 /usr/include/boost/phoenix/core
992045 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/hana/fwd/core
992030 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/hana/core
991963 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/geometry/multi/core
991928 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/geometry/core
991626 4 drwxr-xr-x 4 root root 4096 Dec 5 14:36 /usr/include/boost/beast/experimental/core
991622 4 drwxr-xr-x 4 root root 4096 Dec 5 14:36 /usr/include/boost/beast/core
991735 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/contract/detail/inlined/core
991731 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/contract/core
1000174 4 drwxr-xr-x 3 root root 4096 Dec 5 14:36 /usr/include/boost/xpressive/detail/core
991744 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/core
1062959 4 drwxr-xr-x 3 root root 4096 Dec 6 01:31 /usr/lib/python3.7/site-packages/ranger/core
1088768 4 drwxr-xr-x 3 root root 4096 Oct 22 21:00 /usr/lib/python3.7/site-packages/core
450582 4 drwxr-xr-x 6 root root 4096 Dec 6 01:07 /usr/lib/ruby/gems/2.5.0/gems/rspec-core-3.8.0/lib/rspec/core
1008621 4 drwxr-xr-x 4 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/sound/core
1008442 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/usb/core
1007844 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/infiniband/core
1008479 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/video/fbdev/core
1007786 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/gpu/drm/tinydrm/core
1008033 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/mmc/core
1008005 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/memstick/core
1008133 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/net/ethernet/mellanox/mlx5/core
1008569 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/net/core
415080 4 drwxr-xr-x 4 root root 4096 Sep 9 09:36 /usr/lib/python2.7/site-packages/wx-3.0-gtk3/wx/lib/pubsub/core
1074158 4 drwxr-xr-x 2 root root 4096 Sep 7 03:10 /usr/lib/python2.7/site-packages/radialnet/core
So, all of the matches are directory, and because I use rm
without the -r
option, it should not delete directories, which means it should delete nothing.
However, after I ran the command, most of the things in my system broke, e.g., zsh, i3. and when I reboot my PC, I got a kernel panic, bad rip value or something.
I could reinstall again since I have separate root and home partition. But I'm very curious why it broke the system.
find rm
find rm
edited Dec 21 '18 at 1:54
Scott
15.6k113889
15.6k113889
asked Dec 21 '18 at 1:49
Rashad
81
81
Short answer: you need to be very very very careful offind
commands that contain-o
. Like you would if a snake offered you a mushroom to eat.
– Scott
Dec 21 '18 at 1:56
I know-o
means 'logical or' now, but still confused about the-prune
option. Did I just delete everything that doesn't havecore
and under lib or? everything except files under/lib' and have
core` in the name?
– Rashad
Dec 21 '18 at 3:04
Hmm. I took a quick look at the command in your question and I thought I understood what was happening. On closer examination, I don’t understand; at least not fully. Unfortunately, I don’t have time to investigate right now. … (Cont’d)
– Scott
Dec 21 '18 at 4:55
1
(Cont’d) … Look at Why does ‘find’ in Linux skip expected results when ‘-o’ is used?, Why does the “-or” flag to GNU find cause my expression to evaluate in an unexpected way?, 'find' with '-o' and '-exec chown' not working as expected and find command: -or option doesn’t work, and see whether they help you.
– Scott
Dec 21 '18 at 4:55
add a comment |
Short answer: you need to be very very very careful offind
commands that contain-o
. Like you would if a snake offered you a mushroom to eat.
– Scott
Dec 21 '18 at 1:56
I know-o
means 'logical or' now, but still confused about the-prune
option. Did I just delete everything that doesn't havecore
and under lib or? everything except files under/lib' and have
core` in the name?
– Rashad
Dec 21 '18 at 3:04
Hmm. I took a quick look at the command in your question and I thought I understood what was happening. On closer examination, I don’t understand; at least not fully. Unfortunately, I don’t have time to investigate right now. … (Cont’d)
– Scott
Dec 21 '18 at 4:55
1
(Cont’d) … Look at Why does ‘find’ in Linux skip expected results when ‘-o’ is used?, Why does the “-or” flag to GNU find cause my expression to evaluate in an unexpected way?, 'find' with '-o' and '-exec chown' not working as expected and find command: -or option doesn’t work, and see whether they help you.
– Scott
Dec 21 '18 at 4:55
Short answer: you need to be very very very careful of
find
commands that contain -o
. Like you would if a snake offered you a mushroom to eat.– Scott
Dec 21 '18 at 1:56
Short answer: you need to be very very very careful of
find
commands that contain -o
. Like you would if a snake offered you a mushroom to eat.– Scott
Dec 21 '18 at 1:56
I know
-o
means 'logical or' now, but still confused about the -prune
option. Did I just delete everything that doesn't have core
and under lib or? everything except files under /lib' and have
core` in the name?– Rashad
Dec 21 '18 at 3:04
I know
-o
means 'logical or' now, but still confused about the -prune
option. Did I just delete everything that doesn't have core
and under lib or? everything except files under /lib' and have
core` in the name?– Rashad
Dec 21 '18 at 3:04
Hmm. I took a quick look at the command in your question and I thought I understood what was happening. On closer examination, I don’t understand; at least not fully. Unfortunately, I don’t have time to investigate right now. … (Cont’d)
– Scott
Dec 21 '18 at 4:55
Hmm. I took a quick look at the command in your question and I thought I understood what was happening. On closer examination, I don’t understand; at least not fully. Unfortunately, I don’t have time to investigate right now. … (Cont’d)
– Scott
Dec 21 '18 at 4:55
1
1
(Cont’d) … Look at Why does ‘find’ in Linux skip expected results when ‘-o’ is used?, Why does the “-or” flag to GNU find cause my expression to evaluate in an unexpected way?, 'find' with '-o' and '-exec chown' not working as expected and find command: -or option doesn’t work, and see whether they help you.
– Scott
Dec 21 '18 at 4:55
(Cont’d) … Look at Why does ‘find’ in Linux skip expected results when ‘-o’ is used?, Why does the “-or” flag to GNU find cause my expression to evaluate in an unexpected way?, 'find' with '-o' and '-exec chown' not working as expected and find command: -or option doesn’t work, and see whether they help you.
– Scott
Dec 21 '18 at 4:55
add a comment |
1 Answer
1
active
oldest
votes
Some relevant fragments of find
specification:
-xdev
The primary shall always evaluate as true; it shall cause find not to continue descending past directories that have a different device ID […]. If any-xdev
primary is specified, it shall apply to the entire expression even if the-xdev
primary would not normally be evaluated.
-prune
The primary shall always evaluate as true; it shall cause find not to descend the current pathname if it is a directory. […]
[…]
The primaries can be combined using the following operators (in order of decreasing precedence):
[…]
expression [-a] expression
Conjunction of primaries; the AND operator is implied by the juxtaposition of two primaries or made explicit by the optional-a
operator. The second expression shall not be evaluated if the first expression is false.
expression -o expression
Alternation of primaries; the OR operator. The second expression shall not be evaluated if the first expression is true.
Now your command (just to have it in sight):
find / -xdev -name core -ls -o -path "/lib*" -prune -exec rm {} ;
Some conclusions and facts:
-xdev
applies to everything, even to the part after-o
.- Because juxtaposition (or
-a
) precedes-o
, your command is like( expression1 ) -o ( expression2 )
(compare this answer). - All the output you saw came from
-ls
. - Whenever
-ls
worked, the first expression was true, so the second one was not evaluated (which means matches you saw were not removed).
-path "/lib*"
matches these objects:
- directories with names matching
lib*
directly in/
, - non-directories with names matching
lib*
directly in/
,
all objects inside directories from the first bullet point(not in your case, because of-prune
).
- directories with names matching
So rm
was invoked for any object that fulfills all of the following conditions:
- It belongs to the same filesystem as
/
(because of-xdev
). - It's not named
core
(because of how-o
works). - It's directly in
/
and its name matcheslib*
.
I run this in my Kubuntu to print such objects:
find / -xdev -name core -o -path "/lib*" -prune -print
and the result was
/lib
/lib64
/lib32
Each of these is a directory, sole rm
(without -r
) cannot remove it. I'm pretty sure in my case your original command wouldn't break the system. However if any matching object was not a directory, rm
would most likely remove it.
FHS - Filesystem Hierarchy Standard says:
/lib32
and/lib64
might be the library directories, and/lib
a symlink to one of them.
I guess your /lib
may have been a symlink and rm
had no problem removing it. This location is for essential shared libraries and kernel modules (see FHS or this answer), no wonder you broke your system. I can't be sure there was no other lib*
non-directory which was also removed; but if I'm right about /lib
then maybe recreating the symlink is all you need to fix the system.
In another answer of mine the first advice is
Write 100 times "I won't run commands I don't understand as root". :)
but it looks like you have already learnt your lesson.
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "3"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1386492%2fwhy-this-hard-to-understand-find-command-broke-my-system%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Some relevant fragments of find
specification:
-xdev
The primary shall always evaluate as true; it shall cause find not to continue descending past directories that have a different device ID […]. If any-xdev
primary is specified, it shall apply to the entire expression even if the-xdev
primary would not normally be evaluated.
-prune
The primary shall always evaluate as true; it shall cause find not to descend the current pathname if it is a directory. […]
[…]
The primaries can be combined using the following operators (in order of decreasing precedence):
[…]
expression [-a] expression
Conjunction of primaries; the AND operator is implied by the juxtaposition of two primaries or made explicit by the optional-a
operator. The second expression shall not be evaluated if the first expression is false.
expression -o expression
Alternation of primaries; the OR operator. The second expression shall not be evaluated if the first expression is true.
Now your command (just to have it in sight):
find / -xdev -name core -ls -o -path "/lib*" -prune -exec rm {} ;
Some conclusions and facts:
-xdev
applies to everything, even to the part after-o
.- Because juxtaposition (or
-a
) precedes-o
, your command is like( expression1 ) -o ( expression2 )
(compare this answer). - All the output you saw came from
-ls
. - Whenever
-ls
worked, the first expression was true, so the second one was not evaluated (which means matches you saw were not removed).
-path "/lib*"
matches these objects:
- directories with names matching
lib*
directly in/
, - non-directories with names matching
lib*
directly in/
,
all objects inside directories from the first bullet point(not in your case, because of-prune
).
- directories with names matching
So rm
was invoked for any object that fulfills all of the following conditions:
- It belongs to the same filesystem as
/
(because of-xdev
). - It's not named
core
(because of how-o
works). - It's directly in
/
and its name matcheslib*
.
I run this in my Kubuntu to print such objects:
find / -xdev -name core -o -path "/lib*" -prune -print
and the result was
/lib
/lib64
/lib32
Each of these is a directory, sole rm
(without -r
) cannot remove it. I'm pretty sure in my case your original command wouldn't break the system. However if any matching object was not a directory, rm
would most likely remove it.
FHS - Filesystem Hierarchy Standard says:
/lib32
and/lib64
might be the library directories, and/lib
a symlink to one of them.
I guess your /lib
may have been a symlink and rm
had no problem removing it. This location is for essential shared libraries and kernel modules (see FHS or this answer), no wonder you broke your system. I can't be sure there was no other lib*
non-directory which was also removed; but if I'm right about /lib
then maybe recreating the symlink is all you need to fix the system.
In another answer of mine the first advice is
Write 100 times "I won't run commands I don't understand as root". :)
but it looks like you have already learnt your lesson.
add a comment |
Some relevant fragments of find
specification:
-xdev
The primary shall always evaluate as true; it shall cause find not to continue descending past directories that have a different device ID […]. If any-xdev
primary is specified, it shall apply to the entire expression even if the-xdev
primary would not normally be evaluated.
-prune
The primary shall always evaluate as true; it shall cause find not to descend the current pathname if it is a directory. […]
[…]
The primaries can be combined using the following operators (in order of decreasing precedence):
[…]
expression [-a] expression
Conjunction of primaries; the AND operator is implied by the juxtaposition of two primaries or made explicit by the optional-a
operator. The second expression shall not be evaluated if the first expression is false.
expression -o expression
Alternation of primaries; the OR operator. The second expression shall not be evaluated if the first expression is true.
Now your command (just to have it in sight):
find / -xdev -name core -ls -o -path "/lib*" -prune -exec rm {} ;
Some conclusions and facts:
-xdev
applies to everything, even to the part after-o
.- Because juxtaposition (or
-a
) precedes-o
, your command is like( expression1 ) -o ( expression2 )
(compare this answer). - All the output you saw came from
-ls
. - Whenever
-ls
worked, the first expression was true, so the second one was not evaluated (which means matches you saw were not removed).
-path "/lib*"
matches these objects:
- directories with names matching
lib*
directly in/
, - non-directories with names matching
lib*
directly in/
,
all objects inside directories from the first bullet point(not in your case, because of-prune
).
- directories with names matching
So rm
was invoked for any object that fulfills all of the following conditions:
- It belongs to the same filesystem as
/
(because of-xdev
). - It's not named
core
(because of how-o
works). - It's directly in
/
and its name matcheslib*
.
I run this in my Kubuntu to print such objects:
find / -xdev -name core -o -path "/lib*" -prune -print
and the result was
/lib
/lib64
/lib32
Each of these is a directory, sole rm
(without -r
) cannot remove it. I'm pretty sure in my case your original command wouldn't break the system. However if any matching object was not a directory, rm
would most likely remove it.
FHS - Filesystem Hierarchy Standard says:
/lib32
and/lib64
might be the library directories, and/lib
a symlink to one of them.
I guess your /lib
may have been a symlink and rm
had no problem removing it. This location is for essential shared libraries and kernel modules (see FHS or this answer), no wonder you broke your system. I can't be sure there was no other lib*
non-directory which was also removed; but if I'm right about /lib
then maybe recreating the symlink is all you need to fix the system.
In another answer of mine the first advice is
Write 100 times "I won't run commands I don't understand as root". :)
but it looks like you have already learnt your lesson.
add a comment |
Some relevant fragments of find
specification:
-xdev
The primary shall always evaluate as true; it shall cause find not to continue descending past directories that have a different device ID […]. If any-xdev
primary is specified, it shall apply to the entire expression even if the-xdev
primary would not normally be evaluated.
-prune
The primary shall always evaluate as true; it shall cause find not to descend the current pathname if it is a directory. […]
[…]
The primaries can be combined using the following operators (in order of decreasing precedence):
[…]
expression [-a] expression
Conjunction of primaries; the AND operator is implied by the juxtaposition of two primaries or made explicit by the optional-a
operator. The second expression shall not be evaluated if the first expression is false.
expression -o expression
Alternation of primaries; the OR operator. The second expression shall not be evaluated if the first expression is true.
Now your command (just to have it in sight):
find / -xdev -name core -ls -o -path "/lib*" -prune -exec rm {} ;
Some conclusions and facts:
-xdev
applies to everything, even to the part after-o
.- Because juxtaposition (or
-a
) precedes-o
, your command is like( expression1 ) -o ( expression2 )
(compare this answer). - All the output you saw came from
-ls
. - Whenever
-ls
worked, the first expression was true, so the second one was not evaluated (which means matches you saw were not removed).
-path "/lib*"
matches these objects:
- directories with names matching
lib*
directly in/
, - non-directories with names matching
lib*
directly in/
,
all objects inside directories from the first bullet point(not in your case, because of-prune
).
- directories with names matching
So rm
was invoked for any object that fulfills all of the following conditions:
- It belongs to the same filesystem as
/
(because of-xdev
). - It's not named
core
(because of how-o
works). - It's directly in
/
and its name matcheslib*
.
I run this in my Kubuntu to print such objects:
find / -xdev -name core -o -path "/lib*" -prune -print
and the result was
/lib
/lib64
/lib32
Each of these is a directory, sole rm
(without -r
) cannot remove it. I'm pretty sure in my case your original command wouldn't break the system. However if any matching object was not a directory, rm
would most likely remove it.
FHS - Filesystem Hierarchy Standard says:
/lib32
and/lib64
might be the library directories, and/lib
a symlink to one of them.
I guess your /lib
may have been a symlink and rm
had no problem removing it. This location is for essential shared libraries and kernel modules (see FHS or this answer), no wonder you broke your system. I can't be sure there was no other lib*
non-directory which was also removed; but if I'm right about /lib
then maybe recreating the symlink is all you need to fix the system.
In another answer of mine the first advice is
Write 100 times "I won't run commands I don't understand as root". :)
but it looks like you have already learnt your lesson.
Some relevant fragments of find
specification:
-xdev
The primary shall always evaluate as true; it shall cause find not to continue descending past directories that have a different device ID […]. If any-xdev
primary is specified, it shall apply to the entire expression even if the-xdev
primary would not normally be evaluated.
-prune
The primary shall always evaluate as true; it shall cause find not to descend the current pathname if it is a directory. […]
[…]
The primaries can be combined using the following operators (in order of decreasing precedence):
[…]
expression [-a] expression
Conjunction of primaries; the AND operator is implied by the juxtaposition of two primaries or made explicit by the optional-a
operator. The second expression shall not be evaluated if the first expression is false.
expression -o expression
Alternation of primaries; the OR operator. The second expression shall not be evaluated if the first expression is true.
Now your command (just to have it in sight):
find / -xdev -name core -ls -o -path "/lib*" -prune -exec rm {} ;
Some conclusions and facts:
-xdev
applies to everything, even to the part after-o
.- Because juxtaposition (or
-a
) precedes-o
, your command is like( expression1 ) -o ( expression2 )
(compare this answer). - All the output you saw came from
-ls
. - Whenever
-ls
worked, the first expression was true, so the second one was not evaluated (which means matches you saw were not removed).
-path "/lib*"
matches these objects:
- directories with names matching
lib*
directly in/
, - non-directories with names matching
lib*
directly in/
,
all objects inside directories from the first bullet point(not in your case, because of-prune
).
- directories with names matching
So rm
was invoked for any object that fulfills all of the following conditions:
- It belongs to the same filesystem as
/
(because of-xdev
). - It's not named
core
(because of how-o
works). - It's directly in
/
and its name matcheslib*
.
I run this in my Kubuntu to print such objects:
find / -xdev -name core -o -path "/lib*" -prune -print
and the result was
/lib
/lib64
/lib32
Each of these is a directory, sole rm
(without -r
) cannot remove it. I'm pretty sure in my case your original command wouldn't break the system. However if any matching object was not a directory, rm
would most likely remove it.
FHS - Filesystem Hierarchy Standard says:
/lib32
and/lib64
might be the library directories, and/lib
a symlink to one of them.
I guess your /lib
may have been a symlink and rm
had no problem removing it. This location is for essential shared libraries and kernel modules (see FHS or this answer), no wonder you broke your system. I can't be sure there was no other lib*
non-directory which was also removed; but if I'm right about /lib
then maybe recreating the symlink is all you need to fix the system.
In another answer of mine the first advice is
Write 100 times "I won't run commands I don't understand as root". :)
but it looks like you have already learnt your lesson.
answered Dec 22 '18 at 0:38
Kamil Maciorowski
24.6k155277
24.6k155277
add a comment |
add a comment |
Thanks for contributing an answer to Super User!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1386492%2fwhy-this-hard-to-understand-find-command-broke-my-system%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Short answer: you need to be very very very careful of
find
commands that contain-o
. Like you would if a snake offered you a mushroom to eat.– Scott
Dec 21 '18 at 1:56
I know
-o
means 'logical or' now, but still confused about the-prune
option. Did I just delete everything that doesn't havecore
and under lib or? everything except files under/lib' and have
core` in the name?– Rashad
Dec 21 '18 at 3:04
Hmm. I took a quick look at the command in your question and I thought I understood what was happening. On closer examination, I don’t understand; at least not fully. Unfortunately, I don’t have time to investigate right now. … (Cont’d)
– Scott
Dec 21 '18 at 4:55
1
(Cont’d) … Look at Why does ‘find’ in Linux skip expected results when ‘-o’ is used?, Why does the “-or” flag to GNU find cause my expression to evaluate in an unexpected way?, 'find' with '-o' and '-exec chown' not working as expected and find command: -or option doesn’t work, and see whether they help you.
– Scott
Dec 21 '18 at 4:55