Unix & Linux

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

4
使用回显打印彩色文本
我知道使用回声(例如红色)打印彩色文本的代码是:echo -e "\e[1;31m This is red text \e[0m" 并且我知道在此示例中,31是红色代码,其他颜色的数量是: Black 0;30 Dark Gray 1;30 Blue 0;34 Light Blue 1;34 Green 0;32 Light Green 1;32 Cyan 0;36 Light Cyan 1;36 Red 0;31 Light Red 1;31 Purple 0;35 Light Purple 1;35 Brown 0;33 Yellow 1;33 Light Gray 0;37 White 1;37 对于背景色,数字是40到47 我的问题是:\e和[和m(31岁以后)在这里到底是什么意思?我在手册页中读到\ …


1
什么会导致vim不保留命令历史记录?
在我运行过的其他发行版中,vim甚至在两次会话之间都会记住您的命令历史记录;在不同文件上执行许多类似操作时,这特别方便。 由于某种原因,它在Ubuntu 12.04中一直处于刷新状态,我不知道为什么。这是我的:set信息: :set --- Options --- background=dark helplang=en history=1000 nomodeline scroll=27 showmatch ttyfast expandtab hidden incsearch ruler showcmd softtabstop=4 ttymouse=xterm2 backspace=indent,eol,start fileencoding=utf-8 fileencodings=ucs-bom,utf-8,default,latin1 printoptions=paper:letter runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim73,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after suffixes=.bak,~,.swp,.o,.info,.aux,.log,.dvi,.bbl,.blg,.brf,.cb,.ind,.idx,.ilg,.inx,.out,.toc

3
了解Unix文件名编码
我很难理解文件名编码的工作方式。在unix.SE上,我发现矛盾的解释。 文件名存储为字符 引用另一个答案: 关于Linux上文件系统字符编码的几个问题 正如您在问题中提到的[…],UNIX文件名只是一个字符序列;内核对编码一无所知,而编码完全是用户空间(即应用程序级)的概念。 如果文件名存储为字符,则必须进行某种编码,因为最后文件名必须以磁盘上的位或字节序列结尾。如果用户可以选择任何编码来将字符映射到馈送给内核的字节序列,则可以为有效文件名创建任何字节序列。 假设以下内容:用户使用随机编码X,它将文件foo转换为字节序列α并将其保存到磁盘。另一个用户使用编码ÿ。在这种编码中,α转换为/,不允许作为文件名。但是,对于第一个用户,该文件有效。 我认为这种情况不会发生。 文件名存储为二进制Blob 引用另一个答案: 在Linux上,文件名和路径使用哪种字符集编码? 正如其他人所指出的那样,这确实没有答案:文件名和路径没有编码。OS仅处理字节序列。各个应用程序可能选择将它们解释为以某种方式进行编码,但这有所不同。 如果系统不处理字符,如何在文件名中禁止使用特定字符(例如/或NULL)?没有/ 编码就没有a的概念。 一种解释是,文件系统可以存储包含任何 字符的文件名,只有考虑到编码的用户程序才会阻止包含无效字符的文件名。反过来,这意味着文件系统和内核可以毫无困难地处理包含/。的文件名。 我也认为这是错误的。 编码在哪里进行,不允许使用特定字符的限制在哪里?

5
为什么有些字符在Chrome中显示为正方形?
例如,在开发工具中,我得到如下信息: 其中一些方块位于行尾,最初我以为是回车,但事实并非如此。 此外,广场出现后=或>在许多地方没有换行,并期待在十六进制编辑器显示该文件不存在根本之间的任何字符=和"(例如id="被显示为id=? ") 有时在网页中也会出现这种情况,例如,我看到了: 我复制了该句子,在十六进制编辑器中查看了该句子,并且再次在e和之间没有字符:。源代码中也没有显示任何内容。 我以前从未见过此消息,而且只有在几天前重新安装arch之后才见过。 Chrome是:Version 19.0.1084.15 dev Arch是:Kernel 3.3.1-1-ARCH,x86_64 locale.gen具有未en_GB注释的语言环境(UTF-8和ISO-8859-1)。chrome中的编码默认为ISO-8859-1,但将其切换为UTF-8不会造成任何影响。 这是我使用的html文件:test.html 一个修复程序将是很棒的,解释将是很棒的,确认这是(或不是)我的安装程序中的一个问题也很好。 编辑:研究字体后,我发现在两种情况下都试图使用arial,它在arch中是ttf-ms-fonts软件包的一部分。安装后会导致字体更改,但是正方形仍然保留(尽管形状不同)。在这两种情况下,字体都不符合系统的默认字体。


2
为什么ls排序会忽略非字母数字字符?
在对文件名进行排序时,请ls忽略诸如之类的字符-,_。我希望它也可以使用这些字符进行排序。 一个例子: touch a1 a2 a-1 a-2 a_1 a_2 a.1 a.2 a,1 a,2 现在显示以下文件ls -1: a1 a_1 a-1 a,1 a.1 a2 a_2 a-2 a,2 a.2 我所期望的是这样的: a1 a2 a,1 a,2 a.1 a.2 a_1 a_2 a-1 a-2 即我希望排序时要考虑非字母数字字符。 谁能解释这种行为?此行为是由标准强制执行的吗?还是因为编码为UTF-8? 更新:看来这与UTF-8排序有关: $ LC_COLLATE=C ls -1 a,1 a,2 a-1 a-2 a.1 a.2 a1 …
25 ls  sort 

2
从变量中删除所有空格,制表符,换行符等?
这是我遇到的错误,由于一个变量的值应该为2(我使用a来获取)而失败select * from tabel。我在该变量中得到空格。 + 0 != 2 ./setjobs[19]: 0: not found. 如何从该变量中删除所有这些空格或换行符?灿tr,sed或什么帮助? 这是我在做什么: set_jobs_count=$(echo "set heading off; select count(*) from oppar_db where ( oppar_db_job_name, oppar_db_job_rec ) in ($var) ;" | \ sqlplus -s ${OP_ORA_USER}/${OP_ORA_PASS}@$OPERATIONAL_DB_NAME) 如建议的那样工作: | sed 's/[[:space:]]//g' 但是我仍然获得像这样的值: set_jobs_count= 2
25 shell  sed  tr  whitespace  newlines 

1
CFS的CPU使用率高吗?
我问了一个先前的问题,试图找出将应用程序从RHEL 5迁移到RHEL 6时CPU使用率增加的原因。我所做的分析似乎表明,这是由内核中的CFS引起的。我编写了一个测试应用程序来尝试验证是否是这种情况(已删除原始测试应用程序以适合大小限制,但仍在git repo中提供)。 我在RHEL 5上使用以下命令对其进行了编译: cc test_select_work.c -O2 -DSLEEP_TYPE=0 -Wall -Wextra -lm -lpthread -o test_select_work 然后,我使用这些参数,直到在Dell Precision m6500上每次迭代的执行时间约为1 ms。 我在RHEL 5上得到以下结果: ./test_select_work 1000 10000 300 4 time_per_iteration: min: 911.5 us avg: 913.7 us max: 917.1 us stddev: 2.4 us ./test_select_work 1000 10000 300 8 time_per_iteration: min: 1802.6 us avg: …

6
如何通过窗口管理器绑定在与上次使用的终端相同的目录中打开新终端?
我使用的是平铺窗口管理器,并且从gnome-terminal多个选项卡切换到urxvt了窗口管理器管理的多个实例。我错过的功能之一是能够打开默认为上一个工作目录的新终端。 简而言之:我需要一种方法来打开一个新的urxvt(bash),默认值为上次使用的$ xpWD。 我想到的唯一解决方案是使用以下方式保存当前路径cd: echo $PWD > ~/.last_dir 并以这种方式在新终端上还原路径: cd `cat ~/.last_dir` 我可以输入第二个命令,.bashrc但是我不知道如何在每次目录更改时执行第一个命令:) 任何不涉及screen或不tmux使用的更简单的解决方案都是值得欢迎的。

4
Linux中“ /etc/init.d”和“ /etc/rcX.d”目录之间的连接是什么?
我正在从一本名为《Linux命令行和Shell脚本圣经,第二版》的书中学习命令行。该书指出: 一些Linux实现包含一张在启动时自动启动的进程表。在Linux系统上,该表通常位于特殊文件/ etc / inittabs中。 其他系统(例如流行的Ubuntu Linux发行版)则使用/etc/init.d文件夹,该文件夹包含用于在启动时启动和停止各个应用程序的脚本。脚本通过/etc/rcX.d文件夹下的条目启动,其中X是运行级别。 可能是因为我是Linux新手,所以我不明白第二段引用的含义。有人可以用更简单的语言来解释吗?


1
内核源代码树包含什么?这与Linux内核标头有关吗?
在书籍,我通常在阅读到Linux源代码树的引用/usr/src/linux与通常的组子目录(arch,block,crypto,...)。 我期望这棵树包含组成内核的二进制文件。在我的系统中(Ubuntu 10.04)... 对于我拥有的不同内核(使用自动软件下载,未手动安装),我在此位置找到了每个内核的两个子目录,如下所示: /usr/src/linux-headers-2.6.32-22 /usr/src/linux-headers-2.6.32-22-generic 在子目录中,我希望使用二进制文件等。但是,我检查了相当数量的树,并且这里的最后一个子目录似乎总有一个Makefile(读取时,听起来通常更像是配置文件,然后是安装文件),偶尔还有一些孤立的其他文件(主要是Kconfig)。 我的问题可能很幼稚,但我有些困惑。是(2)我应该在内核源代码树中看到的内容;为什么我要明确提及“标题”?我需要linux-generic-headers为其他一些软件安装一段时间,并且不确定是否可能与之相关。我知道生成文件有充分的理由(例如,将模块安装在/ driver子目录中),但是(几乎)只有生成文件吗?
25 ubuntu  kernel  source 

3
少用管道?
可以更少地跟踪(通过按F)管道输入(类似于文件)吗?对于正在写入的文件,命令 less <file> 按F时将跟随文件。 但是如果我有一条命令将输出直接传送到更少的内容,像这样 command | less 按F不会执行任何操作。 如此看来,管道无法像文件一样被追踪?也许与写STDERR的命令有关?我试图实现的效果始终是看到命令的最新输出:就像按住PageDown一样! 有一个相关的说法适用于G(结束):当直接传递给小号时,它将不起作用。
25 pipe  less  tail 

2
鼠标事件在Linux中如何工作?
这主要是出于好奇,我试图了解事件处理的底层原理,所以请不要将我引向能够为我做的软件。 例如,如果我想用C / C ++编写一个能够对鼠标单击做出反应的程序,那么我假设我需要使用系统调用将某些功能连接到内核,或者也许您只需要不断检查鼠标的状态,我不知道。 我认为这是有可能的,因为在C / C ++中几乎所有功能都是如此,它是如此低的水平,尽管我可能永远不必自己实现它,但我对它的工作方式最感兴趣。 问题是它如何在linux中工作,是否存在某些系统调用,c库等?
25 linux  devices  input 

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.