linux命令操作
文件预设权限:
umask / umask -S
umask的分数是默认值需要减掉的权限
文件隐藏属性:
chattr 配置文件隐藏属性
chattr [+-=][ASacdistu] 文件或目录名称
+ :增加某一个特殊参数,其他原本存在参数则不动。
- :移除某一个特殊参数,其他原本存在参数则不动。
= :设定一定,且仅有后面接的参数
a :当设定 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有 root 才能设定这属性;
i :他可以让一个文件不能被删除、改名、设定连结也无法写入或新增数据。对于系统安全性有相当大的帮助,只有 root 能设定此属性。
lsaddr 显示文件隐藏属性
lsattr [-adR] 文件或目录
-a :将隐藏文件的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
-R :连同子目录的数据也一并列出来!
文件特殊权限:SUID,SGID,SBIT(只对目录有效)
SGID对于文件来说:
对于二进制文件需要具有文件的执行权限,执行时该文件会获得程序群组的支持
SGID对于目录而言:
文件目录需要有执行和写入的权限,用户可以进入该目录,用户在此目录下的有效群组将会变成该目录的群组; 若用户在此目录下具有 w 的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此目录的群组相同。
SBIT:当用户对于此目录具有 w, x 权限,亦即具有写入的权限时,当用户在该目录下建立文件或目录时,仅有自己与 root 才有权力删除该文件
SUID/SGID/SBIT 权限设定
4 为 SUID ,2 为 SGID ,1 为 SBIT
chmod 4755 filename
观察文件类型:file想要知道某个文件的基本数据
脚本文件名的搜寻:
which [-a] command
-a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称
文件档名的搜寻:
whereis [-bmsu] 文件或目录名
-l :可以列出 whereis 会去查询的几个主要目录而已
-b :只找 binary 格式的文件
-m :只找在说明文件 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件
locate:根据数据库去搜寻文件,但可能数据库未更新,可能会无法找到,根据updatadb更新数据库。
locate [-ir] keyword
-i :忽略大小写的差异;
-c :不输出档名,仅计算找到的文件数量
-l :仅输出几行的意思,例如输出五行则是 -l 5
-S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等
-r :后面可接正规表示法的显示方式
find:find -name/-size [+-]SIZE/-type TYPE(一般正规文件 (f), 装置文件 (b, c), 目录 (d), 连结档 (l), socket (s), 及 FIFO (p) 等属性)/-perm mode(文件权限刚好等于mode的)/-perm /mode
(包含任一权限)
在后面还可以带-exec +命令最后以\结尾
eg.:find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \; 在这两个目录下找到只要含有s或t就可以的文件然后ls -l显示出来,{;}代表的是结束,\是跳脱字符用于;
linux常见的压缩命令:
gzip [-cdtv#] filename
-c :将压缩的数据输出到屏幕上,可透过数据流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
-v :可以显示出原文件/压缩文件案的压缩比等信息;
-# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好。预设是 -6
zcat/zmore/zless 则可以对应于cat/more/less 的方式来读取纯文本档被压缩后的压缩文件
bzip2 [-cdkzv#] filename
-c :将压缩的过程产生的数据输出到屏幕上
-d :解压缩的参数
-k :保留源文件,而不会删除原始的文件
-z :压缩的参数 (默认值,可以不加)
-v :可以显示出原文件/压缩文件案的压缩比等信息;
-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快
xz [-dtlkc#] filename
-d :就是解压缩
-t :测试压缩文件的完整性,看有没有错误-l :列出压缩文件的相关信息
-k :保留原本的文件不删除~
-c :将数据由屏幕上输出
-# :较佳的压缩比的
tar打包命令:
虽然压缩命令也可以将压缩目录,但只是将目录下的文件分别进行压缩,tar可以将多个目录和文件打包成一个大文件,将这些文件进行压缩,同时透过压缩命令的支持,将文件进行压缩。
压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
查 询:tar -jtv -f filename.tar.bz2
解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
-z :透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
-j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
-J :透过 xz 的支持进行压缩/解压缩:此时档名最好为 *.tar.xz
-z,-j,-J不可以同时出现在同一tar命令中
-p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
-P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
--exclude=FILE:在压缩的过程中,不将 FILE 打包
备份dd:dd if="input_file" of="output_file" bs="block_size" count="number"
if :就是 input file也可以是装置;
of :就是 output file也可以是装置;
bs :规划的一个 block 的大小,若未指定则预设是 512 bytes(一个 sector 的大小)
count:多少个 bs 的意思。
备份文件:cpio
cpio命令没有指定需要备份的文件,只是指定了备份的地址,这就需要管道,将数据显示出来由cpio通过数据流重导向去备份。而且cpio备份时没法识别绝对路径和相对路径,所以需要切换到文件的当前路径然后使用命令将数据由管道再由cpio数据流重导向到备份的路径。
cpio -ovcB > [file|device] <==备份
cpio -ivcdu < [file|device] <==还原
cpio -ivct < [file|device] <==察看
makefile的基本语法及变量
目标(target): 目标文件 1 目标文件 2
gcc -o 欲建立的执行文件 目标文件 1 目标文件 2
变量的基本语法:
1. 变量与变量内容以『=』隔开,同时两边可以具有空格;
2. 变量左边不可以有 ,例如上面范例的第一行 LIBS 左边不可以是 ;
3. 变量与变量内容在『=』两边不能具有『:』;
4. 在习惯上,变数最好是以『大写字母』为主;
5. 运用变量时,以 ${变量} 或 $(变量) 使用;
6. 在该 shell 的环境变量是可以被套用的;
7. 在指令列模式也可以给予变量。
gcc编译的过程中,所指定的变量可以定义在makefile中,可以是同一shell中的环境变量,也可以是指令列中定义的变量,他们的优先级是:
- make 指令列后面加上的环境变量为优先;
2. makefile 里面指定的环境变量第二;
3. shell 原本具有的环境变量第三。
$@:代表目前的目标(target)
tarball:
软件安装的指令:
./configure:使用一支script检查linux环境,相关的软件属性
makeclean:去除目标文件
makefile:根据makefile文件进行文件编译
makeinstall:根据makefile中install把数据安装到指点目录
函式库管理:
静态库:后缀名为.o,在文件编辑过程中直接将库整合到代码中,占用的空间会比较大,当使用的库升级后,整个执行档必须要全部重新编译才能将新的库应用到程序中。优点是编译好的文件可以独立执行。
动态库:linux的大多数函式库是动态的,后缀名为.so,在文件中,他只有一个指向的位置,当执行时,会读取库去执行,并不包括库的内容,所以占用的空间会小一些,这种类型的库编译出来的程序不可以独立执行,但是当有编译时所需要的库升级时,不需要重新编译。
程序的动态库解析:ldd [-vdr] [filename]
将动态库加载到内存中:增加动态库的读取速度的操作
- 首先,必须要在 /etc/ld.so.conf里面写下想要读入高速缓存当中的动态函式库所在的目录
2. 接下来则是利用 ldconfig 这个执行档将 /etc/ld.so.conf 的资料读入快取当中;
3. 同时也将数据记录一份在 /etc/ld.so.cache 这个文件当中
服务器硬件数据的收集:
以系统内建 dmidecode 解析硬件配备
dmidecode -t type
type参数:
1 :详细的系统数据,含主板的型号与硬件的基础数据等
4 :CPU 的相关资料,包括倍频、外频、核心数、核心绪数等
9 :系统的相关插槽格式,包括 PCI, PCI-E 等等的插槽规格说明
17:每一个内存插槽的规格,若内有内存,则列出该内存的容量与型号
硬件资源的收集与分析:
linux主机的硬件设备:
lspci [-vvn]
-v :显示更多的 PCI 接口装置的详细信息;
-vv :比 -v 还要更详细的细部信息;
-n :直接观察 PCI 的 ID 而不是厂商名称
了解系统接了多少个usb设备:
lsusb:lsusb [-t]
-t :使用类似树状目录来显示各个 USB 端口口的相关性
检查由开机到现在,磁盘已经存储了多少数据量:
iostat [-c|-d] [-k|-m] [-t] [间隔秒数] [侦测次数]