在其他网站有人问我这个问题,即一个名为“abc.dat”的文件有0个文件大小但有8个块,这是我让他给我的输出(部分文本已从中文翻译成英文):
$ cp abc.dat abc2.dat; ls -ls abc2.dat #try to copy, it still 8 blocks but 0 byte
8 -rw-rw-r-- 1 rokeabbey rokeabbey 0 Feb 27 19:39 abc2.dat
Run Code Online (Sandbox Code Playgroud)
8 -rw-rw-r-- 1 rokeabbey rokeabbey 0 Sep 18 19:11 abc.dat #sorry,这可能是他添加的额外错误输出
$ stat abc.dat
File: 'abc.dat'
Size: 0 Blocks: 16 IO Block: 4096 regular empty file
Device: 32h/50d Inode: 3715853 Links: 1
Access: (0664/-rw-rw-r--) Uid?( 1000/rokeabbey) Gid?( 1000/rokeabbey)
Access: 2018-02-26 21:13:57.640639992 +0800
Modify: 2017-09-18 19:11:42.221533011 +0800
Change: 2017-09-18 19:11:42.221533011 +0800
Birth: - …Run Code Online (Sandbox Code Playgroud) 假设我用这个创建了一个文件名:
xb@dnxb:/tmp/test$ touch '"i'"'"'m noob.mp4"'
xb@dnxb:/tmp/test$ ls -1
"i'm noob.mp4"
xb@dnxb:/tmp/test$
Run Code Online (Sandbox Code Playgroud)
然后vim .进入 Netrw 目录列表。
" ============================================================================
" Netrw Directory Listing (netrw v156)
" /tmp/test
" Sorted by name
" Sort sequence: [\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$
" Quick Help: <F1>:help -:go up dir D:delete R:rename s:sort-by x:special
" ==============================================================================
../
./
"i'm noob.mp4"
Run Code Online (Sandbox Code Playgroud)
然后按Enter查看文件。类型:
:!ls -l %
Run Code Online (Sandbox Code Playgroud)
它会显示错误:
xb@dnxb:/tmp/test$ vim .
ls: cannot access '/tmp/test/i'\''m noob.mp4': No such file or directory
shell returned 2
Press ENTER or type command …Run Code Online (Sandbox Code Playgroud) 以下是bash日志的一部分,完整的日志可以在https://gist.github.com/limkokhole/f2a423112aa005f10862获取:
[xiaobai@xiaobai hello]$ dnf --verbose download --source readline
cachedir: /var/cache/dnf
Loaded plugins: noroot, needs-restarting, reposync, copr, playground, kickstart, Query, generate_completion_cache, builddep, download, config-manager, protected_packages, system-upgrade, debuginfo-install
DNF version: 0.6.4
repo: using cache for: spot-chromium
not found deltainfo for: Copr repo for chromium owned by spot
not found updateinfo for: Copr repo for chromium owned by spot
repo: using cache for: rpmfusion-nonfree-updates-testing
not found deltainfo for: RPM Fusion for Fedora 21 - Nonfree - Test Updates
not found updateinfo …Run Code Online (Sandbox Code Playgroud) 假设我使用notify-send这些长消息:
notify-send 'd: title, up/down: zoom, w: win_to_img, </>: rotate, *: orig, Enter/0: blah blah blah'
Run Code Online (Sandbox Code Playgroud)
但它会截断消息,只显示其中的一部分,而没有查看完整消息的选项:
使用 Fedora 21,我能够查看完整消息(在底部弹出滚动条),但使用 Fedora 24 则无法查看。
版本notify-send是 libnotify-0.7.6-8.fc24.i686。
无论如何要在 Fedora 24 中显示完整消息吗?
这是来自 gedit 编辑器的视图:

和 vim 编辑器的视图:

然后我尝试 grep 它,如果我把 Log 而不是 Tog,它确实 grep 成功,但输出已损坏:
[xiaobai@xiaobai grep]$ grep Tog test
[xiaobai@xiaobai grep]$ grep Log test
Dtring.valueOf
[xiaobai@xiaobai grep]$
Run Code Online (Sandbox Code Playgroud)
然后我找到文件,它也损坏了:
[xiaobai@xiaobai grep]$ cat test
Dtring.valueOf
[xiaobai@xiaobai grep]$
Run Code Online (Sandbox Code Playgroud)
所以我使用十六进制转储:
[xiaobai@xiaobai grep]$ hexdump -C test
00000000 4c 6f 67 2e 64 28 22 6d 75 73 69 63 22 2c 20 22 |Log.d("music", "|
00000010 4e 41 56 49 47 41 54 4f 52 3a 20 22 20 2b 20 53 |NAVIGATOR: " + …Run Code Online (Sandbox Code Playgroud) 我使用shopt -s nocaseglob命令忽略大小写,但如果我使用没有 glob 的字符串,它似乎不起作用。

只是出于好奇的一个问题,是否可以在不使用通配符的情况下忽略大小写?即ls a会输出a和A
据我了解,守护进程是后台进程,但守护进程需要唯一的配置文件来设置环境变量。
例如,Hadoop守护进程需要hadoop-env.sh来设置环境变量JAVA_HOME,你不能简单地从中获取变量~/.bashrc。
原因是因为守护进程作为后台进程意味着它是非交互式的,而 ~/.bashrc 意味着仅在交互式会话中使用,以防止出现alias cp='cp -i'case。
最新的~/.bashrc文件顶部有安全防护不允许非交互式调用者,即没有-i选项将提前返回:
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
Run Code Online (Sandbox Code Playgroud)
这让我想知道为什么 bashrc 不将配置文件分为 3 组,例如:
~/.bashrc_interactive
~/.bashrc_non_interactive
~/.bashrc_global #(交互式和非交互式)
因此用户只需JAVA_HOME在~/.bashrc_non_interactive或中设置即可~/.bashrc_global,无需在每个守护程序文件中一遍又一遍地添加此环境变量。
是否有任何原因或限制 bashrc 不支持这种方式或任何其他方式的非交互式?或者我误解了一些概念?
我注意到存在默认波浪号+别名:
[root@xiaobai ~]# cd ~[press Tab]
~abrt/ ~dbus/ ~lp/ ~openvpn/ ~root/ ~systemd-network/
~adm/ ~ftp/ ~mail/ ~operator/ ~rpc/ ~systemd-resolve/
~apache/ ~games/ ~mpd/ ~pkg-build/ ~rpcuser/ ~systemd-timesync/
~avahi/ ~gdm/ ~mysql/ ~polkitd/ ~rtkit/ ~tcpdump/
~avahi-autoipd ~geoclue/ ~nfs4user/ ~postfix/ ~saslauth/ ~toranon/
~bin/ ~gnome-initial-setup ~nfsnobody/ ~postgres/ ~shutdown/ ~tss
~chrony/ ~halt/ ~nm-openconnect/ ~pulse ~sshd/ ~unbound/
~colord/ ~iguanair/ ~nobody/ ~qemu/ ~sync/ ~usbmuxd/
~daemon/ ~ldap/ ~ntop/ ~radvd/ ~systemd-bus-proxy/ ~xiaobai/
[root@xiaobai ~]# cd ~halt
[root@xiaobai sbin]# pwd
/sbin
[root@xiaobai sbin]# l ~halt
14 lrwxrwxrwx. 1 root root 8 Nov 18 …Run Code Online (Sandbox Code Playgroud) 目前我的提示是:
xiaobai@dnxb:/tmp$
root@dnxb:/tmp#
Run Code Online (Sandbox Code Playgroud)
我想要的提示:
xb@dnxb:/tmp$
rt@dnxb:/tmp#
Run Code Online (Sandbox Code Playgroud)
我的想法是用户名的别名,所以我尝试重用相同的 uid 来创建一个新用户:
xiaobai@dnxb:~$ sudo useradd -ou 1000 -g1000 -d /home/xiaobai -s /bin/bash xb
xiaobai@dnxb:~$ su
Password:
root@dnxb:/home/xiaobai# passwd xb
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@dnxb:/home/xiaobai# exit
xiaobai@dnxb:~$ su xb
Password:
xiaobai@dnxb:~$ pwd
/home/xiaobai
xiaobai@dnxb:~$ PS1='\u:\W\$ '
xiaobai:~$ exit
xiaobai@dnxb:~$ id
uid=1000(xiaobai) gid=1000(xiaobai) groups=1000(xiaobai),27(sudo)
xiaobai@dnxb:~$
Run Code Online (Sandbox Code Playgroud)
对于 PS1 '\u',它不会更改为 xb。如果是这样,如何?
bash ×4
bashrc ×1
cat ×1
daemon ×1
directory ×1
disk-usage ×1
dnf ×1
ecryptfs ×1
fedora ×1
filenames ×1
files ×1
filesystems ×1
gnome-shell ×1
grep ×1
history ×1
interactive ×1
libnotify ×1
ls ×1
notify-send ×1
prompt ×1
quoting ×1
repository ×1
rhel ×1
rpm ×1
terminal ×1
tilde ×1
uid ×1
useradd ×1
users ×1
vim ×1
wildcards ×1