操作系统——linux命令实战

摘要

本博文主要是介绍的操作系统中的实战,帮助大家在操作服务器做一个参考。

操作系统——linux命令实战

操作系统——linux命令实战

一、mount挂载Windows共享文件夹

现实中会有这样的场景 , 开发人员在 Windows 上面写代码 , 然后放到 Linux 进行编译 , 达到这个目的我们可以在 Linux 上使用 mount 命令挂载 Windows 共享文件夹 , 就像将 Windows 里面的共享目录当成一个U盘插到 Linux主机上面 , 然后 Linux 可以直接访问代码进行编译编译 ; 具体操作步骤如下 :

1.1 先在 Windows 下面共享需要挂载的目录

右键需要共享的文件夹 , 选择共享 , 然后默认设置就可以,然后在其他的机器测试是否能正常访问 , 在其他机器资源管理器里面输入 \\192.168.0.102\Share , 地址格式是 \\你的IP\你的共享文件夹

出现无法访问或者指定的密码不正确时 , 可参考如下设置 :

  • 修改网络安全设置 : 开始 -> 运行 gpedit.msc , 打开组策略 -> 计算机配置 -> Windows设置 -> 安全设置 -> 本地策略 -> 安全选项 -> 选择 “网络安全 : LAN 管理器身份验证级别” , 双击打开 , 设置成“发送 LM 和 NTLM 响应” 。
  • 修改网络访问模型 : 开始 -> 运行 -> gpedit.msc -> 计算机配置 -> Windows设置 -> 安全设置 -> 本地策略 -> 安全选项 -> 选择 “网络访问:本地帐户的共享和安全模型” , 修改用经典模式 。

1.2 在linux下面创建一个需要挂载到的目录

mount 命令同时要求在sudo su 下才能进行 我创建的目录是 :/xjl/share/data 利用 mount 命令进行挂载: # mount -t cifs -o username=Bob,password=123456 //192.168.0.102/Share /xjl/share/data/ 参数说明 : username , Window 系统登录用户名 ; password : Window 系统登录密码 ; //192.168.0.102/Share : 设置Window共享目录的路径 ; /xjl/share/data/ : 挂载到 Linux 下的那个目录。 挂载完成后我们就可以在 /xjl/share/data/ 目录里面看到 Windows 共享文件夹里面的文件。

1.3 查挂载在状态

或者使用# mount 也可进行查看。

# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 38G 4.3G 34G 12% / devtmpfs 235M 0 235M 0% /dev tmpfs 245M 0 245M 0% /dev/shm tmpfs 245M 4.3M 241M 2% /run tmpfs 245M 0 245M 0% /sys/fs/cgroup /dev/sda2 1014M 131M 884M 13% /boot tmpfs 49M 0 49M 0% /run/user/0 //192.168.0.102/Share 245G 54G 191G 22% /usr/local/bin/code

1.4 卸载mount文件

# umount /xjl/share/data umount 时提示错误 target is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) , 你可以先切换到别的目录再试一次 , 原因也可能是其他进程可能在使用目录 , 可以先关闭使用该目录的进程 , 然后再 umount , 命令如下 (使用 fuser 需安装 psmisc # yum install psmisc) : 再次使用的卸载的命令 # fuser -m /usr/local/bin/code /usr/local/bin/code: 2806c # ps aux | grep 2806 root 2806 0.0 0.5 116040 2836 pts/0 Ss 11:31 0:00 -bash root 2925 0.0 0.1 112648 960 pts/0 S+ 14:36 0:00 grep --color=auto 2806 # kill -9 2806 # umount /usr/local/bin/code 

二、文件及目录管理

2.1 创建和删除

  • 创建:mkdir
  • 删除:rm
  • 删除非空目录:rm -rf file目录
  • 删除日志 rm *log (等价: $find ./ -name “*log” -exec rm {} ;)
  • 移动:mv
  • 复制:cp (复制目录:cp -r )
查看当前目录下文件个数: $find ./ | wc -l 复制目录: $cp -r source_dir dest_dir

2.2 目录的切换

  • 找到文件/目录位置:cd
  • 切换到上一个工作目录: cd –
  • 切换到home目录: cd or cd ~
  • 显示当前路径: pwd
  • 更改当前工作路径为path: $cd path

2.3 查找目录以及文件

搜寻文件或目录: $find ./ -name "core*" | xargs file 查找目标文件夹中是否有obj文件: $find ./ -name '*.o' 递归当前目录及子目录删除所有.o文件: $find ./ -name "*.o" -exec rm {} \; find是实时查找,如果需要更快的查询,可试试locate;locate会为文件系统建立索引数据库,如果有文件更新,需要定期执行更新命令来更新索引库: $locate string 寻找包含有string的路径: $updatedb 与find不同,locate并不是实时查找。你需要更新数据库,以获得最新的文件索引信息。

2.4 查看文件内容

查看文件: cat vi head tail more 显示时同时显示行号: $cat -n 按页显示列表内容: $ls -al | more 只看前10行: $head - 10 ** 显示文件第一行: $head -1 filename 显示文件倒数第五行: $tail -5 filename 查看两个文件间的差别: $diff file1 file2 动态显示文本最新信息: $tail -f crawler.log

2.5 查询文件内容

使用egrep查询文件内容: egrep '03.1\/CO\/AE' TSF_STAT_111130.log.012 egrep 'A_LMCA777:C' TSF_STAT_111130.log.035 > co.out2

2.6 文件目录权限的修改

  • 改变文件的拥有者 chown
  • 改变文件读、写、执行等属性 chmod
  • 递归子目录修改: chown -R tuxapp source/
  • 增加脚本可执行权限: chmod a+x myscript

2.7 给文件增加别名

创建符号链接/硬链接: ln cc ccAgain :硬连接;删除一个,将仍能找到; ln -s cc ccTo :符号链接(软链接);删除源,另一个无法使用;(后面一个ccTo 为新建的文件)

2.8 设置环境变量

修改文件 vim /etc/profile 安装的软件路径一般需要加入到path中: PATH=$APPDIR:/opt/app/soft/bin:$PATH:/usr/local/bin:$TUXDIR/bin:$ORACLE_HOME/bin;export PATH

2.9 快捷键的输入与删除

Ctl-U 删除光标到行首的所有字符,在某些设置下,删除全行 Ctl-W 删除当前光标到前边的最近一个空格之间的字符 Ctl-H backspace,删除光标前边的字符 Ctl-R 匹配最相近的一个文件,然后输出

三、文本处理

3.1 find文件查找

查找txt和pdf文件: find . \( -name "*.txt" -o -name "*.pdf" \) -print 正则方式查找.txt和pdf: find . -regex ".*\(\.txt|\.pdf\)$" -iregex: 忽略大小写的正则 否定参数 ,查找所有非txt文本: find . ! -name "*.txt" -print 指定搜索深度,打印出当前目录的文件(深度为1): find . -maxdepth 1 -type f
按类型搜索 find . -type d -print //只列出所有目录 按时间搜索 -atime 访问时间 (单位是天,分钟单位则是-amin,以下类似) -mtime 修改时间 (内容被修改) -ctime 变化时间 (元数据或权限变化) 最近第7天被访问过的所有文件: find . -atime 7 -type f -print 最近7天内被访问过的所有文件: find . -atime -7 -type f -print 查询7天前被访问过的所有文件: find . -atime +7 type f -print 按大小搜索: w字 k M G 寻找大于2k的文件: find . -type f -size +2k 按权限查找: find . -type f -perm 644 -print //找具有可执行权限的所有文件 按用户查找: find . -type f -user weber -print// 找用户weber所拥有的文件 删除当前目录下所有的swp文件: find . -type f -name "*.swp" -delete

3.2 grep文件搜索

grep match_patten file // 默认访问匹配行 常用参数 -o 只输出匹配的文本行 VS -v 只输出没有匹配的文本行 -c 统计文件中包含文本的次数: grep -c “text” filename -n 打印匹配的行号 -i 搜索时忽略大小写 -l 只打印文件名 在多级目录中对文本递归搜索(程序员搜代码的最爱): grep "class" . -R -n 匹配多个模式: grep -e "class" -e "vitural" file grep输出以0作为结尾符的文件名(-z): grep "test" file* -lZ| xargs -0 rm 综合应用:将日志中的所有带where条件的sql查找查找出来: cat LOG.* | tr a-z A-Z | grep "FROM " | grep "WHERE" > b

3.3 sort 排序

字段说明 -n 按数字进行排序 VS -d 按字典序进行排序 -r 逆序排序 -k N 指定按第N列排序 示例: sort -nrk 1 data.txt sort -bd data // 忽略像空格之类的前导空白字符

3.4 消除重复行

消除重复行: sort unsort.txt | uniq 统计各行在文件中出现的次数 sort unsort.txt | uniq -c 找出重复行 sort unsort.txt | uniq -d

3.5 paste按照列拼接文本

将两个文本按列拼接到一起; cat file1 1 2 cat file2 colin book paste file1 file2 1 colin 2 book 默认的定界符是制表符,可以用-d指明定界符: paste file1 file2 -d "," 1,colin 2,book

3.6 wc统计行和字符的工具

$wc -l file // 统计行数 $wc -w file // 统计单词数 $wc -c file // 统计字符数

3.7 sed文本替换

首处替换 sed 's/text/replace_text/' file //替换每一行的第一处匹配的text 全局替换 sed 's/text/replace_text/g' file 默认替换后,输出替换后的内容,如果需要直接替换原文件,使用-i: sed -i 's/text/repalce_text/g' file 移除空白行 sed '/^$/d' file 变量转换 已匹配的字符串通过标记&来引用. echo this is en example | sed 's/\w+/[&]/g' $>[this] [is] [en] [example] 子串匹配标记 第一个匹配的括号内容使用标记 1 来引用 sed 's/hello\([0-9]\)/\1/' 双引号求值 sed通常用单引号来引用;也可使用双引号,使用双引号后,双引号会对表达式求值: sed 's/$var/HLLOE/' 当使用双引号时,我们可以在sed样式和替换字符串中指定变量; p=patten r=replaced echo "line con a patten" | sed "s/$p/$r/g" $>line con a replaced 其它示例 字符串插入字符:将文本中每行内容(ABCDEF) 转换为 ABC/DEF: sed 's/^.\{3\}/&\//g' file

四、磁盘管理

4.1 查询磁盘空间

df -h --------------------------------------- $df -h /opt/app/todeav/config#df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 2.0G 711M 1.2G 38% / /dev/mapper/vg1-lv2 20G 3.8G 15G 21% /opt/applog /dev/mapper/vg1-lv1 20G 13G 5.6G 70% /opt/app 查看当前目录所占空间大小: du -sh -h 人性化显示 -s 递归整个目录的大小 $du -sh 653M 查看当前目录下所有子文件夹排序后的大小: for i in `ls`; do du -sh $i; done | sort 或者: du -sh `ls` | sort

4.2 打包和压缩

打包是将多个文件归并到一个文件: tar -cvf etc.tar /etc <==仅打包,不压缩! -c :打包选项 -v :显示打包进度 -f :使用档案文件 注:有的系统中指定参数时不需要在前面加上-,直接使用tar xvf 示例:用tar实现文件夹同步,排除部分文件不同步: tar --exclude '*.svn' -cvf - /path/to/source | ( cd /path/to/target; tar -xf -) 压缩 $gzip demo.txt 生成 demo.txt.gz 解包 tar -xvf demo.tar -x 解包选项 解压后缀为 .tar.gz的文件 1. 先解压缩,生成**.tar: $gunzip demo.tar.gz 解包: $tar -xvf demo.tar $bzip2 -d demo.tar.bz2 bz2解压: tar jxvf demo.tar.bz2 如果tar 不支持j,则同样需要分两步来解包解压缩,使用bzip2来解压,再使用tar解包: bzip2 -d demo.tar.bz2 -d decompose,解压缩 tar -xvf demo.tar tar解压参数说明: -z 解压gz文件 -j 解压bz2文件 -J 解压xz文件
  • 查看磁盘空间 df -h
  • 查看目录大小 du -sh
  • 打包 tar -cvf
  • 解包 tar -xvf
  • 压缩 gzip
  • 解压缩 gunzip bzip

五、进程管理

5.1 查询进程

查询正在运行的进程信息 $ps -ef eg:查询归属于用户colin115的进程 $ps -ef | grep colin115 $ps -lu colin115 查询进程ID(适合只记得部分进程字段) $pgrep 查找进程 eg:查询进程名中含有re的进程 [/home/weber#]pgrep -l re 2 kthreadd 28 ecryptfs-kthrea 29515 redis-server 以完整的格式显示所有的进程 $ps -ajx 显示进程信息,并实时更新 $top 查看端口占用的进程状态: lsof -i:3306 查看用户username的进程所打开的文件 $lsof -u username 查询init进程当前打开的文件 $lsof -c init 查询指定的进程ID(23295)打开的文件: $lsof -p 23295 查询指定目录下被进程开启的文件(使用+D 递归目录): $lsof +d mydir1/

5.2 终止进程

杀死指定PID的进程 (PID为Process ID) $kill PID 杀死相关进程 kill -9 3434 杀死job工作 (job为job number) $kill %job

5.3 进程监控

查看系统中使用CPU、使用内存最多的进程; $top

5.4 分析线程栈

使用命令pmap,来输出进程内存的状况,可以用来分析线程堆栈; $pmap PID [/home/weber#]ps -fe| grep redis weber 13508 13070 0 08:14 pts/0 00:00:00 grep --color=auto redis weber 29515 1 0 2013 ? 02:55:59 ./redis-server redis.conf [/home/weber#]pmap 29515 29515: ./redis-server redis.conf 08048000 768K r-x-- /home/weber/soft/redis-2.6.16/src/redis-server 08108000 4K r---- /home/weber/soft/redis-2.6.16/src/redis-server 08109000 12K rw--- /home/weber/soft/redis-2.6.16/src/redis-server
将用户colin115下的所有进程名以av_开头的进程终止: ps -u colin115 | awk '/av_/ {print "kill -9 " $1}' | sh 将用户colin115下所有进程名中包含HOST的进程终止: ps -fe| grep colin115|grep HOST |awk '{print $2}' | xargs kill -9;

六、性能监控

6.1 监控CPU

查看CPU使用率 $sar -u $sar -u 1 2 [/home/weber#]sar -u 1 2 Linux 2.6.35-22-generic-pae (MyVPS) 06/28/2014 _i686_ (1 CPU) 09:03:59 AM CPU %user %nice %system %iowait %steal %idle 09:04:00 AM all 0.00 0.00 0.50 0.00 0.00 99.50 09:04:01 AM all 0.00 0.00 0.00 0.00 0.00 100.00

6.2 查询内存

查看内存使用状况 sar指定-r之后,可查看内存使用状况; $sar -r 1 2 09:08:48 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact 09:08:49 AM 17888 359784 95.26 37796 73272 507004 65.42 137400 150764 09:08:50 AM 17888 359784 95.26 37796 73272 507004 65.42 137400 150764 Average: 17888 359784 95.26 37796 73272 507004 65.42 137400 150764 查看内存使用量 $free -m

6.3 硬盘查询

查看磁盘空间利用情况 $df -h 查询当前目录下空间使用情况 du -sh -h是人性化显示 s是递归整个目录的大小 查看该目录下所有文件夹的排序后的大小 for i in `ls`; do du -sh $i; done | sort 或者 du -sh `ls`

七、网络管理

7.1 查询网络服务和端口

列出所有端口 (包括监听和未监听的): netstat -a 列出所有 tcp 端口: netstat -at 列出所有有监听的服务状态: netstat -l 使用netstat工具查询端口: $netstat -antp | grep 6379 tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 25501/redis-server $ps 25501 PID TTY STAT TIME COMMAND 25501 ? Ssl 28:21 ./redis-server ./redis.conf

7.2 网络路由管理

查看路由状态: $route -n 发送ping包到地址IP: $ping IP 探测前往地址IP的路由路径: $traceroute IP DNS查询,寻找域名domain对应的IP: $host domain 反向DNS查询: $host IP

7.3 文件的下载

wget url 常用选项: –limit-rate :下载限速 -o:指定日志文件;输出都写入日志; -c:断点续传

7.4 服务器登入

SSH登陆: $ssh ID@host ssh登陆远程服务器host,ID为用户名。 ftp/sftp文件传输: $sftp ID@host 登陆服务器host,ID为用户名。sftp登陆后,可以使用下面的命令进一步操作: get filename # 下载文件 put filename # 上传文件 ls # 列出host上当前路径的所有文件 cd # 在host上更改当前路径 lls # 列出本地主机上当前路径的所有文件 lcd # 在本地主机更改当前路径 lftp同步文件夹(类似rsync工具): lftp -u user:pass host lftp user@host:~> mirror -n

7.5 网络复制

将本地localpath指向的文件上传到远程主机的path路径: $scp localpath ID@host:path 以ssh协议,遍历下载path路径下的整个文件系统,到本地的localpath: $scp -r ID@site:path localpath

八、用户权限管理

8.1 用户的增删

添加用户 $useradd -m username 该命令为用户创建相应的帐号和用户目录/home/username; 用户添加之后,设置密码: 密码以交互方式创建: $passwd username 删除用户 $userdel -r username 不带选项使用 userdel,只会删除用户。用户的家目录将仍会在/home目录下。要完全的删除用户信息,使用-r选项; 帐号切换 登录帐号为userA用户状态下,切换到userB用户帐号工作: $su userB 进入交互模型,输入密码授权进入;

8.2 用户分组

将用户加入到组 默认情况下,添加用户操作也会相应的增加一个同名的组,用户属于同名组; 查看当前用户所属的组: $groups 一个用户可以属于多个组,将用户加入到组: $usermod -G groupNmame username 变更用户所属的根组(将用加入到新的组,并从原有的组中除去): $usermod -g groupName username 查看所有用户及权限: $more /etc/passwd 查看所有的用户组及权限: $more /etc/group

8.3 用户权限管理

使用chmod命令更改文件的读写权限,更改读写权限有两种方法,一种是字母方式,一种是数字方式 字母方式: $chmod userMark(+|-)PermissionsMark userMark取值: u:用户 g:组 o:其它用户 a:所有用户 PermissionsMark取值: r:读 w:写 x:执行 例如: $chmod a+x main 对所有用户给文件main增加可执行权限 $chmod g+w blogs 对组用户给文件blogs增加可写权限 数字方式: 数字方式直接设置所有权限,相比字母方式,更加简洁方便;使用三位八进制数字的形式来表示权限,第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限,每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。如6(4+2)代表有读写权,7(4+2+1)有读、写和执行的权限。 例如: $chmod 740 main 将main的用户权限设置为rwxr----- 更改文件或目录的拥有者 $chown username dirOrFile 使用-R选项递归更改该目下所有文件的拥有者: $chown -R weber server/

九、Linux工具的使用

9.1 查询程序依赖的库

查看test程序运行所依赖的库: /opt/app/todeav1/test$ldd test libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000039a7e00000) libm.so.6 => /lib64/libm.so.6 (0x0000003996400000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000039a5600000) libc.so.6 => /lib64/libc.so.6 (0x0000003995800000) /lib64/ld-linux-x86-64.so.2 (0x0000003995400000) 第一列:程序需要依赖什么库 第二列: 系统提供的与程序需要的库所对应的库 第三列:库加载的开始地址

9.2 lsof文件管理

lsof打开的文件可以是:

  1. 普通文件
  2. 目录
  3. 网络文件系统的文件
  4. 字符或设备文件
  5. (函数)共享库
  6. 管道,命名管道
  7. 符号链接
  8. 网络文件(例如:NFS file、网络socket,unix域名socket)
  9. 还有其它类型的文件,等等
$lsof| more COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 253,0 4096 2 / init 1 root rtd DIR 253,0 4096 2 / init 1 root txt REG 253,0 150352 1310795 /sbin/init init 1 root mem REG 253,0 65928 5505054 /lib64/libnss_files-2.12.so init 1 root mem REG 253,0 1918016 5521405 /lib64/libc-2.12.so init 1 root mem REG 253,0 93224 5521440 /lib64/libgcc_s-4.4.6-20120305.so.1 init 1 root mem REG 253,0 47064 5521407 /lib64/librt-2.12.so init 1 root mem REG 253,0 145720 5521406 /lib64/libpthread-2.12.so 说明: lsof输出各列信息的意义如下: COMMAND:进程的名称 PID:进程标识符 PPID:父进程标识符(需要指定-R参数) USER:进程所有者 PGID:进程所属组 FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等:
实例2:查找某个文件相关的进程 $lsof /bin/bash COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld_sa 2169 root txt REG 253,0 938736 4587562 /bin/bash ksmtuned 2334 root txt REG 253,0 938736 4587562 /bin/bash bash 20121 root txt REG 253,0 938736 4587562 /bin/bash 实例3:列出某个用户打开的文件信息 $lsof -u username -u 选项,u是user的缩写 实例4:列出某个程序进程所打开的文件信息 $lsof -c mysql -c 选项将会列出所有以mysql这个进程开头的程序的文件,其实你也可以写成 lsof | grep mysql, 但是第一种方法明显比第二种方法要少打几个字符; 实例5:列出某个用户以及某个进程所打开的文件信息 $lsof -u test -c mysql 实例6:通过某个进程号显示该进程打开的文件 $lsof -p 11968 实例7:列出所有的网络连接 $lsof -i 实例8:列出所有tcp 网络连接信息 $lsof -i tcp $lsof -n -i tcp COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME svnserve 11552 weber 3u IPv4 3799399 0t0 TCP *:svn (LISTEN) redis-ser 25501 weber 4u IPv4 113150 0t0 TCP 127.0.0.1:6379 (LISTEN) 实例9:列出谁在使用某个端口 $lsof -i :3306 实例10:列出某个用户的所有活跃的网络端口 $lsof -a -u test -i 实例11:根据文件描述列出对应的文件信息 $lsof -d description(like 2) 示例: $lsof -d 3 | grep PARSER1 tail 6499 tde 3r REG 253,3 4514722 417798 /opt/applog/open/log/HOSTPARSER1_ERROR_141217.log.001 说明:0表示标准输入,1表示标准输出,2表示标准错误,从而可知:所以大多数应用程序所打开的文件的 FD 都是从3 开始 实例12:列出被进程号为1234的进程所打开的所有IPV4 network files $lsof -i 4 -a -p 1234 实例13:列出目前连接主机nf5260i5-td上端口为:20,21,80相关的所有文件信息,且每隔3秒重复执行 lsof -i @nf5260i5-td:20,21,80 -r 3 

9.3 PS进程查看器

实例1:显示所有进程信息 [root@localhost test6]# ps -A PID TTY TIME CMD 1 ? 00:00:00 init 2 ? 00:00:01 migration/0 3 ? 00:00:00 ksoftirqd/0 4 ? 00:00:01 migration/1 5 ? 00:00:00 ksoftirqd/1 6 ? 00:29:57 events/0 7 ? 00:00:00 events/1 8 ? 00:00:00 khelper 49 ? 00:00:00 kthread 54 ? 00:00:00 kblockd/0 55 ? 00:00:00 kblockd/1 56 ? 00:00:00 kacpid 217 ? 00:00:00 cqueue/0 ……省略部分结果 实例2:显示指定用户信息 [root@localhost test6]# ps -u root PID TTY TIME CMD 1 ? 00:00:00 init 2 ? 00:00:01 migration/0 3 ? 00:00:00 ksoftirqd/0 4 ? 00:00:01 migration/1 5 ? 00:00:00 ksoftirqd/1 6 ? 00:29:57 events/0 7 ? 00:00:00 events/1 8 ? 00:00:00 khelper 49 ? 00:00:00 kthread 54 ? 00:00:00 kblockd/0 55 ? 00:00:00 kblockd/1 56 ? 00:00:00 kacpid ……省略部分结果 实例3:显示所有进程信息,连同命令行 [root@localhost test6]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 Nov02 ? 00:00:00 init [3] root 2 1 0 Nov02 ? 00:00:01 [migration/0] root 3 1 0 Nov02 ? 00:00:00 [ksoftirqd/0] root 4 1 0 Nov02 ? 00:00:01 [migration/1] root 5 1 0 Nov02 ? 00:00:00 [ksoftirqd/1] root 6 1 0 Nov02 ? 00:29:57 [events/0] root 7 1 0 Nov02 ? 00:00:00 [events/1] root 8 1 0 Nov02 ? 00:00:00 [khelper] root 49 1 0 Nov02 ? 00:00:00 [kthread] root 54 49 0 Nov02 ? 00:00:00 [kblockd/0] root 55 49 0 Nov02 ? 00:00:00 [kblockd/1] root 56 49 0 Nov02 ? 00:00:00 [kacpid] 实例4: ps 与grep 组合使用,查找特定进程 [root@localhost test6]# ps -ef|grep ssh root 2720 1 0 Nov02 ? 00:00:00 /usr/sbin/sshd root 17394 2720 0 14:58 ? 00:00:00 sshd: root@pts/0 root 17465 17398 0 15:57 pts/0 00:00:00 grep ssh 实例5:将与这次登入的 PID 与相关信息列示出来 [root@localhost test6]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 17398 17394 0 75 0 - 16543 wait pts/0 00:00:00 bash 4 R 0 17469 17398 0 77 0 - 15877 - pts/0 00:00:00 ps 实例6:列出目前所有的正在内存中的程序 [root@localhost test6]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 10368 676 ? Ss Nov02 0:00 init [3] root 2 0.0 0.0 0 0 ? S< Nov02 0:01 [migration/0] root 3 0.0 0.0 0 0 ? SN Nov02 0:00 [ksoftirqd/0] root 4 0.0 0.0 0 0 ? S< Nov02 0:01 [migration/1] root 5 0.0 0.0 0 0 ? SN Nov02 0:00 [ksoftirqd/1] root 6 0.0 0.0 0 0 ? S< Nov02 29:57 [events/0] root 7 0.0 0.0 0 0 ? S< Nov02 0:00 [events/1] root 8 0.0 0.0 0 0 ? S< Nov02 0:00 [khelper] root 49 0.0 0.0 0 0 ? S< Nov02 0:00 [kthread] root 54 0.0 0.0 0 0 ? S< Nov02 0:00 [kblockd/0] root 55 0.0 0.0 0 0 ? S< Nov02 0:00 [kblockd/1] root 56 0.0 0.0 0 0 ? S< Nov02 0:00 [kacpid]

9.4 top linux中的任务管理器

实例1:多核CPU监控 在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况; [rdtfr@bl685cb4-t ^]$ top top - 09:10:44 up 20 days, 16:51, 4 users, load average: 3.82, 4.40, 4.40 Tasks: 1201 total, 10 running, 1189 sleeping, 0 stopped, 2 zombie Cpu0 : 1.3%us, 2.3%sy, 0.0%ni, 96.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 : 1.3%us, 2.6%sy, 0.0%ni, 96.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 1.0%us, 2.0%sy, 0.0%ni, 92.5%id, 0.0%wa, 0.0%hi, 4.6%si, 0.0%st Cpu3 : 3.9%us, 7.8%sy, 0.0%ni, 83.2%id, 0.0%wa, 0.0%hi, 5.2%si, 0.0%st Cpu4 : 4.2%us, 10.4%sy, 0.0%ni, 63.8%id, 0.0%wa, 0.0%hi, 21.5%si, 0.0%st Cpu5 : 6.8%us, 12.7%sy, 0.0%ni, 80.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu6 : 2.9%us, 7.2%sy, 0.0%ni, 85.3%id, 0.0%wa, 0.0%hi, 4.6%si, 0.0%st Cpu7 : 6.2%us, 13.0%sy, 0.0%ni, 75.3%id, 0.0%wa, 0.0%hi, 5.5%si, 0.0%st Mem: 32943888k total, 32834216k used, 109672k free, 642704k buffers Swap: 35651576k total, 5761928k used, 29889648k free, 16611500k cached 实例2:高亮显示当前运行进程 在top基本视图中,按键盘“b”(打开/关闭加亮效果); 实例3:显示完整的程序命令 命令:top -c [rdtfr@bl685cb4-t ^]$ top -c top - 09:14:35 up 20 days, 16:55, 4 users, load average: 5.77, 5.01, 4.64 Tasks: 1200 total, 5 running, 1192 sleeping, 0 stopped, 3 zombie Cpu(s): 4.4%us, 6.0%sy, 0.0%ni, 83.8%id, 0.2%wa, 0.0%hi, 5.5%si, 0.0%st Mem: 32943888k total, 32842896k used, 100992k free, 591484k buffers Swap: 35651576k total, 5761808k used, 29889768k free, 16918824k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2013 apache 18 0 403m 88m 5304 S 25.0 0.3 6:37.44 /usr/sbin/httpd 18335 pubtest 22 0 65576 996 728 R 7.8 0.0 0:00.24 netstat -naltp 16499 rdtfare 15 0 13672 2080 824 R 2.6 0.0 0:00.38 top -c 29684 rdtfare 15 0 1164m 837m 14m S 2.3 2.6 148:47.54 ./autodata data1.txt 12976 pubtest 18 0 238m 9000 1932 S 1.6 0.0 439:28.44 tscagent -s TOEV_P 实例4:显示指定的进程信息 命令:top -p pidid /opt/app/tdv1/config#top -p 17265 top - 09:17:34 up 455 days, 17:55, 2 users, load average: 3.76, 4.56, 4.46 Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie Cpu(s): 7.8%us, 1.9%sy, 0.0%ni, 89.2%id, 0.0%wa, 0.1%hi, 1.0%si, 0.0%st Mem: 8175452k total, 8103988k used, 71464k free, 268716k buffers Swap: 6881272k total, 4275424k used, 2605848k free, 6338184k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 17265 tdv1 15 0 56504 828 632 S 0.0 0.0 195:53.25 redis-server 指定进程信息有多个时,需要结合其它工具将回车替换为,(-p 支持pid,pid,pid语法) 命令:top -p pgrep MULTI_PROCESS | tr “\n” ”,” | sed ‘s/,$//’ /opt/app/tdv1$top -p `pgrep java | tr "\\n" "," | sed 's/,$//'` top - 14:05:31 up 53 days, 2:43, 9 users, load average: 0.29, 0.34, 0.22 Tasks: 3 total, 0 running, 3 sleeping, 0 stopped, 0 zombie Cpu(s): 5.9%us, 8.2%sy, 0.0%ni, 86.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 66082088k total, 29512860k used, 36569228k free, 756352k buffers Swap: 32767992k total, 1019900k used, 31748092k free, 15710284k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 27855 rdtfare 20 0 4454m 1.3g 5300 S 0.7 2.0 338:31.37 java 2034 jenkins 20 0 18.3g 5.2g 5284 S 0.3 8.2 56:02.38 java 12156 rdtfare 20 0 4196m 1.2g 12m S 0.3 2.0 86:34.62 java 8.3. 更强大的工具 htop 是一个 Linux 下的交互式的进程浏览器,可以用来替换Linux下的top命令。 与Linux传统的top相比,htop更加人性化。它可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作。 与top相比,htop有以下优点: - 可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。 - 在启动上,比top 更快。 - 杀进程时不需要输入进程号。 - htop 支持鼠标操作。

9.5 free 查询可用内存

free工具用来查看系统可用内存: /opt/app/tdev1$free total used free shared buffers cached Mem: 8175320 6159248 2016072 0 310208 5243680 -/+ buffers/cache: 605360 7569960 Swap: 6881272 16196 6865076

9.6 vmstat 监视内存使用情况

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可实时动态监视操作系统的虚拟内存、进程、CPU活动。

vmstat [-V] [-n] [delay [count]] -V表示打印出版本信息; -n表示在周期性循环输出时,输出的头部信息仅显示一次; delay是两次输出之间的延迟时间; count是指按照这个时间间隔统计的次数。 /root$vmstat 5 5 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 6 0 0 27900472 204216 28188356 0 0 0 9 1 2 11 14 75 0 0 9 0 0 27900380 204228 28188360 0 0 0 13 33312 126221 22 20 58 0 0 2 0 0 27900340 204240 28188364 0 0 0 10 32755 125566 22 20 58 0 0
Procs(进程): r: 运行队列中进程数量 b: 等待IO的进程数量 Memory(内存): swpd: 使用虚拟内存大小 free: 可用内存大小 buff: 用作缓冲的内存大小 cache: 用作缓存的内存大小 Swap: si: 每秒从交换区写到内存的大小 so: 每秒写入交换区的内存大小 IO:(现在的Linux版本块的大小为1024bytes) bi: 每秒读取的块数 bo: 每秒写入的块数 system: in: 每秒中断数,包括时钟中断 cs: 每秒上下文切换数 CPU(以百分比表示) us: 用户进程执行时间(user time) sy: 系统进程执行时间(system time) id: 空闲时间(包括IO等待时间) wa: 等待IO时间

9.7 Wget下载命令

实例1:使用wget下载单个文件 $wget http://www.minjieren.com/wordpress-3.1-zh_CN.zip 说明:以上例子从网络下载一个文件并保存在当前目录,在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)。 实例2:使用wget -O下载并以不同的文件名保存 $wget -O wordpress.zip http://www.minjieren.com/download.aspx?id=1080 wget默认会以最后一个符合”/”的后面的字符来命令,对于动态链接的下载通常文件名会不正确。 实例3:使用wget –limit -rate限速下载 $wget --limit-rate=300k http://www.minjieren.com/wordpress-3.1-zh_CN.zip 当你执行wget的时候,它默认会占用全部可能的宽带下载。但是当你准备下载一个大文件,而你还需要下载其它文件时就有必要限速了。 实例4:使用wget -c断点续传 $wget -c http://www.minjieren.com/wordpress-3.1-zh_CN.zip 使用wget -c重新启动下载中断的文件,对于我们下载大文件时突然由于网络等原因中断非常有帮助,我们可以继续接着下载而不是重新下载一个文件。需要继续中断的下载时可以使用-c参数。 实例5:使用wget -b后台下载 $wget -b http://www.minjieren.com/wordpress-3.1-zh_CN.zip Continuing in background, pid 1840. Output will be written to 'wget-log'. 对于下载非常大的文件的时候,我们可以使用参数-b进行后台下载。 你可以使用以下命令来察看下载进度: $tail -f wget-log 实例6:伪装代理名称下载 wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" http://www.minjieren.com/wordpress-3.1-zh_CN.zip 有些网站能通过根据判断代理名称不是浏览器而拒绝你的下载请求。不过你可以通过–user-agent参数伪装。 实例7:使用wget -i下载多个文件 首先,保存一份下载链接文件,接着使用这个文件和参数-i下载: $cat > filelist.txt url1 url2 url3 url4 $wget -i filelist.txt 实例8:使用wget –mirror镜像网站 $wget --mirror -p --convert-links -P ./LOCAL URL 下载整个网站到本地 -miror:开户镜像下载 -p:下载所有为了html页面显示正常的文件 -convert-links:下载后,转换成本地的链接 -P ./LOCAL:保存所有文件和目录到本地指定目录 实例9: 使用wget -r -A下载指定格式文件 $wget -r -A.pdf url 可以在以下情况使用该功能: 下载一个网站的所有图片 下载一个网站的所有视频 下载一个网站的所有PDF文件 实例10:使用wget FTP下载 $wget ftp-url $wget --ftp-user=USERNAME --ftp-password=PASSWORD url 可以使用wget来完成ftp链接的下载 使用wget匿名ftp下载:wget ftp-url 使用wget用户名和密码认证的ftp下载:wget –ftp-user=USERNAME –ftp-password=PASSWORD url

9.8 SCP 拷贝命令

scp [参数] [原路径] [目标路径] -1 强制scp命令使用协议ssh2 -2 强制scp命令使用协议ssh2 -4 强制scp命令只使用IPv4寻址 -6 强制scp命令只使用IPv6寻址 -B 使用批处理模式(传输过程中不询问传输口令或短语) -C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能) -p 留原文件的修改时间,访问时间和访问权限。 -q 不显示传输进度条。 -r 递归复制整个目录。 -v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。 -c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。 -F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。 -i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。 -l limit 限定用户所能使用的带宽,以Kbit/s为单位。 -o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式, -P port 注意是大写的P, port是指定数据传输用到的端口号 -S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。 
实例1:从远处复制文件到本地目录 $scp root@10.6.159.147:/opt/soft/demo.tar /opt/soft/ 说明: 从10.6.159.147机器上的/opt/soft/的目录中下载demo.tar 文件到本地/opt/soft/目录中 实例2:从远处复制到本地 $scp -r root@10.6.159.147:/opt/soft/test /opt/soft/ 说明: 从10.6.159.147机器上的/opt/soft/中下载test目录到本地的/opt/soft/目录来。 实例3:上传本地文件到远程机器指定目录 $scp /opt/soft/demo.tar root@10.6.159.147:/opt/soft/scptest 说明: 复制本地opt/soft/目录下的文件demo.tar 到远程机器10.6.159.147的opt/soft/scptest目录 实例4:上传本地目录到远程机器指定目录 $scp -r /opt/soft/test root@10.6.159.147:/opt/soft/scptest 说明: 上传本地目录 /opt/soft/test到远程机器10.6.159.147上/opt/soft/scptest的目录中

9.9 Crontab定时任务

crontab [-u user] file crontab [-u user] [ -e | -l | -r ] -u user:用来设定某个用户的crontab服务; file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。 -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。 -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。 -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。 -i:在删除用户的crontab文件时给确认提示
实例1:每1分钟执行一次myCommand * * * * * myCommand 实例2:每小时的第3和第15分钟执行 3,15 * * * * myCommand 实例3:在上午8点到11点的第3和第15分钟执行 3,15 8-11 * * * myCommand 实例4:每隔两天的上午8点到11点的第3和第15分钟执行 3,15 8-11 */2 * * myCommand 实例5:每周一上午8点到11点的第3和第15分钟执行 3,15 8-11 * * 1 myCommand 实例6:每晚的21:30重启smb 30 21 * * * /etc/init.d/smb restart 实例7:每月1、10、22日的4 : 45重启smb 45 4 1,10,22 * * /etc/init.d/smb restart 实例8:每周六、周日的1 : 10重启smb 10 1 * * 6,0 /etc/init.d/smb restart 实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb 0,30 18-23 * * * /etc/init.d/smb restart 实例10:每星期六的晚上11 : 00 pm重启smb 0 23 * * 6 /etc/init.d/smb restart 实例11:每一小时重启smb * */1 * * * /etc/init.d/smb restart 实例12:晚上11点到早上7点之间,每隔一小时重启smb 0 23-7 * * * /etc/init.d/smb restart

有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。

在crontab文件中定义多个调度任务时,需要特别注环境变量的设置,因为我们手动执行某个任务时,是在当前shell环境下进行的,程序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任务运行所需的所有环境变量,这样,系统执行任务调度时就没有问题了。

不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:

  1. 脚本中涉及文件路径时写全局路径;

  2. 脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:

    cat start_cbp.sh !/bin/sh source /etc/profile export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf /usr/local/jboss-4.0.5/bin/run.sh -c mev &
  3. 当手动执行脚本OK,但是crontab死活不执行时,很可能是环境变量惹的祸,可尝试在crontab中直接引入环境变量解决问题。如:

0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

博文参考

Linux学习教程,Linux入门教程(超详细)

工具参考篇 — Linux Tools Quick Tutorial

以上内容由“WiFi之家网”整理收藏!。

原创文章,作者:192.168.1.1,如若转载,请注明出处:https://www.224m.com/232268.html

(0)
192.168.1.1192.168.1.1
上一篇 2022年11月9日
下一篇 2022年11月9日

相关推荐