Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Linux 命令 #23

Open
lxy666 opened this issue Dec 8, 2017 · 0 comments
Open

Linux 命令 #23

lxy666 opened this issue Dec 8, 2017 · 0 comments

Comments

@lxy666
Copy link

lxy666 commented Dec 8, 2017

我们最近正在开发小程序,微信对小程序的包大小有2M的限制,我们开发完一看有1M多,虽然满足要求,但是追求极致的我们想看看能否对文件大小进行优化。所以期望能按照文件大小从小到大排个序,以便知道需要对哪些文件进行优化。

任务

使用Linux命令对项目中的文件按大小排序,可考虑一下场景:

  1. 能否对只感兴趣的文件类型进行排序,比如只对图片大小进行排列;

ls -lSr *.png *.jpg *.svg

  1. 能否只列出 >500k 节的文件,因为项目中文件太多了全列出来会不方便阅读

find . -type f -size +500k

linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,linux命令在系统中有两种类型:内置Shell命令和Linux命令。

什么是 shell

一说到命令行,我们真正指的是 shell。shell 就是一个程序,它接受从键盘输入的命令, 然后把命令传递给操作系统去执行。几乎所有的 Linux 发行版都提供一个名为 bash 的 来自 GNU 项目的 shell 程序。“bash” 是 “Bourne Again SHell” 的首字母缩写, 所指的是这样一个事实,bash 是最初 Unix 上由 Steve Bourne 写成 shell 程序 sh 的增强版。

终端仿真器

当使用图形用户界面时,我们需要另一个和 shell 交互的叫做终端仿真器的程序。 如果我们浏览一下桌面菜单,可能会找到一个。虽然在菜单里它可能都 被简单地称为 “terminal”,但是 KDE 用的是 konsole , 而 GNOME 则使用 gnome-terminal。 还有其他一些终端仿真器可供 Linux 使用,但基本上,它们都完成同样的事情, 让我们能访问 shell。也许,你可能会因为附加的一系列花俏功能而喜欢上某个终端。

典型场景是:服务器远程登陆,只有命令行界面,此时不得不用命令行工具处理日常工作任务

linux 常见命令

  • 文件上传、下载。一般来说就是sz,rz,wget,curl,scp等。
  • 压缩、解压。所以得会用tar,zip等命令。
  • 目录和文件的创建、移除、拷贝、移动。基本命令是:mkdir,rm,mv等。
  • 文本显示、查找、替换、统计。在命令行下分析程序的日志,必备的技能就是文本操作。基本的命令有cat,tail,less,head,grep,sed,awk,wc,xargs等,这组命令行基本要通过管道来配合使用。
  • 文本编辑。 vi基本技能。
  • 数据库操作。命令行下,操作mysql和sqlite是常见的事情,这个基本就是常规的sql操作语句。
  • 版本管理svn、git。
  • 元数据分布式同步,ZooKeeper。

ls命令

ls命令就是list的缩写,缺省下ls用来打印出当前目录的清单,如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单。
通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限),查看目录信息等等。

1. 命令格式:

ls [选项] [目录名]

2. 命令功能:

列出目标目录中所有的子目录和文件。

3. 常用参数:

  • -a, –all 列出目录下的所有文件,包括以 . 开头的隐含文件
  • -A 同-a,但不列出“.”(表示当前目录)和“..”(表示当前目录的父目录)。
  • -b 当文件名中有不可显示的字符时,将显示该字符的八进制数字。
  • -c 按文件的最后修改时间排序
  • -C 每栏由上至下列出项目
  • –color[=WHEN] 控制是否使用色彩分辨文件。WHEN 可以是'never'、'always'或'auto'其中之一
  • -d, –directory 将目录象文件一样显示,而不是显示其下的文件。
  • -D, –dired 产生适合 Emacs 的 dired 模式使用的结果
  • -f 对输出的文件不进行排序,-aU 选项生效,-lst 选项失效
  • -g 类似 -l,但不列出所有者
  • -G, –no-group 不列出任何有关组的信息
  • -h, –human-readable 以容易理解的格式列出文件大小 (例如 1K 234M 2G)
  • –si 类似 -h,但文件大小取 1000 的次方而不是 1024
  • -H, –dereference-command-line 使用命令列中的符号链接指示的真正目的地
  • –indicator-style=方式 指定在每个项目名称后加上指示符号<方式>:none (默认),classify (-F),file-type (-p)
  • -i, –inode 印出每个文件的 inode 号
  • -I, –ignore=样式 不印出任何符合 shell 万用字符<样式>的项目
  • -k 即 –block-size=1K,以 k 字节的形式表示文件的大小。
  • -l:以长格式显示文件的详细信息,包括文件的类型与权限、链接数、文件所有者、文件所有者所属的组、文件大小、最近修改时间及文件名
  • -L, –dereference 当显示符号链接的文件信息时,显示符号链接所指示的对象而并非符号链接本身的信息
  • -m 所有项目以逗号分隔,并填满整行行宽
  • -o 类似 -l,显示文件的除组信息外的详细信息。
  • -r, –reverse 依相反次序排列
  • -R, –recursive 同时列出所有子目录层
  • -s, –size 以块大小为单位列出所有文件的大小
  • -S 根据文件大小排序
  • –sort=WORD 以下是可选用的 WORD 和它们代表的相应选项:
    extension -X status -c
    none -U time -t
    size -S atime -u
    time -t access -u
    version -v use -u
  • -t 以文件修改时间排序
  • -u 配合 -lt:显示访问时间而且依访问时间排序
    配合 -l:显示访问时间但根据名称排序
    否则:根据访问时间排序
  • -U 不进行排序;依文件系统原有的次序列出项目
  • -v 根据版本进行排序
  • -w, –width=COLS 自行指定屏幕宽度而不使用目前的数值
  • -x 逐行列出项目而不是逐栏列出
  • -X 根据扩展名排序
  • -1 每行只列出一个文件
  • –help 显示此帮助信息并离开
  • –version 显示版本信息并离开

显示彩色目录列表

打开/etc/bashrc, 加入如下一行:
alias ls="ls --color"
下次启动bash时就可以像在Slackware里那样显示彩色的目录列表了, 其中颜色的含义如下:
1. 蓝色-->目录
2. 绿色-->可执行文件
3. 红色-->压缩文件
4. 浅蓝色-->链接文件
5. 灰色-->其他文件

find命令

1. 命令格式:

find [起始目录] [搜索条件] [操作]

其中[起始目录]是指命令将从该目录起,遍历其下的所有子目录,查找满足条件的文件。该目录默认是当前目录。[搜索条件]是一个逻辑表达式,当表达式为"真"时,搜索条件成立,为"假"时不成立。

2. 命令功能:

用于查找文件

3. 常用参数:

搜索条件 说 明
-name ‘字符串’ 查找文件名中包含所给字符串的所有文件
-user ‘用户名’ 查找属于指定用户的文件
-group ‘用户组名’ 查找属于指定用户组的文件
-type x 查找类型为x的文件,类型包括b(块设备文件),c(字符设备文件),d(目录文件),p(命名管道文件),f(普通文件),l(符号链接文件),s(socket文件)
-atime n 查找n天以前被访问过的文件
-size n 指定文件大小为n
-perm 查找符合指定权限值的文件或目录
-mount 要查找文件时不跨越文件系统mount点
-follow 如果find命令遇到符号链接文件,就跟踪到链接所指向文件
-cpio 对匹配的文件使用cpio命令,将文件备份到磁带设备中
-newer file1 ! file2 查找更改时间比文件file1晚但比文件file2早的文件
-prume 不在指定的目录中查找,如果同时指定-depth选项,那么-prune将被find命令忽略
-ok 和exec作用相同,但在执行每一个命令之前,都会给出提示,由用户来确定是否执行
-depth 在查找文件时,首先查找当前目录,然后再在其他子目录中查找

示例

  1. 从当前目录查找所有以.txt结尾的文件并在屏幕上显示出来,命令行为:

# find . -name '*.txt' -print

  1. 再如从根目录查找类型为符号连接的文件,并将其删除,命令行为:

# find / -type l -exec rm { } \;

  1. 又如从当前目录查找用户tom的所有文件并在屏幕上显示,命令行为:

# find . -user 'tom' -print

  1. 又如显示当前目录中大于20字节的.c文件名,命令行为:

# find . -name "*.c" -size +20c -print

  1. 显示当前目录中恰好10天前访问过的文件名,命令行为:

# find . -atime 10 -print

  1. 显示当前目录中不到10天前访问过的文件名,命令行为:

# find . -atime -10 -print

  1. 查找/home目录下权限为640的文件或目录,命令行为:

#find /home -perm 640

  1. 搜索根目录下大于100KB的文件,并显示,命令行为:

#find / -size +100K -print

  1. 搜索根目录下小于500KB的文件,命令行为:

#find / -size -500K -print

  1. 在当前目录中查找所有文件名以.doc结尾,且更改时间在5天以上的文件,找到后进行删除,且删除前给出提示,命令行为:

#find . -name '*.doc' -mtime +5 -ok rm { } \;

  1. 查找所有文件名匹配 通配符模式“*.JPG”和文件大小大于1M 的文件:

# find ~ -type f -name "\*.JPG" -size +1M

  1. 在当前目录下查找所有链接文件,并以长格式显示文件的基本信息,命令行为:

# find . -type l -exec ls -l {} \;

lrw-rw-r-- 1 root root 36 07-27 14:34 ./example2  
lrw-rw-r-- 1 root root 72 07-27 14:36 ./example3  
lrw-rw-r-- 1 root root 36 07-27 14:36 ./example1 

在当前目录中查找文件名由一个小写字母、一个大写字母和两个数字组成,且扩展名为.doc的文件,并显示,命令行为:

#find . -name ' [a-z][A-Z][0-9][0-9].doc' -print

ls -l

-l:以长格式显示文件的详细信息,包括文件的类型与权限、链接数、文件所有者、文件所有者所属的组、文件大小、最近修改时间及文件名

我们仔细看一下这个权限,一共是10位:

第一个字符代表这个文件是“目录,文件或连接文件等”。

  • 若是[d]则是目录
  • 若是[-]则是文件
  • 若是[l]则表示为连接文件(linkfile)
  • 若是[b]则表示设备文件里面的可供存储的接口设备
  • 若是[c]则表示设备文件里面的串行端口设备,例如键盘,鼠标(一次性读取设备)

接下来的字符中,以3个为一组,且均为“rwx”的三个参数的组合。其中[r]代表可读,[w]代表可写,[x]代表可执行(execute)。要注意的是,这3个权限的位置不会改变,如果没有权限,就会出现减号[-]而已。

  • 第一组为“文件所有者的权限”
  • 第二组为“同用户组的权限”
  • 第三组为“其他非本用户组的权限”

如何改变文件属性与权限

  • chgrp: 改变文件所属用户组
  • chown: 改变文件所有者
  • chmod: 改变文件的权限

改变所属用户组: chgrp

改变一个文件的用户组真的很简单的,直接以chgrp来改变,chgrp是change group的简称。不过,请记得,要被改变的组名必须在/etc/group文件内存在才行,否则就会显示错误。

[root@www ~]# chgrp [-R] dirname/filename ...
选项与参数:
-R : 进行地柜(recursive)的持续更改,也即连同子目录下的所有文件,目录
都更新成为这个用户组之意。常常用在更改某一目录所有的文件情况。
范例:
[root@www ~]# chgrp users install.log
[root@www ~]# ls -l
-rw-r--r-- 1 root users 68495 Jun 25 08:53 install.log

改变文件所有者: chown

[root@www ~] # chown [-R] 账号名称 文件或目录
[root@www ~] # chown [-R] 账号名称:组名 文件或目录
参数:
-R : 进行递归(recursive) 的持续更改,即连同子目录下所有文件都更改
范例:将 install.log的所有者改bin这个账号:
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log
范例: 将install.log的所有者与用户组改回为root:
[root@www ~]# chown root:root instal.log
[root@www ~]# ls -l
-rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log

改变权限: chmod

  • 文件权限的改变使用的命令式chmod这个命令,设置权限的方式有两种,一种是使用数字,另一种是使用符号。

利用数字

Linux的权限有9个,三个是一位。例如:

[-rwxrwx---]分别是:

owner = rwx = 4 + 2 + 1 = 7
group = rwx = 4 + 2 + 1 = 7
others = --- = 0 + 0 + 0 = 0

所以这个文件的权限就是770

我们应用的时候就是: chmod [-R] xyz 文件或目录

符号类型改变文件权限

        u        +            r      
        g        -            w     文件或目录
        o        =            x
        a

    [用户类型] [添加修改赋值] [读,写,可执行]

例如我们要设置一个文件的权限成为”-rwxr-xr-x”时,基本上就是:

user(u) :具有可读,可写,可执行的权限;
group与others(g/o):具有可读与执行的权限.

所以就是:

[root@www ~]# chmod u=rwx,go=rx .bashrc

  • 注意: 那个 u=rwx,go=rx是连在一起的

我们也可以通过+ - = 来进行权限的设置,例如:

[root@www ~]# chmod a-x .bashrc

  • 以上命令就是要把所有人的执行权限都去掉

Linux 命令大全

对于小程序优化的方法:

避免使用本地大图片、大资源文件

  1. 请避免在小程序的UI上使用大图片,将图片上传到云端,或图床,上传的图片较大,建议压缩,tinypng
  2. 使用小而精致的小图标,比如小程序使用 icon
    河狸家icon库

代码简洁

  1. 在视图层面,尽量避免不必要的组件嵌套,能用一个view做到的,就不要再多套一层view。
  2. 使用组件进行复用

使用 web-view

web-view 组件是一个可以用来承载网页的容器,会自动铺满整个小程序页面。(基础库 1.6.4 开始支持,低版本需做兼容处理)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant