上一篇:Linux常用命令(二):
1、查看系统信息
2、磁盘管理工具(参考)
(1)df:列出文件系统的整体磁盘使用量
(2)du:检查磁盘空间使用量,与df命令不同的是,du命令是对文件和目录磁盘使用的空间的查看
(3)fdisk:用于磁盘分区
(4)mkfs:格式化
(5)fsck:磁盘检查
(6)mount:磁盘挂载
(7)unmount:磁盘卸载
3、文件查找find(参考)
(1)find语法:
(2)使用示例
4、xargs命令
(1)命令行参数和标准输入的区别(参考)
(2)xargs与管道 | 的不同
(3)xargs选项介绍(参考)
(4)使用示例
下一篇:Linux常用命令(四)
(1)查看cpu的方法:cat /proc/cpuinfo 或者 更直观的查看cpu的型号命令:dmesg |grep -i xeon
(2)查看内存的方法:cat /proc/meminfo 或者 更直观的查看内存的命令:free -m
语法:df [-ahikHTm] [目录或文件名]
选项与参数:
示例:将容量结果以易读的容量格式显示出来:df -h
语法:du [-ahskm] 文件或目录名称
选项与参数:
示例:列出当前目录占的总量:du -sh .
语法:fdisk [-l] 装置名称
选项与参数:
示例:查看/dev/hdc装置的磁盘分区:fdisk /dev/hdc
输入 m 后,就会看到底下这些命令介绍:
Command (m for help): m <== 输入 m 后,就会看到底下这些命令介绍
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition <==删除一个partition
l list known partition types
m print this menu
n add a new partition <==新增一个partition
o create a new empty DOS partition table
p print the partition table <==在屏幕上显示分割表
q quit without saving changes <==不储存离开fdisk程序
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit <==将刚刚的动作写入分割表
x extra functionality (experts only)
语法:mkfs [-t 文件系统格式] 装置文件名
选项与参数:
示例:将分区 /dev/hdc6(可指定你自己的分区) 格式化为 ext3 文件系统: mkfs -t ext3 /dev/hdc6
语法:fsck [-t 文件系统] [-ACay] 装置名称
选项与参数:
语法:mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点
实例:将刚刚创建的 /dev/hdc6 挂载到 /mnt/hdc6 上面:
$ mkdir /mnt/hdc6
$ mount /dev/hdc6 /mnt/hdc6
语法:umount [-fn] 装置文件名或挂载点
选项与参数:
实例:卸载/dev/hdc6 :umount /dev/hdc6
find pathname -option [-print] [-exec -ok command] {} \
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
-option选项如下:
-name filename #查找名为filename的文件
-perm #按执行权限来查找
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查GIN: 0px">
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 #找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio %; #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune #忽略某个目录
$find ~ -name "*.txt" -print #在$HOME中查.txt文件并显示
$find . -name "*.txt" -print #在当前目录中查.txt文件并显示
$find . -name "[A-Z]*" -print #查以大写字母开头的文件
$find /etc -name "host*" -print #查以host开头的文件
$find . -name "[a-z][a-z][0–9][0–9].txt" -print # 查以两个小写字母和两个数字开头的txt文件
$find . -perm 755 -print #当前目录中查找权限为755的文件
$find . -perm -007 -exec ls -l {} \; #查所有用户都可读写执行的文件同-perm 777
$find . -type d -print #查找目录文件并打印
$find . ! -type d -print #查找非目录文件并打印
$find . -type l -print #查找符号链接文件并打印
$find . -size +1000000c -print #查长度大于1Mb的文件
$find . -size 100c -print #查长度为100c的文件
$find . -size +10 -print #查长度超过期作废10块的文件(1块=512字节)
我们知道,linux命令可以从两个地方读取要处理的内容,一个是通过命令行参数,一个是标准输入。例如cat、grep就是这样的命令,举个例子:
echo 'main' | cat test.cpp
这种情况下cat会输出test.cpp的内容,而不是'main'字符串,如果test.cpp不存在则cat命令报告该文件不存在,并不会尝试从标准输入中读取。echo 'main' | 会通过管道将 echo 的标准输出(也就是字符串'main')导入到 cat 的标准输入,也就是说此时cat的标准输入中是有内容的,其内容就是字符串'main'。但是上面的内容中cat不会从它的标准输入中读入要处理的内容。其实基本上linux的命令中很多的命令的设计是先从命令行参数中获取参数,然后再从标准输入中读取,反映才程序上,命令行参数是通过main函数的 int main(int argc,char*argv[]) 函数参数获得的,而标准输入则是通过标准输入函数例如C语言中的scanf读取到的。他们获取的地方是不一样的。例如:
echo 'main' | cat
这条命令会中cat会从其标准输入中读取内容并处理,也就是会输出 'main' 字符串。echo命令将其标准输出的内容 'main' 通过管道定向到 cat 的标准输出中。
cat
如果仅仅输入cat并回车,则该程序会等待输入,我们需要从键盘输入要处理的内容给cat,此时cat也是从标准输入中得到要处理的内容的,因为我们的cat命令行中也没有指定要处理的文件名。大多数命令有一个参数 - 如果直接在命令的最后指定 - 则表示从标准输入中读取,例如:
echo 'main' | cat -
这样也是可行的,会显示 'main' 字符串,同样输入 cat - 直接回车与输入 cat 直接回车的效果也一样,但是如果这样呢:
echo 'main' | cat test.cpp -
同时指定test.cpp 和 - 参数,此时cat程序还是会显示test.cpp的内容。但是有一个程序的策略则不同,它是grep,例如:
echo 'main' | grep 'main' test.cpp -
输出:
test.cpp:int main()
(standard input):main
此时grep会同时处理标准输入和文件test.cpp中的内容,也就是说会在标准输入中搜索 'main' ,也会在文件 test.cpp (该文件名从grep命令行参数中获得)中搜索 'main'。也就是说当命令行中 test.cpp 和 - 两个参数同时存在的时候,不同的程序处理不同。我们看到了cat与grep处理就不同。但是有一点是一样的 ,首先在命令行中查找要处理的内容的来源(是从文件还是从标准输入,还是都有),如果在命令行中找不到与要处理的内容的来源相关的参数则默认从标准输入中读取要处理的内容了。另外很多程序是不处理标准输入的,例如 kill , rm 这些程序如果命令行参数中没有指定要处理的内容则不会默认从标准输入中读取。所以:
echo '516' | kill
或
echo 'test' | rm -f
这两种种命里是不能执行的。这两个命令只接受命令行参数中指定的处理内容,不从标准输入中获取处理内容。而日常工作中有有这个必要,所以就有了xargs命令。
xargs与管道有什么不同呢,这是两个很容易混淆的东西,看了上面的xargs的例子还是有点云里雾里的话,我们来看下面的例子弄清楚为什么需要xargs:
echo '--help' | cat
输出:
--help
echo '--help' | xargs cat
输出:
Usage: cat [OPTION]... [FILE]...
Concatenate FILE(s), or standard input, to standard output.
-A, --show-all equivalent to -vET
-b, --number-nonblank number nonempty output lines
-e equivalent to -vE
-E, --show-ends display $ at end of each line
-n, --number number all output lines
-s, --squeeze-blank suppress repeated empty output lines
-t equivalent to -vT
-T, --show-tabs display TAB characters as ^I
-u (ignored)
-v, --show-nonprinting use ^ and M- notation, except for LFD and TAB
--help display this help and exit
--version output version information and exit
With no FILE, or when FILE is -, read standard input.
Examples:
cat f - g Output f's contents, then standard input, then g's contents.
cat Copy standard input to standard output.
Report cat bugs to [email protected]
GNU coreutils home page:
General help using GNU software:
For complete documentation, run: info coreutils 'cat invocation'
echo '--help' | xargs cat
等价于cat --help。什么意思呢,就是xargs将其接受的字符串 --help 做成cat的一个命令行参数来运行cat命令,同样echo 'test.c test.cpp' | xargs cat等价于cat test.c test.cpp,此时会将test.c和test.cpp的内容都显示出来。$ echo "/ / "|xargs echo
/ /
$ echo "/ / "|xargs -0 echo
/ /
$ cat 1.txt
aaa bbb ccc ddd
a b
$ xargs -a 1.txt echo
aaa bbb ccc ddd a b
$ cat 1.txt.bak
aaa@ bbb ccc@ ddd
a b
$ cat 1.txt.bak |xargs -d '@' echo
aaa bbb ccc ddd
a b
$ xargs -E 'ddd' -a 1.txt echo
aaa bbb ccc
$ cat 1.txt |xargs -E 'ddd' echo
aaa bbb ccc
$ cat 1.txt |xargs -n 2 echo
aaa bbb
ccc ddd
a b
$ cat 1.txt |xargs -p echo
echo aaa bbb ccc ddd a b ?...y
aaa bbb ccc ddd a b
$ cat 1.txt |xargs -p echo
echo aaa bbb ccc ddd a b ?...n
$ cat 1.txt |xargs -t echo
echo aaa bbb ccc ddd a b
aaa bbb ccc ddd a b
$ ls
1.txt 2.txt 3.txt log.xml
$ ls *.txt |xargs -t -i mv {} {}.bak
mv 1.txt 1.txt.bak
mv 2.txt 2.txt.bak
mv 3.txt 3.txt.bak
$ ls
1.txt.bak 2.txt.bak 3.txt.bak log.xml
$ echo ""|xargs -t mv
mv
mv: missing file operand
Try `mv --help' for more information.
$ echo ""|xargs -t -r mv #直接退出
$ cat 1.txt.bak |xargs -s 9 echo
aaa
bbb
ccc
ddd
a b
$ cat 1.txt.bak |xargs -s 4 echo
xargs: can not fit single argument within argument list size limit #length(echo)=4
$ cat 1.txt.bak |xargs -s 8 echo
xargs: argument line too long #length(echo)=4,length(aaa)=3,length(null)=1,total_length=8
$ cat 1.txt.bak
aaa bbb ccc ddd
a b
ccc
dsds
$ cat 1.txt.bak |xargs -L 4 echo
aaa bbb ccc ddd a b ccc dsds
$ cat 1.txt.bak |xargs -L 1 echo
aaa bbb ccc ddd
a b
ccc
dsds
# find . -perm -7 -print | xargs chmod o-w
# find . -type f -print | xargs file
./liyao: empty
$find ~ -name ‘*.log’ -print0 | xargs -i -0 rm -f {}
# find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz
# ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory