Linux之实用技能


查看机器是多少位


方法一

>>>$ getconf LONG_BIT
>>>$ 64

方法二

>>>$ uname -a
>>>$ Linux alex-virtual-machine 3.16.0-30-generic #40~14.04.1-Ubuntu SMP Thu Jan 15 17:43:14 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

方法三

>>>$ uname -p
>>>$ x86_64

实用命令

命令 解释
wc 统计文本中行数、字数、字符数
stat 显示指定文件的详细信息,比ls更详细
who 显示在线登陆用户
whoami 显示当前操作用户
hostname 显示主机名
uname 显示系统信息
top 动态显示当前耗费资源最多进程信息
ps 显示瞬间进程状态 ps -aux
du 查看目录大小 du -h /home带有单位显示目录信息
df 查看磁盘大小 df -h 带有单位显示磁盘信息

Linux 代码文件大小、行数、字节数统计

命令解释

语法:wc [选项] 文件…

说明:该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。

该命令各选项含义如下:

  • - c 统计字节数。
  • - l 统计行数。
  • - w 统计字数。

这些选项可以组合使用。

输出列的顺序和数目不受选项的顺序和数目的影响。

总是按下述顺序显示并且每项最多一列。

行数、字数、字节数、文件名

如果命令行中没有文件名,则输出中不出现文件名。

例子

查看某个文件

Alex@alex:blog(master *)$wc -lcw package.json
      24      44     618 package.json

查看某目录下的所有文件(包括子目录)

查看blog 目录下命名后缀是html 文件所有的数量
Alex@alex:blog$find blog/ -name "*.html"|wc -l
     199

目录下所有md文件代码行数

find blog/ -name "*.md" |xargs cat|wc -l

 wc -l `find ./ -name "*.md"`|tail -n1

统计当前目录下文件个数

ls -l |grep "^-"|wc -l

统计当前文件夹下目录的个数

ls -l |grep "^d"|wc -l

统计当前文件夹下文件的个数,包括子文件夹里的

ls -lR|grep "^-"|wc -l

统计文件夹下目录的个数,包括子文件夹里的

ls -lR|grep "^d"|wc -l

查看磁盘或文件夹大小

显示磁盘分区上可以使用的磁盘空间

[root@QPDCCJK02 data]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G  8.9G  9.9G  48% /
/dev/vdb1        20G  9.2G  9.4G  50% /data

查看当前目录大小

[root@QPDCCJK02 data]# du -sh 
9.2G    .

查看当前目录及其下级目录大小

du -lh –max-depth=x(x:值为1.2.3.4.5…表示显示多少级)

[root@QPDCCJK02 data]# du -lh --max-depth=1
536M    ./jac_workspace
3.3G    ./docker-bk
15M     ./deploy
44M     ./workspace
407M    ./test-lf-log-backup
1.5M    ./gagent_QA
45M     ./wwwroot
8.0K    ./gagent_Batch
4.9G    ./gagent
16K     ./lost+found
12M     ./gagent_Dev

查看指定目录大小

[root@QPDCCJK02 data]# du -sh gagent
4.9G    gagent

性能分析工具 TOP命令

TOP命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况

命令格式:
top [-] [d] [p] [q] [c] [C] [S] [n]

查看某个用户下的所有进程

alex@alex-virtual-machine:/mnt/hgfs/gagent/working/demo$ top -u alex

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
2763 alex      20   0 80420  16m  10m S   10  1.6   0:11.69 unity-panel-ser
2865 alex      20   0 62216 4160 3268 S    6  0.4   0:05.54 hud-service
2617 alex      20   0  4544 2144  632 S    4  0.2   0:05.30 dbus-daemon
2646 alex      20   0  134m  12m 9884 S    2  1.2   0:09.35 metacity
2667 alex      20   0  107m  22m  17m S    2  2.3   0:09.72 unity-2d-panel
2679 alex      20   0 49608 8884 6936 S    2  0.9   0:02.26 bamfdaemon
2681 alex      20   0  104m  13m  10m S    2  1.4   0:02.65 nm-apple

查看单独某个进程

alex@alex-virtual-machine:/mnt/hgfs/gagent/working/demo$ ps -a
  PID TTY          TIME CMD
 9463 pts/1    00:00:00 gizwits
 9471 pts/2    00:00:00 ps
alex@alex-virtual-machine:/mnt/hgfs/gagent/working/demo$ top -p 9463
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
9463 alex      20   0 30424 1152  944 S    2  0.1   0:00.74 gizwits

说明

名称 解释
PID 进程的ID
USER 进程所有者
PR 进程的优先级别,越小越优先被执行
NInice
VIRT 进程占用的虚拟内存
RES 进程占用的物理内存
SHR 进程使用的共享内存
S 进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU 进程占用CPU的使用率
%MEM 进程使用的物理内存和总内存的百分比
TIME+ 该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND 进程启动命令名称

运行日志输出到终端和保存起来


# 运行targe 目标,且同时把日志输出到终端和保存到文件log.txt
>>>$ ./targe | tee log.txt

tree 命令


此命令可以用树🌲形状显示目录结构;

mac 下安装

brew install tree

语法

tree(选项)(参数)

选项

-a:显示所有文件和目录;
-A:使用ASNI绘图字符显示树状图而非以ASCII字符组合;
-C:在文件和目录清单加上色彩,便于区分各种类型;
-d:先是目录名称而非内容;
-D:列出文件或目录的更改时间;
-f:在每个文件或目录之前,显示完整的相对路径名称;
-F:在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","@","|"号;
-g:列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码;
-i:不以阶梯状列出文件和目录名称;
-l:<范本样式> 不显示符号范本样式的文件或目录名称;
-l:如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录;
-n:不在文件和目录清单加上色彩;
-N:直接列出文件和目录名称,包括控制字符;
-p:列出权限标示;
-P:<范本样式> 只显示符合范本样式的文件和目录名称;
-q:用“?”号取代控制字符,列出文件和目录名称;
-s:列出文件和目录大小;
-t:用文件和目录的更改时间排序;
-u:列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码;
-x:将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该目录予以排除在寻找范围外。

查看socket 端口占用情况

netstat -tunlp |grep 端口号

说明

-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名

显示命令执行时的参数

ps -aux | grep CMD

ubuntu 防火墙

# 查看状态
sudo ufw status  
# 开启
sudo ufw enable  
# 默认关闭外部访问
sudo ufw default deny 
# 新增端口
sudo ufw allow 8080  
# 删除端口
sudo ufw delete allow 8080
# 允许特定来源的ip地址访问
sudo ufw allow from 192.168.1.1

删除

  • 删除目录下大小为0的文件
 find ./ -name "*" -type f -size 0c | xargs -n 1 rm -f
  • 删除当前目录下面所有 test 文件夹下面的文件
 find ./ -name "test" -type d -exec rm -rf {} ;
  • 删除文件夹下面的所有的.py文件
find ./ -name '.py' -exec rm -rf {} ;
  • 显示当前路径下,大于50M的文件
find ./ -size +50M
  • 删除当前路径下,大于50M的文件
find ./ -size +50M -exec rm {} \;

Linux 下测试TCP/UDP 连通性

通过netcat软件实现

  • Ubuntu 安装 apt install netcat
  • CentOS 安装 yum install nc

测试方法

  • 服务器
     ubuntu@VM-133-112-ubuntu:~$ nc -l -u 1885
  • 客户端
     alexlin@DESKTOP-2Q06681:/mnt/e/work/gagent/GAgent_HFX30$ nc -u ubuntu.xxxxxx.com 1885
    nc

Help

ubuntu@VM-133-112-ubuntu:~$ nc -help
OpenBSD netcat (Debian patchlevel 1.187-1ubuntu0.1)
usage: nc [-46CDdFhklNnrStUuvZz] [-I length] [-i interval] [-M ttl]
          [-m minttl] [-O length] [-P proxy_username] [-p source_port]
          [-q seconds] [-s source] [-T keyword] [-V rtable] [-W recvlimit] [-w timeout]
          [-X proxy_protocol] [-x proxy_address[:port]]           [destination] [port]
        Command Summary:
                -4              Use IPv4
                -6              Use IPv6
                -b              Allow broadcast
                -C              Send CRLF as line-ending
                -D              Enable the debug socket option
                -d              Detach from stdin
                -F              Pass socket fd
                -h              This help text
                -I length       TCP receive buffer length
                -i interval     Delay interval for lines sent, ports scanned
                -k              Keep inbound sockets open for multiple connects
                -l              Listen mode, for inbound connects
                -M ttl          Outgoing TTL / Hop Limit
                -m minttl       Minimum incoming TTL / Hop Limit
                -N              Shutdown the network socket after EOF on stdin
                -n              Suppress name/port resolutions
                -O length       TCP send buffer length
                -P proxyuser    Username for proxy authentication
                -p port         Specify local port for remote connects
                -q secs         quit after EOF on stdin and delay of secs
                -r              Randomize remote ports
                -S              Enable the TCP MD5 signature option
                -s source       Local source address
                -T keyword      TOS value
                -t              Answer TELNET negotiation
                -U              Use UNIX domain socket
                -u              UDP mode
                -V rtable       Specify alternate routing table
                -v              Verbose
                -W recvlimit    Terminate after receiving a number of packets
                -w timeout      Timeout for connects and final net reads
                -X proto        Proxy protocol: "4", "5" (SOCKS) or "connect"
                -x addr[:port]  Specify proxy address and port
                -Z              DCCP mode
                -z              Zero-I/O mode [used for scanning]
        Port numbers can be individual or ranges: lo-hi [inclusive]

dos2unix批量转换方法

find /apps/cws -name "*.sh" -exec dos2unix {} \;       (注意:一定要有{},标示参数;以“\;”结尾; {} 和\之间一定要有一个空格)

删除文件

删除指定目录下10天前产生的文件

find . -mtime +10 -name "*.*" -exec rm -rf {} \;

解释

-mtime:标准语句写法

+10:查找10天前的文件,这里用数字代表天数,+30表示查找30天前的文件

.“:希望查找的数据类型,”.jpg”表示查找扩展名为jpg的所有文件,”“表示查找所有文件

-exec:固定写法

rm -rf:强制删除文件,包括目录

{} ; :固定写法,一对大括号+空格+\+;

库文件查看工具

linux下查看程序的动态库依赖(so)

ldd xxx

例子如下,左边是依赖库名称,右边是依赖库位置(若存在则为路径,不存在则输出not found)
upload successful

查看库文件(.a)包含的函数和变量

nm xxx.a

参考资料

  1. http://www.comptechdoc.org/os/linux/programming/c/linux_pgc.html
  2. Linux在线man

文章作者: Alex
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex !
 上一篇
Linux之服务安装 Linux之服务安装
ssh-server 安装SSH分客户端 openssh-client 服务端 openssh-server
2017-06-06 Alex.Lin
下一篇 
Linux之CoreDump Linux之CoreDump
Core Dump 定位 打开CoreDump 功能 在终端中输入命令 ulimit -c ,输出的结果为 0,说明默认是关闭 core dump 的,即当程序异常终止时,也不会生成 core dump 文件。 我们可以使用命令 ulimi
2017-06-06 Alex.Lin
  目录