读书人

小弟我的linux学习笔记-近期整理的lin

发布时间: 2012-07-19 16:02:19 作者: rapoo

我的linux学习笔记-近期整理的linux命令(2)

5 为管理员保留的磁盘空间 5% ^)
mkfs.ext3 -m 3 -L LA??/dev/sdb2?(^ 为超级用户保留3%, label为"LA" ^)
mkisofs -r -o out.iso /opt?(^ 把opt目录下文件<包括子目录>制作成一个iso文件 ^)
modprobe -l?(^ 列出系统内核所有可用的模块 ^)
modprobeusb -storage?(^ 检查usb-storage模块是否已加载, 否则无法自动识别USB设备 ^) (^ ????? ^)
mogrify -format jpg *.bmp?(^ bmp转jpg ^)
mogrify -resize 640x480 *.jpg?(^ 把图片放缩为640x480 ^)
mount.cifs?//192.168.0.22/linux /mnt -o username=redhat%redhat (^ 将共享目录挂载到本地目录, 然后再访问 ^)
mount /dev/fd0 /mnt/floppy?(^ 软盘 ^)
mount /dev/sda1 /mnt/cdrom?(^ USB闪存 ^)
mount /dev/sdb2 /mmt/d -o iocharset=utf8,ro,uid=redhat,umask=0077?(^ 常用字符编码有gb2312和utf8 ^)
mount -o codepage=936,iocharset=cp936 /dev/hda7 /mnt/cdrom?(^ FAT32的分区 ^)
mount -o iocharset=cp936 /dev/hda7 /mnt/cdrom?(^ NTFS的分区 ^)
mount -o loop /abc.iso /mnt/cdrom?(^ ISO文件 ^)
mount -o usrquota,grpquota /dev/sdb1 /mnt/d1 或 mount -o emount,usrquota,grpquota /?(^ 使用磁盘配额,默认系统内核已支持quota ^)
mount -t iso9660 /dev/cdrom /mnt/cdrom
mount -t iso9660 /dev/dvd /mnt/cdrom或mount -t udf /dev/dvd /mnt/cdrom?(^ 访问DVD??^)
mount -t iso9660 xxxxx.iso /any/path/if/u/like -o loop?(^ 使用.iso文件 ^)
mount -t ntfs /dev/hda3 /mnt/d?(^ 需重新编译内核才能支持NTFS ^)
mount -t vfat /dev/hda2 /mnt/c
mount -t vfat -o iocharset=gb2312 /dev/sdb1 /mnt/u
mpg123 --title -C -Z *?(^ 随机播放当前目录的音频文件(永远不会结束) ^)
mpg123 --title -C *?(^ 顺序播放当前目录的音频文件 ^)
nasm -hf?(^ 查看nasm默认下生成的是什么格式的文件 ^)
native2ascii?(^ 把非ASCII字符转换成对应的16进制值 ^)
netstat -atnlp | grep qq?(^ -p : 显示PID ^)
netstat -atuln | grep ':80'?(^ -a: all, t: tcp, u: udp, n: 用显示数字, l: listening ^)
netstat -lpn|grep :53 | awk '{print $5}'| sort
netstat -tuln | grep ':80'?(^ 查看系统是否己启动某一端口号 ^)
nl filename?(^ 在文件的每一行加上行号, 不统计空行 ^)
nmblookup my-server?(^ 查询服务器的IP ^)
nmblookup \*?(^ 查询所有活动的主机的IP ^)
nm?(^ 从a.out格式文件中读取可读字符串(函数等) ^)
nohup tar -cf /dev/tape /home &?(^ 进程在退出系统后还能执行 ^)
ntsysv?(^ 打开服务管理器, 与chkconfig相似 ^)
ntsysv?(^ 为setup的子命令 ^)
od: head -1 /dev/urandom | od -N 1 | awk '{ print $2 }'?(^ 产生1个随机数 ^)
od: head -c4 /dev/urandom | od -N4 -tu4 | sed -ne '1s/.* //p'?(^ 产生10个一位数的随机数 ^)
od -N4 -tu4?(^ -N4 选项将限制输出为4个字节; -tu4 选项将使用无符号10进制格式来输出. ^)
paste file1 file2?(^ 将file1和file2行号相同的行连接成一行 ^)
pidof program-name?(^ 查找program-name的pid; 如果有多个相同的program同时运行, 则返回所有的pid ^)
pidof vsftpd?(^ 根据进程名显示进程号 ^)
popd n?(^ 转到dir栈中第n个目录 ^)
printf "%02d. %s\n" $nr ${line#*/}?(^ 格式化输出 ^)
printk: echo "8" > /proc/sys/kernel/printk?(^ 改变控制台的消息级别(可从1到8) ^)
ps -ef |grep java |grep -v grep |awk '{print $2}' |xargs kill -9?(^ 如何批量杀掉进程 ^)
pstree?(^ 以树状图显示程序 ^)
pushd dir?(^ 把dir压入栈中 ^)
quotacheck -cvuga 或 quotacheck -cvag?(^ /dev/sdb1 ^)
quotaoff /mnt/sdb1?(^ 关闭磁盘配额 ^)
quotaon -a?(^ 激活 ^)
quotaon /mnt/sdb1?(^ 开启 ^)
quota -t?(^ 配置过期时间 ^)
quota -u redhat
ranlib libtttt.a?(^ 对libtttt.a生成索引, 好处是使得其里边的函数可以相互调用, 而不管它们所处的位置 ^)
rdate -s ntp2.uk.uu.net?(^ 与ntp2.uk.uu.net同步时间 ^)
rename 'y/A-Z/a-z/' *?(^ 批量重命名, 并转化为小写 ^)
rev file.name?(^ 将内容倒序读出 ^)
rev file?(^ 将行中的字符逆序, 第一个字成为最后一字 ^)
rm??"-file"?(^ 处理文件名内含有特殊字符的文件 ^)
rm??\-file??(^ 处理文件名内含有特殊字符的文件 ^)
rm -- -file?(^ 处理文件名内含有特殊字符的文件 ^)
route add default gw 网关的IP?(^ 手动添加默认网关 ^)
rpm2cpio <?in.rpm?> out.cpio?(^ 将rpm归档文件转换为cpio归档文件 ^)
rpm --import /etc/pki/rpm-gpg/*?(^ */ 导入FedoraGPG秘匙 ^)
rpm -ivh --aid samba*.rpm?(^ 装了rpmdb才有效 ^)
rpm -ivh cups-libs*.rpm
rpm -ivh rpmdb-fedora*.rpm
rpm -ivh samba*.rpm
rpm -qa | grep samba?(^ 查看所有软件包列表 ^)
rpm -q curl libcurl yum?(^ 查看yum的相关包及其对应的版本信息 ^)
rpm -qf cmd?(^ 查看程序cmd所在的软件包(rpm包) ^)
rpm -q kernel-devel?(^ 查看kernel-devel是否已安装 ^)
rpm -ql samba | more?(^ 查讯某个软件列表 ^)
rsync?(^??a fast, versatile, remote (and local) file-copying tool. # -r: 递归下载 # -t: 保存时间 # -v: verbose ^)
runlevel?(^ 查看当前系统的运行级别 ^)
samba: netstat -au | grep netbios?(^ 查看nmb是否启动成功 ^)
samba: service smb start?(^ 启动samba服务器 ^)
samba: smbclient?//10.3.1.4/lcy-share -U lcy (^ 登陆samba服务器, lcy为用户名 ^)
samba: smbclient -L 192.168.138.110 -N?(^ 查看机器上共享了什么, 并查找出局域网内的其它有共享服务的机器 ^)
samba: smbstatus?(^ 查看状态 ^)
samba: smbtree?(^ 查看局域网中的所有共享服务 ^)
samba: testparm?(^ 用于测试samba的配置文件 /etc/samba/smb.conf 语法是否正确 ^)
/sbin/ifconfig eth0 up?(^ 重启网卡 ^)
script file?(^ 把当前终端的输入输出自动保存到文件 file 中. ^)
sed '1d' filename?(^ 删除第一行 ^)
sed '$d' | sed '$d' filename?(^ 删除最后两行 ^)
sed '/^$/d'?(^ 删除文件中的所有空行(与"grep '.' "效果相同) ^)
sed '/./!d'?(^ 删除文件中的所有空行(与"grep '.' "效果相同) ^)
sed '/./,/^$/!d'?(^ 只保留多个相邻空行的第一行,并删除文件顶部的空行(模拟"cat -s") ^)
sed: echo $CLASSPATH | sed 's/:/\n/g' | sort?(^ java 类路径 ^)
sed: echo??"fae" | sed -e 's:^0[bBxX]::' | tr '[a-f]' '[A-F]'?(^ 把fae转换成大写 ^)
sed -e 's/\.//g'??-e 's/\,//g' -e 's/ /\ /g' (^ 过滤掉句号和逗号, 并且将单词间的空格修改为换行 ^)
sed: find . | sed -e "s/^.//"?(^ 把每一行的第一个字符删除 ^)
sed: head -c4 /dev/urandom | od -N4 -tu4 | sed -ne '1s/.* //p'?(^ 产生10个随机数 ^)
sed -n '/^[A-Z]/p'?(^ 匹配大写字母开头的行 ^)
sed '$!N; /^\(.*\)\n\1$/!P; D'?(^ 删除文件中相邻的重复行,只保留重复行中的第一行(模拟"uniq") ^)
sed '/^$/N;/\n$/D'?(^ 只保留多个相邻空行的第一行(模拟"cat -s") ^)
sed -n /"pattern"/p file?(^ 在file文件中查找匹配pattern的行 ^)
sed 'N;$!P;$!D;$d' filename?(^ 删除最后两行 ^)
sed -n /[\+\{\}\;\"\"\\\=\?~\(\)\<\>\&\*\|\$ ]/p?(^ 等价于:sed -n '/[+{};"\=?~()<>&*|$ ]/p'; -n表示只输出符合条件的 ^)
sed -n '/[+{};"\"\=?~()<>&*|$ ]/p'?(^ 和find结合使用: find . | sed -n?'/[+{};"\=?~()<>&*|$ ]/p' ^)
sed '$!N; s/^\(.*\)\n\1$/\1/; t; D' (^ 删除除重复行外的所有行(模拟"uniq -d") ^)
sed '$!N;s/\n/ /' file?(^ 将每两行连接成一行 ^)
sed "s/\r//" infile >outfile?(^ 把win格式的换行符换为unix格式的 ^)
selinux: setenforce 0?(^ 关闭SElinux, 要彻底禁用SELinux,需要在 /etc/sysconfig/selinux 中设置参数 selinux=0, 或者在 /etc/grub.conf 中添加这个参数 ^)
selinux: setenforce 1?(^ 打开SElinux ^)
seq 1 8?// 与??" 打印: 1 2 3 4 5 ... 8 "相同
service kudzu start?(^ 重新检测硬件, 让系统自动识别新 ^)
services: cat /etc/services | grep telnet?(^ 查看telnet的端口号 ^)
service --status-all?(^ 查看系统中各个服务的当前状态 ^)
service xinetd restart?(^ 重起xinetd ^)
setleds?(^ 开机修改各个键盘灯的状态 ^)
setterm -blank 0?(^ 不让显示器休眠 ^)
shred?(^ 安全的删除一个文件 ^)
shutdown -r now?(^ 重新启动 ^)
skill -KILL -v pts/2??(^ 注消终端用户: pts/2 ^)
smbclient?//192.168.0.22/linux -U redhat%redhat
smbclient?//host/share
smbclient -L 192.168.0.22 -U redhat%redhat?(^ 以redhat用户登录并显示共享目录 ^)
smbtar -s win2000 -u redhat -p redhat -x chinalab -t itlab.tar?(^ 远程备份网上邻居中的文件 ^)
sort list.txt?(^ 对list.txt中的每一行进行排序 ^)
sort -nr?(^ 按数字返序排序 ^)
sort: sed '1d' file | sort -t\> +0 -1 -u?(^ 对文件file中除了第一行外的所有行进行按第一个字段排序, 字段以"<"分隔, 并只输出唯一行 ^)
sort -u list.txt?(^ 对list.txt中的每一行进行排序, 且对于重复行只输出一次 ^)
sort | uniq -c | sort -nr?(^ 最后统计出现次数,把数字显示在第一列,然后显示单词,并按数字排序 ^)
str: file=/home/scr/book/TCP-IP_I1/bin/tdtraceroute.sh; echo ${file%/*}?(^ 只取路径名: /home/scr/book/TCP-IP_I1/bin ^)
str: file=/home/scr/book/TCP-IP_I1/bin/tdtraceroute.sh; echo ${file##*/}?(^ 只取文件名: tdtraceroute.sh ^)
strings file?(^ 把file中所有可打印的字符打印出来??^)
stty echo?(^ 打开回显功能 ^)
stty -echo?(^ 关闭回显功能 ^)
stty: old_tty_setting=$(stty -g)?(^ 保存终端设置; stty "$old_tty_setting": 恢复终端设置 ^)
stty "$old_tty_setting"?(^ 恢复老的终端设置 ^)
sudo -b?(^ command Background 在后台执行指定的命令.??^)
sudo -e?(^ file Edit 不是执行命令, 而是修改文件, 相当于命令sudoedit.??^)
sudo -h?(^ Help 列出使用方法, 退出.??^)
sudo -k?(^ Kill 清除"入场卷"上的时间, 下次再使用sudo时要再输入密码.??^)
sudo -K?(^ Sure kill 与-k类似, 但是它还要撕毁"入场卷", 也就是删除时间戳文件.??^)
sudo -l?(^ List 列出当前用户可以执行的命令. 只有在sudoers里的用户才能使用该选项.??^)
sudo -p?(^ prompt command Prompt 可以更改询问密码的提示语, 其中%u会代换为使用者帐号名称, %h会显示主机名称 ^)
sudo -u?(^ username|#uid User 以指定用户的身份执行命令. 后面的用户是除root以外的, 可以是用户名, 也可以是#uid.??^)
sudo -V?(^ Version 显示版本信息, 并退出.??^)
sync?(^ 刷新buffer. ^)
sysctl -p?(^ 使得内核改变立即生效;??^)
tail -f /var/log/messages?(^ -f: 流动模式查看(即: 当文件有变动时, tail也相应的显被更新 ^)
tar cjvf bin.tar.bz2 bin/*???//*/ (^??把bin目录下文件<包括子目录>打包并压缩为文件:bin.tar.bz2 ^)
tar -cvf /home/123.tar /etc??(^ 打包,不压缩 ^)
tar -jxvf /home/123.tar.bz2??(^ 以bzip2解压 ^)
tar tvf lab.tar?(^ 显示备份包里的文件 ^)
tar -xvf 123.tar???(^ 解开包 ^)
tar xvzf file.tar.Z?(^ 解压*.tar.Z文件 ^)
tar xvzf vjde.tgz -C tdir?(^ -C : 解压到目录 tdir 下! ^)
tar zcf vimgdb_runtime.tgz doc macros syntax?(^ 压缩打包 ^)
tar -ztvf /tmp/etc.tar.gz???(^ 查看tar内容 ^)
tar zxf vimgdb_runtime.tgz -C /usr/lo?(^ 解压到/usr/lo下 ^)
tar -zxvf /home/123.tar.gz??(^ 以gzip解压 ^)
tar zxvf xxxx.tar.gz?(^ 解压*.tar.gz文件 ^)
tr a-z A-Z <?filename (^ 转换为大写 ^)
tr: cat cs.BAK | tr -d "^V^M"?> cs?(^ 把win格式的换行符换为unix格式的, 用dos2unix比较好 ^)
tr: cat file | tr a-z n-za-m?(^ 把file文件中的a转换为n, b转换为o, ... ^)
tr: cat file | tr -cd??a?(^ 输出file中为a的字符a. -c: 输出匹配的, -d: 若没-c则输出的非匹配的 ^)
tr -cs '[:alpha:]' Z?(^ 将非字母表字符转换为多个 Z, -s:然后去除多个连续的 Z. ^)
tr -d \r <infile?>outfile?(^ 把win格式的换行符换为unix格式的 ^)
tr: echo $CLASSPATH | tr : '\n' | sort?(^ java 类路径 ^)
tree:?(export LS_COLORS=NONE; tree | sed??'s/\[.*\]??//')?(^ 目录树 ^)
tr -s '\173-\377' Z??(^ 把所有z后边的字符都转换为Z,并且去除多余重复的Z.注意173"{"和377都是8进制. 注意有-s参数 ^)
tty?(^ 查看自己所使用的终端 ^)
tune2fs -c -1 /dev/sdb1?(^ 不管挂载多小次都不自检 ^)
tune2fs -c -1 -i 0 /dev/sdb1?(^ 让分区永远不自检 ^)
tune2fs -j /dev/sdb4?(^ 转换为ext3 ^)
tune2fs -l /dev/sda7 | grep "Block size:"?(^ 查看一block的大小 ^)
tune2fs -l /dev/sda7?(^ 打印文件系统属性 ^)
tune2fs -l /dev/sdb1 | grep features?(^ 看Filesystemfeatures: has_journal是否有has_journal, 有则是ext3文件系统 ^)
type ./configure ; make ; make install?(^ 在同一个命令行上同时执行多条命令,用分号分隔 ^)
ulimit?(^ 设置系统资源限制 ^)
uname -r?(^ 看内核版本 ^)
uniq --all-repeated -i file?(^ 输出file中所有重复行, --all-repeated等价于-D ^)
uniq -c file?(^ 在每行前显示重复次数,可与其他选项结合,例如-cu或-cd或-c ^)
uniq -c?(^ 把数字显示在第一列 ^)
uniq -d file?(^ 只输出file中的重复行,且只输出一次,但不输出唯一的行 ^)
uniq -i file?(^ 比较时忽略大小写 ^)
uniq -u file?(^ 只输出file中的唯一行(当然是一次啦) ^)
uniq -ui wordslist.txt?(^ 只 ^)
units miles meters?(^ 求miles与meters的换算公式 ^)
units?(^ 这个工具用来在不同的计量单位之间互相转换 ^)
unix2dos -k hosts?(^ 将提供的hosts文件格式更新为dos格式 ^)
unrar e sa.rar??(^ 解压rar文件当前目录, 不自动创建目录 ^)
unrar x sa.rar dir??(^ 解压rar文件目录dir, 自动创建目录 ^)
updatedb?(^ 更新文件路径数据库 ^)
uptime: cat /proc/uptime | awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("run_days=%d\trun_hour=%d\trun_minute=%d\trun_second=%d\n",run_days,run_hour,run_minute,run_second)}'(^ 查看/proc/uptime文件计算系统运行时间 ^)
uptime: cat /proc/uptime?(^ 查看系统已启动了多久, 第一数字即是系统已运行的时间 ^)
uptime: date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"?(^ 推算系统是什么时候启动的 ^)
uptime: date -d"$(ls --full-time /var/run/runlevel.dir | awk '{print $7,$8,$10,$9}')" +"%Y-%m-%d %H:%M:%S"?(^ 查看/var/run/runlevel.dir文件的时间信息获取大致的系统启动时间 ^)
uptime?(^ 查看系统已启动了多久 ^)
uudecode?(^ 这个工具用来把uuencode后的ASCII字符串恢复为二进制文件. ^)
uuencode?(^ 这个工具用来把二进制文件编码成ASCII字符串,这个工具适用于编码e-mail消息体,或者新闻组消息. ^)
vim: find . -type f -exec gvim -O {}?+?(^ 在新的gvim中打开find找到的所有文件于不同的垂直窗口中 ^)
vim: find . -type f -exec gvim -o {}?+?(^ 在新的gvim中打开find找到的所有文件于不同的水平窗口中 ^)
vim: find . -type f -exec gvim -p --remote-tab {}?+?(^ 在现有的gvim中打开find找到的所有文件于不同的标签页 ^)
vim: find . -type f -exec gvim -p {}?+?(^ 在新的gvim中打开find找到的所有文件于不同的标签页中 ^)
vim: find . -type f -exec gvim --servername GVIM --remote-tab {}?\;?(^ 用gvim打开find找到的第一个文件 ^)
vim: find . -type f -exec gvim --servername GVIM --remote-tab {}?+?(^ 用gvim打开find找到的所有文件于不同的标签页 ^)
vim: find . -type f -exec vim {}?\;?(^ 用vim打开find的结果, 但每次只打开一个文件 ^)
vim: find . -type f -exec vim {}?+?(^ 用vim打开find的结果, 若有多个文件则放入buffer中 ^)
vim $(find . -type f)?(^ 用vim打开find的结果 ^)
vim?`find .... `?(^ 用vim打开find的结果 ^)
vim -u NONE?(^ 启动vim时, 跳过任何启动初始化脚本 ^)
vim: xargs -a <(find . -type f)?vim?(^ 用vim打开find的结果, 若有多个文件则放入buffer中 ^)
wall this system?? will halt after 5 minutes?(^ 发公告信息给所有终端用户 ^)
watch -n 10 ls -l file.name?(^ 使用watch命令, 可以反复执行命令, 和ls配合, 可以达到每10秒观察某文件大小变化的效果 ^)
wget -p?http://www.xyz23.com/file01.html?(^ -p选项将会使得wget取得显示指定页时所需要的所有文件(如图片等) ^)
wget -r?ftp://ftp.xyz24.net/~bozo/project_files/?-O savefile.txt?(^ -r选项将会递归的从指定站点上下载所有连接. ^)
whatis
whereis ls?(^ 快速查找命令文件, 可以使用whereis ^)
whoami
write root /dev/pts/4?(^ 给某个终端的用户发送信信息 ^)
w?(^ Show who is logged on and what they are doing. ^)
yum --disablerepo=repo_name?(^ 禁用软件仓库 ^)
yum --enablerepo=repo_name?(^ 启用软件仓库 ^)
yum info application_name?(^ 查找某个应用程序的信息 ^)
yum install application_name
yum localinstall application_name?(^ 从硬盘安装rpm包并使用yum解决依赖 ^)
yum remove application_name?(^ 删除应用程序 ^)
yum search application_name?(^ 搜索某个应用程序 ^)
yum update?(^ 更新整个系统 ^)
zcat 123.gz?(^ 查看压缩文件内容 ^)
zip -r??t.zip t?(^ 递归地把t目录及其子目录文件压缩为t.zip ^)

1.1 unknown command

gpic??/home/scr/.rt/book/tools/gpic/gpic.raymond.ps
cdrecord
[~]# gcc -c test.c
[~]# ld -o test -Ttext 0x0 -e main test.o
[~]# objcopy -R .note -R .comment -S -O binary test test.bin
[~]# objdump --disassemble-all test.o

1.2 shell特有变量

?$#??传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数. 与位置
???? 变量不同, 此选项参数可超过9个.
?$$??脚本运行的当前进程ID号
?$!??后台运行的最后一个进程的进程ID号
?$@??与$#相同, 但是使用时加引号, 并在引号中返回每个参数
?$-??显示shell使用的当前选项, 与set命令功能相同
?$???显示最后命令的退出状态. 0表示没有错误, 其他任何值表明有错误.

1.3 shell "2>&1"

// 这里"2>&1"的意思就是将标准错误也输出到标准输出当中.
[]$ /tmp/test.sh > /tmp/test.log 2>&1
//?NOTE: 下面这一行的写法是错误的!!!!!
[]$ /tmp/test.sh > 2>&1 /tmp/test.log

1.3 管道

"管道命令"是指包含管道的一个复杂命令.

管道, 即把一个程序的输出作为另一个程序的输入. ls 这种程序根本不理睬标准输入
(stdin), 所以你 find xxx | ls 的话, ls 根本不理睬 find 给它的文件列表. xargs
命令从标准输入读取, 并将其作为参数构建命令行. 如:
$ echo a b | xargs ls
xargs 从标准输入读到 a 和 b 两行字符, 把它们作为两参数交给程序 ls, 于是
xargs 执行 ls a b.


有些程序既可从标准输入读取数据, 也可从文件读取, 如 sed:

$ find xxx | sed 's/a/b/'
这是使用 find 得到一个文件列表, 然后利用 sed 把其中每行的第一个 a 替换成b 再输
出.

$ find xxx | xargs sed 's/a/b/'
这是使用 find 得到一个文件列表, 然后利用 sed 把这些文件的内容替换了再输出.


1.4 String Operations

t="./a/b/f"

s=${t#*/}??????// 从前面开始, 去除最短的匹配串: s="a/b/f"
s=${t%/*}??????// 从后面开始, 去除最短的匹配串: s="./a/b"

s=${t##*/}?????// 从前面开始, 去除最长的匹配串: s="f"
s=${t%%/*}?????// 从后面开始, 去除最长的匹配串: s="."

读书人网 >UNIXLINUX

热点推荐