linux 命令笔记

linux 命令笔记

1.历史命令
BASH 内置的命令 history 默认记录最后输入的 500 条命令。可以通过在命令提示符下输入 history 来查看它们。要检索某个特定的命令,可以在命令提示符下按 UP ARROW 或 DOWN ARROW,或在历史列表中输入它的编号,并在编号前面加上 "!",例如:
$ !49
如果在历史列表中有 53 个事件,$ !-3 将执行事件号 51。
2.环境变量
BASH 使用了特殊的环境变量来方便系统管理。例如:
HOME,用户主目录
PATH,Linux 用来搜索您输入的命令的可执行镜像的搜索路径
HISTSIZE,系统保存的历史事件的数量
在 /etc/profile (需要根用户权限)中进行系统范围的永久设置,或在 .profile 中进行局部永久设置。
可以用 env 命令来查看当前所有的环境变量。
3.文件处理命令
3.1.剖析一个文件列表
ls 命令用来查看用户有执行权限的任意目录中的文件列表,该命令有许多有趣的选项。例如:
$ ls -liah *
22684 -rw-r–r–    1 bluher   users         952 Dec 28 18:43 .profile
19942 -rw-r–r–    1 scalish  users          30 Jan  3 20:00 test2.out
925 -rwxr-xr-x    1 scalish  users         378 Sep  2  2002 test.sh
上面的列表显示 8 列:
第 1 列指示文件的 inode,因为我们使用了 -i 选项。剩下的列通过 -l 选项来进行正常显示。
第 2 列显示文件类型和文件访问权限。
第3 列显示链接数,包括目录。
第 4 和第 5 列显示文件的所有者和组所有者。这里,所有者 "bluher" 属于组 "users"。
第 6 列显示文件大小(单位为所显示的单位,而不是默认的字节数,因为我们使用了 -h 选项。
第 7 列显示日期(它看起来像是三列),包括月、日和年,以及当天的时间。
第 8 列显示文件名。在选项列表中使用 -a 将使列表中包含隐藏文件(如 .profile)的列表。
3.2.处理文件
可以移动 (mv)、复制 (cp) 或删除 (rm) 文件和目录。明智地使用 -i 选项,以获得确认通常是个不错的主意。
$ cp -i ls.out ls2.out
cp:overwrite `ls2.out’?
mv 命令允许使用 -b 选项,这将在移动文件之前作一个备份拷贝。rm 和 cp 接受功能强大但却危险的 -r 选项,它将在一个目录和它的文件上递归执行。
$ rm -ir Test
rm:descend into directory `Test’? y
可以用 mkdir 来创建目录,用 rmdir 来删除目录。不过,因为不能用 rmdir 来删除包含文件的目录,所以使用 rm 加 -r 选项通常要更方便些。
出于安全的原因,所有的文件都有所有权和保护。文件访问权限(或文件模式)包含之前提到的相同的 10 个字符:
第一个字符指示文件类型。最常见的是 – 代表文件,d 代表目录,而 l 代表链接。
接下来的 9 个字符是三种用户类别的访问权限:文件所有者(字符 2-4),用户组 (5-7) 和其它 (8-10),其中 r 表示读权限,w 表示写权限,x 指示一个文件上的执行权限。破折号 – 如果出现在这九个位置的任意一个,则指示这个操作对该类别的用户禁止。
可以使用 chmod 命令通过字符符号或二进制掩码来设置访问权限。要使用二进制掩码,必须将三个权限组的字符表示转换成二进制格式,然后转换成八进制格式:
用户类别: 所有者 用户组 其它
字符表示: rwx r-x r–
二进制表示: 111 101 100
八进制表示: 7 5 4
将写权限赋予用户组,您可以使用:
chmod g+w test.sh or chmod 774 test.sh
用 umask 命令,在 /etc/init.dev 文件中进行系统范围内的、或在 .profile 文件中进行的本地的文件权限默认设置。这个命令指示用 777 减去这个数字来获取默认的权限:
$ umask 022
这将为用户创建的所有新文件生成一个默认的文件权限 755。
可以用 chown 来修改文件的所有权:
$ chown bluher ls.out
这里,bluher 是新的文件所有者。类似地,组成员资格将按以下方式修改:
$ chgrp devgrp ls.out
这里,devgrp 是新的用户组。
ls 不提供哪些文件是文本的,哪些文件是二进制的的信息。要了解这个信息,您可以使用 file * 命令。
3.3.重命名文件
赋予一个文件多个名字的两种流行的方法是利用链接和 alias 命令。Alias 可以用来为一个更长的命令重新起一个更方便的名字:
$ alias ll=’ls -l’
$ ll
注意单引号的使用,这使得 BASH 将该项目传递给别名,而不是自己估计它。别名还可用作较长的路径名的缩写:
$ alias jdev9i=/jdev9i/jdev/bin/jdev
关于 alias 和它的反命令 unalias 的更多信息,请查看 BASH 的 man 页面的 "SHELL BUILTIN COMMANDS" 子部分。在最后一个例子中,定义了一个环境变量来实现相同的结果。
$ export JDEV_HOME=/jdev9i/jdev/bin/jdev
$ echo $JDEV_HOME
/jdev9i/jdev/bin/jdev
$ $JDEV_HOME
链接允许几个文件名引用单个源文件,格式如下:
 
ln [-s] fileyouwanttolinkto newname
单独的 ln 命令创建到文件的一个硬链接,而使用 -s 选项来创建一个符号链接。简而言之,一个硬链接几乎不能和原始的文件区分开(除了这两个文件的 inode 将相同之外)。符号链接较容易区分,因为它们出现在一个长的文件列表中,并用 -> 来指示源文件,l 指示文件类型。
4.查看文件
诸如 cat、 more 和 less 之类的命令让您能够从命令行查看一个文本文件的内容,而无需调用编辑器。Cat 是 "concatenate" 的缩写,它将默认地在标准输出(显示屏)上显示文件内容。和 cat 一起提供的最有趣的选项之一是 -n 选项,它用编号的输出行来显示文件内容。
$ cat -n test.out
1  This is a test.
因为 cat 一次性输出文件中的所有行,所以您可能更喜欢用 more 和 less,因为它们都一次输出一屏的文件内容。Less 是 more 的一个增强的版本,它允许用来自 vi 文本编辑器的关键命令来增强文件查看。例如,d 向前翻滚、b 向后翻滚 N 行(如果 N 是在 d 或 b 之前指定的)。为 N 输入的值成为随后的 d 命令的默认值。man 页面实用工具使用 less 来显示使用说明的内容。
5.重定向和管道
重定向允许将命令输出重定向到文件中,而不是标准输出,或者类似地,也可重定向输入。重定向的标准符号 > 创建一个新的文件。>> 符号将输出添加到一个现有的文件中:
$ more test2.out
Another test.
$ cat test.out >> test2.out
$ cat test2.out
Another test.
This is a test.
到文件的标准输入可以用 < 符号来重定向:
$ cat < test2.out
错误消息用 2> 和 2>> 来重定向和添加,格式如下:
$ command 2> name_of_error_file
要避免无意地覆盖一个现有的文件,使用 BASH 内置的命令集:
$ set -o noclobber
可以在命令和输出文件之间用 >! 符号来重载这个特性。要关闭这个特性,用 +o 代替 -o。
重定向在一个命令和文件之间、或文件和文件之间工作。重定向语句的一项必须是一个文件。
管道使用 |符号,并且在命令之间工作。例如,您可以用以下方式将一个命令的输出直接发送到打印机上:
$ ls -l * | lpr
可以用以下方式快速地找到历史列表中的一个命令:
$ history | grep cat
6.更多的滤波器
Grep、fgrep 和 egrep 都显示匹配一种模式的行。所有这三个命令都在文件中搜索指定的模式,如果您想不起来一个所需文件的名称,这将非常有用。基本格式是:
grep [options] PATTERN [FILE…]
$ grep -r ‘Subject’ nsmail
CTRL-Z 将终止上述或其它任何命令。
grep 的最有用的选项可能是 -s。如果您以除根用户之外的任何身份搜索系统文件,那么对于每一个您没有访问权限的文件,都将产生错误消息。这个命令禁止那些消息。
Fgrep(也以 grep -F 调用)只查找固定的字符串,而不是 grep 接收的正则表达式。而 egrep 接收包含更大范围的特殊字符(如 “|”,它指示条件 OR 运算符)的模式。
$ egrep ‘Subject|mailto’ *
7.查找文件
find 命令的 GNU 版本非常强大、灵活并且比 UNIX 系统上存在的经典版本更具包容性。它对于涉及到目录结构的任务非常有用,包括在文件上查找和执行命令。find 命令的基本格式是:
$ find startdirectory options matchcriteria [actionoptions]
如果您知道文件的名称、或者甚至名称的一部分,但不知道它所处的目录,您可以这么做:
$ find .-name ‘test*’
./test
./jdevhome/mywork/EmpWS/EmpBC4J/test
与经典的 UNIX 系统不同,在 Linux 中不需要在末尾添加 -print 操作,因为如果没有指定其它的操作选项,就将假定执行这个操作。在目录起始位置上的一个点 ( . ) 将使 find 在您的工作目录中开始搜索。两个点, ..,在父目录中开始搜索。您可以在任意目录下开始搜索。
注意,您可以使用通配符作为搜索准则的一部分(只要用单引号将整个项目括起来)。
$ find .-name ‘test*’ -print
./test.out
./test2.out
显示拥有 .out 扩展名的一系列文件:
$ find /home -name ‘*.out’
不过记住,除非您是作为超级用户运行这个命令,否则您将可能得到许多的 "Permission denied" 错误消息。
最强大的搜索工具之一是和 grep 一起使用的 -exec 操作:
$ find .-name ‘*.html’ -exec grep ‘mailto:foo@yahoo.com’ {} ;
访问并将 Linux 技术中心添加到收藏夹
 
.,查找一个 html 文件,*.html,并在当前文件上执行 (-exec) grep 命令,{}。当使用 -exec 操作时,需要一个分号 ;,这是用来在使用 find 命令时执行其它一些操作。需要反斜线 和引号来确保这些项目通过 BASH,以使它们由命令而不是 shell 来进行解释。
 

One thought on “linux 命令笔记

  1. wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling -229638020889809

Leave a Reply

Your email address will not be published. Required fields are marked *