Unix & Linux

Linux,FreeBSD和其他类似Un * x的操作系统用户的问答

3
bash变量中的新行
我正在尝试在bash变量中存储多行,但是它似乎不起作用。 例如,如果我/bin每行列出一个文件并将其存储在中$LS,那么我$LS将以stdin的形式传递给wc,则该文件始终返回1: $ ls -1 /bin | wc -l 134 $ LS=$(ls -1 /bin); wc -l <<< $LS 1 如果尝试输出到屏幕,则会得到各种结果:将echo所有行打印在一行上,而printf仅打印第一行: #!/bin/bash LS=$(ls -1 /bin) echo $LS printf $LS 那么,bash变量可以包含多行吗?
9 bash  shell  quoting 

3
如何打印带有转义序列的控制字符?
我已经用tput定义了红色 red=$(tput setaf 1) 为我的程序中的警告着色。这工作正常: printf '%sfail\n' "$red" # prints 'fail' in red 但是有一次我想按原样打印转义序列,例如: \ E [31mfail 我该怎么做?我知道printf有一个%q标志,但是它可以逃避其他我不想要的东西。

4
如何断言字符串具有换行符,如果有,请将其删除
我有一个字符串,这是我无法控制的某些操作的结果。当我使用打印此变量时echo,我得到: echo $myvar hello 但是,当我这样做 if [ $myvar = "hello" ]; then echo they are equal else echo they are not equal fi 我总是得到他们不平等。我怀疑这是因为newline角色。 该字符串的行为也很奇怪。当我做: newVAR="this is my var twice: "$myvar$myvar echo $newVAR 我得到: hellois my var twice: hello 如何检查这是否实际上是由于a引起的newline,如果是,将其删除?
9 bash  string 

2
在数组的循环中,向数组添加元素
我对bash中的for循环有问题。例如:我有一个数组("etc" "bin" "var")。我在这个数组上进行迭代。但是在循环中,我想将一些值附加到数组中。例如 array=("etc" "bin" "var") for i in "${array[@]}" do echo $i done 显示etc bin var(当然在单独的行上)。如果我这样追加do: array=("etc" "bin" "var") for i in "${array[@]}" do array+=("sbin") echo $i done 我想要:(etc bin var sbin当然在单独的行上)。 这是行不通的。我该怎么做?
9 bash  array  for 

3
sed-如何将每个第三个单词大写?
鉴于: main_east_library main_west_roof main_north_roof minor_south_roof 我怎样才能使用sed(特别是,不awk,tr等等)来创建: main_east_Library main_west_Roof main_north_Roof minor_south_Roof 就像是: $ echo "main_west_library main_west_roof main_north_roof minor_south_roof" | sed 's_\3_upcase(\3)_' 尽管这给出了: sed: -e expression #1, char 16: Invalid back reference
9 sed 

3
压缩文件可以改善压缩率吗?
可以将一堆文件一起使用标准工具(例如gzip,bzip2,xz)改善压缩率吗? 我一直以为是这种情况,但从未对其进行过测试。如果我们将同一个20Mb文件的2个副本的随机字节放在一起,那么一个聪明的压缩程序将实现将整个tarball压缩到将近20Mb。 我刚刚尝试使用gzip,bzip2和xz压缩此实验,以压缩1)一个随机字节的文件,2)包含该文件两个副本的tarball,以及3)包含该文件两个副本的cat。在所有情况下,压缩都不会减小文件大小。对于情况1,这是预期的,但对于情况2和3,最佳结果是可以将40Mb的文件压缩到接近20Mb。对于压缩程序来说,这是很难理解的,特别是因为冗余是遥不可及的,所以我不希望有完美的结果,但我仍然认为会有一些压缩。 测试: dd if=/dev/urandom of=random1.txt bs=1M count=20 cp random1.txt random2.txt cat random1.txt random2.txt > random_cat.txt tar -cf randoms.tar random1.txt random2.txt gzip -k random* & bzip2 -k random* & xz -k random* & wait du -sh random* 结果: 20+0 records in 20+0 records out 20971520 bytes (21 MB) copied, …

2
为什么printf会输出比预期更多的参数?
为什么此shell脚本打印两次输入? 我希望脚本在5之后会忽略输入。 脚本: #! /bin/bash echo "Enter 5 words : " read a b c d e printf "> %s %s %s %s %s <" $a $b $c $d $e 输出: user@linux:~$ pico ifs2.sh user@linux:~$ ./ifs2.sh Enter 5 words : 1 2 3 4 5 > 1 2 3 4 …

5
合并两个文件中的备用行
文件1: .tid.setnr := 1123 .tid.setnr := 3345 .tid.setnr := 5431 .tid.setnr := 89323 文件2: .tid.info := 12 .tid.info := 3 .tid.info := 44 .tid.info := 60 输出文件: .tid.info := 12 .tid.setnr := 1123 .tid.info := 3 .tid.setnr := 3345 .tid.info := 44 .tid.setnr := 5431 .tid.info := 60 .tid.setnr := …

7
Linux的熵来源
假设我要从/ dev / random中获取一千兆字节左右的随机数据,适合一次填充(因此/ dev / urandom消失了。)如何为我的/ dev / random注入足够的熵来做到这一点?我正在为此寻找特定的命令和程序。我不想买任何东西。我正在使用Arch Linux,如果有帮助的话。

3
如何放大我的桌面但保持字体等的高分辨率?
我最近买了一个4K屏幕(确切地说是UHD,即2160p),并在运行Arch Linux的塔上使用它。当我使用一个窗口管理器真棒运行在顶部康普顿为无泪合成,描述在这个岗位。 屏幕很大,但像素密度仍然比我以前使用的屏幕高。因此,我想扩展整个桌面(放大到整个桌面)以获得更舒适的体验(并且不再需要倾斜屏幕来阅读细小的文本)。 在缩放时,我仍然想利用屏幕的高分辨率(例如,更流畅的字体渲染),因此,我不想使用xrandr,将桌面渲染为较小的分辨率,然后放大渲染的光栅图像。 我试图找出在GUI设置(awesome => compton => X)的哪个级别上需要应用这样的配置,但是我还没有找到任何有用的信息。我也想知道这是否完全可以实现X。显然,Wayland合成器Weston支持某种形式的桌面放大和缩小。如果需要的话,当然也可以选择改用Wayland。 实际上,我觉得我对GUI渲染管道通常的工作方式有一些基本的了解(从窗口管理器开始)。如果有人可以指出一些有见地的读物,我将不胜感激。

3
注入行来重击历史
默认情况下,bash将行从加载~/.bash_history到历史记录。是否可以添加要加载的自定义文件?我想注入包含我经常使用的命令的文件,并通过内置搜索访问它们。
9 bash 

1
为什么在引用子shell并将结果传递给echo的末尾没有换行?
当我做ls | grep pnggrep的输出是: 2015-05-15-200203_1920x1080_scrot.png 2015-05-16-025536_1920x1080_scrot.png (文件名,换行符,文件名,换行符) 然后,echo $(ls | grep png)输出: 2015-05-15-200203_1920x1080_scrot.png 2015-05-16-025536_1920x1080_scrot.png (文件名,分词时的空格,文件名,换行!从echo开始!) 没关系,但是当我这样做以防止单词split:时echo "$(ls | grep png)",输出为: 2015-05-15-200203_1920x1080_scrot.png 2015-05-16-025536_1920x1080_scrot.png 我的问题是,第二个换行符在哪里(一个应该来自grep,另一个应该来自echo)?

2
如果请求的IP地址与另一个(禁用的)接口相关联,Linux不会回复ARP请求消息
我有一台PC(内核3.2.0-23-generic),它已192.168.1.2/24配置为eth0接口,并且还使用接口的地址192.168.1.1和192.168.1.2地址tun0: root@T42:~# ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:16:41:54:01:93 brd ff:ff:ff:ff:ff:ff inet 192.168.1.2/24 scope global …

4
使用CLI按日期将文件移动到其他目录
我要整理的旧硬盘中有大量图片。如果运行ls -l,我注意到所有这些文件的创建日期均为2012年或更早。理想情况下,我想将它们移动到计算机的第二个硬盘驱动器,该硬盘驱动器未设置为自动安装。最好,我可以将某些命令链接在一起,以批处理方式完成所有这些工作。到目前为止,我ls -l | grep -i 2012只在所提供的日期中吐出了2012年的文件ls -l。现在,诀窍是将cp所有这些文件都移到新目录中。我不确定下一步该怎么做,因为每个文件都必须复制。下一组命令是什么?

2
是否可以将程序安装到外部驱动器上?
我使用烤面包片在东芝chromebook上运行Ubuntu 14.04。我的操作系统所安装的驱动器很小,只有3.6 GB的可用空间。我想sage在系统上安装,但系统上sage需要6 GB的可用空间。 但是,我始终将SD卡插入本机。该卡具有175 GB的可用空间。是否可以sage在SD卡上安装? 我尝试sage使用命令下载的方式 apt-add-repository -y ppa:aims/sagemath apt-get update apt-get install sagemath-upstream-binary 如在这里找到的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.