Linux学习日志记录003

继续

 

0,

vi/vim 中可以使用 :s 命令来替换字符串。在当前vim命令打开的文本中: 

  :s/vivian/sky/ 替换当前行第一个 vivian 为 sky 

  :s/vivian/sky/g 替换当前行所有 vivian 为 sky 

  :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky 

  :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky 

  n 为数字,若 n 为 .,表示从当前行开始到最后一行 

  :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky 

  :%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky 

  可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符 

  :s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/ 

  :%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/ 

  1.:s/vivian/sky/ 替换当前行第一个 vivian 为 sky 

  :s/vivian/sky/g 替换当前行所有 vivian 为 sky 

  2. :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky 

  :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky 

  (n 为数字,若 n 为 .,表示从当前行开始到最后一行) 

  3. :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky 

  :%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky 

  4. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符 

  :s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/ 

  5. 删除文本中的^M 

  问题描述:对于换行,window下用回车换行(0A0D)来表示,linux下是回车(0A)来表示。这样,将window上的文件拷到unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。 

  · 使用命令:cat filename1 | tr -d “^V^M” > newfile; 

  · 使用命令:sed -e “s/^V^M//” filename > outputfilename。需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。 

  · 在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:%s/^V^M//。 

  · :%s/^M$//g 

  如果上述方法无用,则正确的解决办法是: 

  · tr -d "\r" < src >dest 

  · tr -d "\015" dest 

  · strings A>B 

  6. 其它 

  利用 :s 命令可以实现字符串的替换。具体的用法包括: 

  :s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1 

  :s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1 

  :.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1 

  :1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1 

  :g/str1/s//str2/g 功能同上 

  从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索 

  字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。

 

7. 检查端口

#netstat  -anltup | grep :25

-a      all,所有
-n     number,把能以数字表示的用数字表示,像端口号之类。
-l       listen,被监听的
-t      tcp,tcp协议的
-u     udp,udp协议的

-p      输出进程名

 

netstat -anp 显示系统端口使用情况

 

lsof -i :端口  显示占用该端口的进程情况 

 

uname -a 内核信息

 

cat /proc/interrupts 显示中断信息

 

8. 检查磁盘空间

[root@Linux var]# df -hl 
文件系统              容量  已用 可用 已用% 挂载点
/dev/hdb2              75G   75G     0 100% /
/dev/hdb1              99M  9.2M   85M  10% /boot
none                  251M     0  251M   0% /dev/shm

 

用以下命令查看单个目录
# du -bs dir_name

查看当前文件夹下所有文件大小(包括子文件夹)
# du -sh

查看指定文件夹下所有文件大小(包括子文件夹)
# du -h ftp
查看指定文件大小
# du -h ./package/compat-libstdc++-33-3.2.3-69.el6.x86_64.rpm 
184K    ./package/compat-libstdc++-33-3.2.3-69.el6.x86_64.rpm

查看指定文件夹大小
# du -hs ftp
6.3G    ftp

9. 删除日志文件
今天一看,公司的linux 服务器没放什么东西,但是已经使用了50%了,一查看原来是日志文件太大了,于是就手动删除了,
这个比较快
sudo /dev/null > /var/log/**.log 

下面这个可以推荐使用
sudo find /var/log/ -type f -mtime +30 -exec rm -f {} \;
删除30天之前的旧文件

 

10. du的用法

用法:du [选项]... [文件]...
 或:du [选项]... --files0-from=F
计算每个文件的磁盘用量,目录则取总用量。
长选项必须使用的参数对于短选项时也是必需使用的。
  -a, --all  输出所有文件的磁盘用量,不仅仅是目录
      --apparent-size 显示表面用量,而并非是磁盘用量;虽然表面用量通常会
   小一些,但有时它会因为稀疏文件间的"洞"、内部碎
   片、非直接引用的块等原因而变大。
  -B, --block-size=大小 使用指定字节数的块
  -b, --bytes  等于--apparent-size --block-size=1
  -c, --total  显示总计信息
  -D, --dereference-args 解除命令行中列出的符号连接
      --files0-from=F 计算文件F 中以NUL 结尾的文件名对应占用的磁盘空间
   如果F 的值是"-",则从标准输入读入文件名
  -H   等于--dereference-args (-D)
  -h, --human-readable 以可读性较好的方式显示尺寸(例如:1K 234M 2G)
      --si  类似-h,但在计算时使用1000 为基底而非1024
  -k   等于--block-size=1K
  -l, --count-links 如果是硬连接,就多次计算其尺寸
  -m   等于--block-size=1M
  -L, --dereference 找出任何符号链接指示的真正目的地
  -P, --no-dereference 不跟随任何符号链接(默认)
  -0, --null  将每个空行视作0 字节而非换行符
  -S, --separate-dirs 不包括子目录的占用量
  -s, --summarize 只分别计算命令列中每个参数所占的总用量
  -x, --one-file-system  跳过处于不同文件系统之上的目录
  -X, --exclude-from=文件 排除与指定文件中描述的模式相符的文件
      --exclude=PATTERN  排除与PATTERN 中描述的模式相符的文件
      --max-depth=N 显示目录总计(与--all 一起使用计算文件)
   当N 为指定数值时计算深度为N;
   --max-depth=0 等于--summarize
      --time  显示目录或该目录子目录下所有文件的最后修改时间
      --time=WORD 显示WORD 时间,而非修改时间:
   atime,access,use,ctime 或status
      --time-style=样式 按照指定样式显示时间(样式解释规则同"date"命令):
   full-iso,long-iso,iso,+FORMAT
      --help  显示此帮助信息并退出
      --version  显示版本信息并退出
[大小]可以是以下的单位(单位前可加上整数):
kB 1000,K 1024,MB 1000000,M 1048576,还有 G、T、P、E、Z、Y。

 

11. find使用方法(部分)

详细请参考:

http://www.oracle.com/technetwork/cn/articles/calish-find-096463-zhs.html

 

find 命令有几个用于根据您系统的时间戳搜索文件的选项。这些时间戳包括

 

• mtime — 文件内容上次修改时间 

• atime — 文件被读取或访问的时间 

• ctime — 文件状态变化时间

 

这些时间选项都需要与一个值 n 结合使用,指定为 -n、n 或 +n。

 

• -n 返回项小于 n 

• +n 返回项大于 n 

• n 返回项正好与 n 相等

 

自己实验测试部分:

查找30天之前的文件,并且删除之

find /var/log/ -type f -mtime +30 -exec rm -f {} \;

 

查找30天之前的文件

find ./ -type f -mtime +30

 

返回两天内的文件且后缀名为sql的文件

 find ./ -type f -mtime -2 -a -name "*.sql" 

 

返回两天内的文件且后缀名为sql的文件且文件小于10K的

find ./ -type f -mtime -2 -a -name "*.sql" -a -size -10000c

 

返回文件大于10M的sql文件个数

find ./ -size +10000000c -a -name "*.sql" | wc -l

 

返回文件大于10M的sql文件同时删除之

find ./ -size +10000000c -a -name "*.sql" -exec rm -f {} \;

 

返回文件大于10M的sql文件同时删除之,同时是30天之前的文件文件个数

find ./ -size +10000000c -a -name "*.sql" -a -type f -mtime +30 | wc -l

 

返回文件大于10M的sql文件同时删除之,同时是30天之前的文件,删除

find ./ -size +10000000c -a -name "*.sql" -a -type f -mtime +30 -exec rm -f {} \;

 

12. 获取字符串的长度5种方法

 

方法1: 使用wc -L命令

wc -L可以获取到当前行的长度,因此对于单独行的字符串可以用这个简单的方法获取,另外wc -l则是获取当前字符串内容的行数。

 

代码如下:echo "abc" |wc -L

 

方法2: expr length string

使用expr length可以获取string的长度

 

方法3: awk获取域的个数,但是如果大于10个字符的长度时是否存在问题需要后面确认

 

 

代码如下:echo "abc" |awk -F "" '{print NF}'

 

方法4: 通过awk+length的方式获取字符串长度

代码如下:echo “Alex”|awk '{print length($0)}'

 

方法5: 通过echo ${#string}的方式(注意:这里的string是该字符串的变量名)

代码如下:name=Alex

echo ${#name}

 

你可能感兴趣的:(linux)