再次安装fedora23的一些遗留问题的解决
**当你习惯了某个版本后, 就不想再更换了. **
安装fedora23的磁盘空间 获得?
- 在安装新的fedora23 的时候, 原来的磁盘没有清空, 于是 就 have not enough free apace availble to install fedora23. 没有足够的空间来安装, 于是, 也不必使用 disk genius来 格式化磁盘.
- 在automatically perform installation的选项中, 提供了一个 reclaim space的工具. 利用这个 "reclaim" 工具 可以释放原来占据的磁盘空间.
- reclaim: [ri'cleim], vt. 开垦, 开拓; (重新)取回, 获得; 教化, 感化; 沙漠化....
- 安装fedora的大小: 安装fedora23 的所需要的本身软件 所需要的 磁盘空间 是比较小的: iso镜像文件大概是 : 1.4GB , 而安装后的 文件空间大概是: 3.8GiB, swap 空间大概是 2.5GiB, 因此, 总共所需要的磁盘空间大约是 : 6.3GiB. 加上用户自己的资料空间, 老的磁盘 如 20GiB , 50GiB 等都是足够的了!
- 文件系统在分区上的 挂载的理解: 假设上面是磁盘分区: sda1 , sda2, sda3, sda4..., 下面是文件系统 /boot, /home, (/, /root, /etc, /tmp-/dev-/sys-/proc-/run),, /usr,/media, /mnt等,将文件系统挂到分区上, 就是mount.
更加深刻理解/明确 /usr 和 /usr/local目录?
在传统的unix系统中,/usr通常只包含系统发行时自带的程序(/usr/bin, /usr/sbin, /usr/lib, /usr/libexec等),而/usr/local则是本地系统管理员用来自由添加程序的目录。这里有一条严厉而牢固的规则:除非在里面创建目录,unix发行版不得使用/usr/local 。
**/usr目录只能由发行版的软件包管理工具 (rpm, yum, dnf等) 负责管理, 正是因为采用这种方式,软件包管理工具(rpm, yum, dnf等) 的数据库才能知道在/usr目录内的每一个文件。 **
'```
应该把程序安装在 /usr还是 /usr/local?
对于一个以LFS为基础的系统来说,这是一个没有明确答案的问题。 LFS(linux from scratch) LSB(linux from beginning). scratch: 刮, 刮痕; 划, 划伤.
在传统的unix系统中,/usr通常只包含系统发行时自带的程序(/usr/bin, /usr/sbin, /usr/lib, /usr/libexec等),而/usr/local则是本地系统管理员用来自由添加程序的目录。这里有一条严厉而牢固的规则:除非在里面创建目录,unix发行版不得使用/usr/local 。
对于Linux发行版,如 RedHat, Debian 等等,一个可能的规定是:/usr目录只能由发行版的软件包管理工具负责管理,而对/usr/local却没有这样做。正是因为采用这种方式,软件包管理工具的数据库才能知道在/usr目录内的每一个文件。
LFS的用户是自己建立系统的,所以能自己决定系统文件和用户文件的放置方式。因此,应该按照有利于系统管理员使用的方式作出选择。这里有几个把文件安装到/usr或者是/usr/local的理由:
前面已经说过了: 根目录下的bin/sbin/lib都是 /usr/下面对应目录的软链接. /usr是系统管理工具, 如yum, dnf , rpm等安装软件的场所, 所以, /usr下面的文件就是由dnf来自动管理的...
ac: prints out a report of connect time (in hours) based on wtmp files.
ac [options]: -d: 按每一天进行打印; -p: (people)按用户进行打印.
aconnect: 显示连接端口 connection/disconnection between two ports.
acconnect -i, (input) -o (input) -l (all)
genius: ['d3ini2s], 发音就是 "吉尼斯"世界纪录. bad genius, we are born losers, so we must do our best to get we want.
其实linux 的目录结构就很简单, 比win更简单:
- 关于引导的, 就一个目录: /boot
- 关于系统配置的一个目录/etc
- 关于系统运行状况的目录: /dev ,/run, /proc, /sys, /tmp
- 关于用户资料的: /root, /home
- 关于媒体的目录: /media, /mnt
- 其他就是 linux的核心 /usr: 包括里面的bin, sbin, lib, include, libexec, local, share, tmp...
- 关于可变化的内容有两个目录: 一个是存放软件运行过程中的变化内容的/var, 另一个是存放临时可变化的 "软件文件"的/opt
特别注意的是: /bin, sbin, lib, 都是 目录软链接, 都是 链接到 /usr下对应的目录的.
默认安装的fedora23里面的工具有:
看图使用的是: image viewer
截屏用的是: screenshot
系统检测(类似于 win下的 task manager): system monitor
压缩工具使用的是 : Archive manager /compress...
特殊字符查找使用的是: characters
系统调节工具是: dconf editor, 和 tweak tool
照相用的是: Cheese (奶酪; 微笑)..
其他就是 常规的耳熟能详的应用软件了
注意几个相近单词的区别 下面的ee 都发 [i], [i:]
cheese: 奶酪; <口语> 微笑, 引申为 "照相" 软件.
chess: 象棋
cheek: 脸颊
cheer: 欢呼
cheers: 欢呼; 干杯(一定要用复数) = toast (烘烤, 烤面包. 也表示干杯的意思: have a toast to the newlyweds)
安装fedora的写入工具是 Rawriter, 其实就是 NetBSD
其实在fedora的官方站点: http://archives.fedoraproject.org/pub/archive/fedora/linux/releases/
上, 你仍然可以使用很多老旧的版本,包括ver 8, 9, 10...
最新的版本可以在 mirrors.163.com中找到, mirrors.163.com中基本上包括了 所有的/各种linux的 发行版的镜像
但是在mirrors.163.com中, 只能获得最新的linux/fedora发行版25, 甚至连23和24的版本都没有, 但是其他旧的发行版 还是可以/只能 在fedora的原始的官方的站点即archives.fedoraproject.org/
上找到.
所以, 如果你要使用 163的镜像, 进行yum/dnf的软件管理, 现在这个时间结点,你就只能使用 fedora 的v25版本了. 因为更低的版本的仓库源已经不可用了. 但是, 并不是说,你不能使用23的版本了, 只要你修改一下 /etc/yum.repos.d的仓库源地址为 fedora的官方地址就好了.
archives: [ 'a:kaiv] n./ v. 档案, 把...归档, 把...(不常用的信息,资料等) 进行存档了.
achieve[2' tfi:v] 获得...
一种领会和醒悟: 做网站, 站点的真正目的, 其实是为了"展示", 这是它最主要的功能! 因此, 在设计网站布局和外观的时候, 其实完全可以参考/参照 "ppt" "平面设计"海报设计"等的思想和方法进行操作, 你就当他是一个"ppt"吧!
linux的命令: tr:
tr是translate 翻译的意思, 是指将一个字符串 -> 翻译成 -> 另一个字符串, 也就是 替换和删除的 功能, 是 sed的简化版本, 参考: https://www.2cto.com/os/201201/117822.html
其实, dnf是一个可执行的 脚本 (文本) 文件 , 你可以用 cat/vim /usr/bin/dnf来查看它的内容.
是通过 #!/usr/libexec/system-python
来执行的: #!/usr... 是紧挨着的, 执行脚本的命令不再是 /bin/bash, 二是libexec下的执行命令. 也就是说, /.../libexec是用来执行 系统的 一些 "系统脚本命令" 的解释器文件..
在整个安装和配置fedora23的过程中, 配置 “tap to click“ 是非常重要的一步: tap就是在touchpad 触摸板上的轻击 轻点, "click” 就是代表 键盘/鼠标的单击事件和动作, 可以选择/选中, 和 启动应用程序. 但是触摸版上的 单击/轻点默认情况下,是不能选择和启动程序的: 所以 让tap 代替click , 就能让touchpad具有了鼠标和 键盘的功能了!
-
按钮的图标和文字应该 "表示单击按钮 的目的, 结果", 通常是与 "现在的状态 "相反的, 比如设置time&date时, 默认是锁定的,所以 才有 unlock的按钮 最好设置为: automatic date&time 自动的日期和时间. 在 all settings的 date& time中设置机器的 时区 和 日期和时间!
-
**要设置fedora的默认程序, 在 设置中的 "detail"中进行设置. ** 以及机器和内存的详情都在detail中.
-
universal access: 德意志留声机公司+philips合并为Poly-GramInternational: 宝丽金国际公司...
通用访问/普遍接入
或者叫做: 所有人都可以访问的, 全部人都可以使用的: 即: provide computing ability for those people with visual impairment(障碍/损伤/缺陷), hearing impairment or physical disability. -
在工作区的设置中, super=win键. super+pagedn/pageup/home/down : 即单纯的super是 switch切换, 工作区; 而 super shift 四个键表示的是 移动: move.
su -c 后面的命令 应该是单个命令, 如果是多个单词的话,或是命令之间包含 空格的话, 应该将命令用括号括起来!
如: su -c 'mkdir fedora-official.bak'
如果不加引号的话, 会把最后的.bak单词当作 用户名来看待 处理.
ls 的用法, 不只是查看下一级的目录, 如果你知道多级目录的结构,你还可以 一次性的 查看多级目录下的内容.
-
安装fedora23后, 提供的几个yum仓库:
一是, fedora.repo 提供的fedora 23 -i386
一是, fedoraproject.repo提供的fedora-official repository
一是, fedora-updtates.repo 提供的 fedora 23 - i386 - updates -
当dnf做了makecache后, 你可以 "离线" 查找到某个安装包. 但是你不能离线下载 所需要的 "依赖"包. 要联网才能下载所需要的依赖包
通常这些包都是些 rpm的二进制编译包, 如同win中的exe一样, 而且大小都比较小, 一般只有几十到几百kiB -
sundry和miscel' laneous的区别?
都是杂项的意思: miscel'laneous -
在fedora23 中, 本身live发行版中是没有按照gcc的, 所以要自己按照gcc
gcc就是cpp, 这两个命令完全是一样的. 使用gcc--help和 cpp --help的输出完全一样.
gcc是一个工具,一个程序, 如同其他工具/软件/程序一样. 它也是包含多个 libgcc, glibc-headers等开发包和依赖包的
gcc和gcc-c++ 都只是 rpm的二进制 package, gcc是编译c代码的, 而没有包括c++编译的支持,
要让gcc能够编译c++, 需要给gcc增加 c++编译支持, 而gcc-c++ 是二进制rpm包, 是提供对gcc的c++支持.
当安装好了 gcc-c++后, 就可以直接使用 c++ 命令了, 但是没有 gcc-c++命令的! 只有 c++命令
- 在设置gnome-screenshot的快捷方式时, 只需要设置:
/usr/bin/gnome-screenshot -a
, 使用-a默认就是截取area区域的, 不要使用-i就不会弹出确认和设置界面了. 直接保存就是.
linux下的下载工具:
- 系统安装时 live发行版自带的下载工具有: wget, curl(这个也是dnf 默认的下载工具), 然后可以安装: aria2(对应的命令行是 aria2c), 和 uget.
- linux下的 bt下载, 客户端工具是 Transmission. 下载安装tranmission包的时候, 会自动安装依赖包: transmission-cli, transmission-qt, transmission-gtk, transmission-common.
提供的命令有: transmission-cli(-edit) url | torrent-file ..
resumable: 是resume的形容词, resume: 继续, 重新开始, 因此, resumable 是: 可以重新开始的...
fedora23 live发行版在最初的时候, 自己就自带了 apache/httpd的 软件包了
systemd下存放的是一些: 管理系统的命令 文件等, 然后, 所有关于系统 服务services 的东西(文件, 服务 , 命令等) 都是统一放在 system目录中的. 所以, apache httpd服务service 的启动软件是, /usr/lib/systemd/system/ httpd.service ...
本来dnf的usage方法是: dnf [options] COMMAND 即, 选项是放在命令之前的, 但是实际在 应用中, 也经常看到 选项 比如: -y 等放在 命令之后的, 比如: dnf install foo_package -y的, 前后都可以吧.
实际上, httpd的结构还是比较简单的:
- 关于配置方面的有三个目录: conf/ conf.d/ conf.modules.d/ , conf/下面放的是核心配置文件 httpd.conf, conf.d下面放的基本上是扩展的/附加 的配置文件, 如: autoindex.conf, userdir.conf, welcome.conf等, 而 conf.modules.d 顾名思义, 就是放的一些关于apache模块的配置文件, 通常以00-开头 占位符, 如: 00-mpm.conf, 00-dav.conf, 00-proxy.conf
- 其他就是httpd的一些相关的 "实体"文件放置目录了: 如: log文件是: 链接到/var/log/httpd, modules-> /usr/lib/httpd/modules,
- 最后, 就是httpd 的DocumentRoot 文档目录, 在: /var/www/html/ 目录中.
安装vim时发生的冲突和错误提示:
说明:
- the downloaded packages were saved in cache till the next successful transaction (until 是till的强调形式, 都可以用于否定形式, 但是till还可以用于肯定形式, 基本上两者是相同的)
- you can remove cached packages by executing 'dnf clean packages'
- Error: file /usr/share/man/man1/vim.1.gz 发生冲突:
即: man/目录下的如果是man1, 则所有的帮助文档都是: help_name.1.gz, 如果是man8, 则是: help_name.8.gz
意思是说, 要安装的 vim-common-2 包 所提供的 vim.1.gz 文档 跟 原来的 vim-minimal-2包的vim.1.gz文件 相confilct with 冲突了.
所以 将原来的 vim.1.gz 更名为 : vim-minimal.1.gz
**为什么要使用 普通用户? 因为主要还是 安全! 为了系统安全, 因为当你在操作一些 比较重要/ 危险的动作时, 系统会提示你 Permission denied. 你就知道要使用 su root 权限了, 这个其实是对你的一种 "安全警告 和 提醒" 你就会 小心操作了.
而 visudo 主要还是对 多用户 进行权限的分配, 那多个用户共同使用/管理机器时, 你给相应的用户设置相应的权限就可以了.
区别是:
su -c 确实是进行了用户的切换, 而sudo 并没有切换用户, 事实上那你也无法切换到root, 因为sudo是不知道 root的密码的.
su 要求输入root的密码, 而sudo要求输入 被授权用户的密码, 为什么sudo也要输入 sudo用户的密码呢? 是因为: 为了保证 使用sudo命令的用户-( 当前用户) 就是 被授权的 用户的本人在操作. 比如root给foo授权了某种sudo权限, foo在使用sudo命令的时候, 要输入foo的密码, 就是为了保证 当前正在操作的人 就是foo本人, 而不是其他 不知道foo密码的黑客或破坏者等. **
而实际上 , 对于单用户系统, 不必使用sudo, 使用su就可以了, 使用 su -c '这里输入执行的命令'
方式, 把要执行的命令放在 单引号中, 也是很方便的! 也不必每次真的 切换su root, 并不必进行来回切换用户的.
lecture: 是演讲, 训斥(这里应该是"强调, 提醒, 告示等的意思), we trust you have received the usual lecture from the local system administrator. (也就是说, 受限用户的权限就是由系统管理员 分配的)
- markdown中的星号 强调 支持换行!
我们不可以使用su让他们直接变成root,因为这些用户都必须知道root的密码,这种方法很不安全,而且也不符合我们的分工需求。一般的做法是利用权限的设置,依工作性质分类,让特殊身份的用户成为同一个工作组,并设置工作组权限 --- 即 按工作组来进行 分配权限...
澄清一个疑问: 当使用su -c 'command' 的时候, 命令里面的 ~ , 表示的是root 的家目录还是 当前普通用户的 家目录呢? 因为你是用su -c 了, 所以首先 就进行了角色的转换了, 然后 才 再 执行 command 的, 所以 这里的 ~ 表示的是 root 的家目录 !
澄清一个长久的问题: dnf默认的下载工具是curl 不是wget, 因为当dnf install安装出错时, 会报错: Warnig: NOKEY, Curl Error: can't read a file:///etc/pki/..., 注意: dnf下载的安装包, 时放在 缓存目录下的: /var/cache/dnf/仓库名称-globalid/packages/具体的包名称... ; 每个安装包的gpg检查文件是在: /etc/pki/rpm-gpg/ 下面
http://images2017.cnblogs.com/blog/821299/201710/821299-20171021224750631-760731351.png
sundry杂项
- linux中点号是可以作为文件/目录名称的.
- fedora23 中系统开机启动的服务, 不再是放在 /etc/rc.d/init.d中的了, 而是放在 /etc/systemd/system/multi-user.target.wants/中的. 即: 都是在/etc下, 比真实的服务文件/usr/lib/systemd/sytem/....service 多了一个 子目录: multi-user.target.wants
安装mysql数据库的时候, mariadb-server是服务器端程序, 而mariadb是客户端程序. 安装了客户端后, 就可以使用 mysql 这个命令. 对于mysql数据库: 不要搞反了: 程序名和 "命令名" 两者不是一样的. 可以同时安装这两个程序: dnf install mariadb mariadb-server
-
在/var/ 的子目录中, 是先 类别 子目录, 如log, share, icon等, 然后才是 相应的 软件目录, 如: /var/log/mariradb, /var/log/httpd, /usr/share/...
-
实际上, dnf安装软件的时候, 是把 常用的 可以分类的 文件 , 放在 /usr/bin, /usr/lib, /etc/foo中, 其他如: 日志文件放在 /var/log/中, 其他的 "资源resources"文件, 等放在 /usr/share/software_name/ 中, 也就说, 准确的说, 这里的/usr/share, 才相当于 win下的 program files 目录
-
在 markdown中 ```### 等, 是在一行的 顶格写的, 不能在### 的前面再写 什么的了, 但是** 是可以的`
-
alias这个命令, alias [-p] [name[=value] ...]
Alias with no arguments or with the -p option prints the list of aliasesi in the form alias name=value on standard output., 注意格式中 的 name=value中, 不要写漏了等号, 而且, 像 vi 定义为vim的alias 可能不是在普通的bashrc中定义的. 可能是在vim的其他配置文件中定义这个 alias别名的.
所以, vi是vim的别名 , 就直接用vi来启动vim了.
如同其他所有的普通软件/程序一样, httpd, php, mariadb(甚至所有的软件,如git,看起来很"特殊"的软件, 实际上都是一样的)的安装 布局都是一样的: 命令文件在/usr/bin, 配置文件在 /etc/... 库文件在 /usr/lib, 其他附件在 /var/log, /var/www, /run/httpd等中, 那么资源文件都在 /usr/share/software_name/对应的目录中...
fedora23中 播放器的安装?
-
官方的movie 播放器叫 Totem. Videos, also known as Totem, is the official movie player of the GNOME desktop environment.
-
fc23 系统 默认安装的/ 自带的 音频/视频/多媒体框架, 是gstreamer1.0, 他的库文件是放在: /usr/lib/gstreamer-1.0/中的, 同时fc23 还默认安装了 一些gst1.0的几个常用的插件,包括:
gstreamer1-plugins-bad; gstreamer1-plugins-ugly, gstreamer1-plugins-base; gstreamer1-plugins-good等.
fc23 默认安装的 gstreamer的版本是 1.6.0:
下图表示的是, 默认安装的是gstreamer1.0 ,和 gstreamer的so文件是: libgsteamer-1.0.so
下图表示的是, 安装的 gstreamer1及其插件包:
实际上, 要分软件, 有的软件, 如mpg123, 会自动 的读取 和 使用 系统自带的 gstreamer1 框架及其 插件, 所以, 就能狗安装 后 直接使用了. 但是 可能有的软件, 如 Rhythmbox 需要使用 0.10的gsteamer及其 0.10的 gstreamer插件
-
/usr/lib/gstreamer-1.0/目录下的so, 就包含 gstreamer 的核心库, 一些核心的so, 主要是用来实现 "插件"机制, 提供 插件 接口, 多媒体处理的基础函数库等.
但是 要注意 gstreamer-1.0下的so并不是 全部都是 框架so, 有的还是 他的插件包 释放的 so. 比如 : gstreamer1-plugins-bad等包, 就会释放 libgstmidi.so等动态共享库对象. 格式是: lib-gst-...so -
但是gstreamer1 跟Rhythbox和 Totem播放mp3 其实是没有关系的, 或者说, gstreamer-1.0目录中的东西 跟mp3是无关的. 估计 Rhymbox 使用的是/需要的是 gstreamer-0.10 的框架和0.10的相应的插件...而gstreamer的1.0.x版本, 和0.10.x版本 不再兼容. 所以 , 还需要单独的安装 gstreamer-0.10.x及其相关插件. Rhymbox所需要的 编码解码器插件, 还可以放在 ~/.Rhythmbox/plugins/目录下...
1. 事实上, GStreamer是一个 基于流水线(stream)的多媒体框架(multimedia framework). 如同 .netframework一样... Fluendo是 gstreamer的主要开发者.
1. "Fluendo Codec Pack" 是来自于 GStreamer 主要开发者之一 Fluendo 发布的多媒体解码包集合,可以提供在 ***GStreamer 框架下***合法的版权媒体格式播放
以及 各类显卡的硬件加速 支持。
Fluendo codec pack (由Fluendo开发) 的 H264 软解码器效率非常出色, 但也存在 软解码时 CPU 占有率过高的通病。
Fluendo Codec Pack 适用于:
懒得折腾,希望获得 开箱即用 的 GPU 硬件加速支持的 Linux 用户。
想在不具备硬件加速条件的设备上观看 1080P 高清视频的 Linux 用户。
- Rhymbox播放mp3需要 : gst-fluendo-mp3插件, 这个插件是由fluendo提供 /开发 的, 基于gstreamer框架的, 下载地址是: http://core.fluendo.com/gstreamer/src/... 这个src中 包括了多个 gst-fluendo-.../的插件, 其中就由 gst-fluendo-mp3/ 里面的 是 : gst-fluendo-mp3-0.10.32.tar.gz.
- 在linux中, 版本号 比如 0.10.32, 是作为一个单词存在 于 文件名/包名中的, 可以由多个点号组成.
- 编译安装 gst-fluendo-mp3.tar.gz 时出错:
说是, 没有 一个 可用的 gstreamer 版本可用, 主要包括两个版本的: gstreamer-1.0 和 gstreamer-0.10
因为 gst-flendo-mp3是基于gstreamer框架的, 如果没有这个框架, fluendo-mp3 要 调用这个框架中的一些函数/库等就没有办法. 所以, 首先就是要在系统中安装gstreamer包, 这个基础框架, 然后所有基于 这个框架 的插件才能 起作用.
-
GStreamer核心库函数是一个处理插件、数据流和媒体操作的框架。 GStreamer核心库还提供了一个API, 这个API是开放给程序员使用的---当程序员需要使用其他的插件来编写他所需要的应用程序的时候可以使用它。
gstreamer的1.0.x版本, 和0.10.x版本 不再兼容. 使用 凡是1.0.x的版本的框架和他的插件, gstreamer后面都有一个1, 即 gstreamer1...; 凡是0.10的gstreamer 后面都没有1, 所以 在使用dnf 搜索的时候, 可以使用 dnf search gstreamer1- / gstreamer-/... 这样就能区分 0.10和1.0的版本的插件了. -
现在大部分播放器都是 基于gstreamer的, 都 会忽略文件的后缀名,而使用 自动检测出的文件格式 选择合适的解码器。
- /usr/share/下的 doc表示的是文档, 分软件目录如gstreamer1...等进行分别显示; 然后 许可文件都是放在 /usr/share/licenses/...如/usr/share/licenses/gstreamer1...中.
安装gstreamer及其相关插件(如果只是 gstreamer, 则表示 是 0.10的版本)
-
dnf查询gstreamer:
gstreamer的版本是0.10-fc23, 依赖包是gstreamer-tools, 都是由fedora仓库本身提供的.
-
安装好 gstreamer(0.10)后, 只在/usr/lib/中创建了gstreamer-0.10目录及其下面的 两个so: libgstcoreelements.so, libgstcoreindexers.so( 核心元素.so 核心索引器.so).并没有bad.ugly等插件.
-
搜索 gstreamer-plugins- 出现的插件包: 主要安装: bad, ugly, good, base, libav等插件包
看来, 即使安装了 上述的gstreamer-plugins-bad/ugly/good/base/libav等, 并且 都ldconfig 反复试了, 都不能运行 Rhythmbox, 是不是 必须要安装 专用 的 fluendo 小组,开放的: gst-fluendo-mp3.tar.gz这个源码包呢?
看来, 问题的关键, 还是这个 gst-libav: gstreamer1-libav, 因为即使 在 gstreamer-0.10/1.0中,是gst本身的 lib库, 或gst的插件, 但是 没有 audio/video的 库, 所以 一定要 安装这个 gstreamer1-libav ! 只要安装上这个 包后, 就可以 运行
ldconfig和ldd?
ldconfig: 是从默认的动态库目录/usr/lib(/lib), 和配置文件目录: /etc/ld.so.conf( Include /etc/ld.so.conf.d/*.conf) 中, 搜索可用的so, 然后 更新 动态库缓存文件: ld.so.cache
-
ld 是 loaded 已经载入的 意思??? ldconfig, 实际上是ld.so的管理工具, 是对 ld.so.cache 高速缓存的 一个 更新器.
-
程序默认的 首先从 ld.so.cache中去查找, 然后再到 ld.so.conf中去查找. 所以如果 用 ldconfig 更新 一下 cache 会有效得多.
-
ldconfig本身是: /usr/sbin下的 系统管理工具命令, 可以用 --help, -v / -p等查看 已经 "载入"的 有哪些库?
-
ldd是查看 运行某个程序, 所需要哪些库?
ldconfig几个需要注意的地方
1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到
2. 想往上面两个目录以外加东西的时候,一定要修改/etc/ld.so.conf,然后再调用ldconfig,不然也会找不到
比如安装了一个mysql到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql/lib下面,这时 就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存过后ldconfig一下,新的library才能在 程序运行时被找到。
3. 如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变 量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时 候使用。
4. ldconfig做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L就得加,不要混淆了。
5. 总之,就是不管做了什么关于library的变动后,最好都ldconfig一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。
ldconfig -p -v等 可 查看
终于解决了 源码安装 gst-fluendo-mp3无法 ./configure 的问题了!
-
在多个版本中, 0.10.20, 0.10.32中, 使用./configure --prefix=... 的时候, 都提示:
要么没有 gstreaer-0.10 包, 没有 >=0.10, 或者提示错误: no valid gstreamer version...
-
不能 配置编译的根源是: 找不到 gstreamer框架, 本身的include和library. 因为是源码安装, 不是rpm包, 所以 , 源码包中的 很多c文件, 比如要 用到 include中的 数据类型声明, 和库lib中的函数链接, 所以 必须要安装 gstreamer-devel开发包 , 因为开发包中才有 include/lib, 这个也是 所有 源码安装的一个特点: 软件/程序, 除了本身的包/rpm包/安装包外, 还有对应的 -devel包, 这个devel中, 才包含了 Include 和lib, 这些Include/lib正是 源码 所需要的, 必须安装!!!
配置成功, 生成 : Makefile文件:
-
但是在make编译 生成目标文件的时候, ( make install 主要的工作时拷贝...), 发生错误: /usr/bin/ld 链接 多个lo目标符号文件的时候, 出错, 说, 找不到 -lgstaudio-0.10: 意思是: -l表示 -lib库, 即找不到 libgstaudio-0.10 的库文件.
-
解决方案: 然后在 google中 , 查找并下载 这个 libgstaudio-0.10 , 找到一个地方,说 libgstaudio 这个so在包: gstreamer-plugins-base-0.10.36-fc23.rpm包中,
但是, rpm查询, 发现 这个插件包base其实已经安装了的, 突然想到, dnf search的时候, 发现有这个gstreamer-plugins-base-devel-0.10.36.. 的开发包! 所以 就安装上这个 devel看看, 然后ldconfig, 再来make 结果通过了!!
-
事实上 ,在make的时候, 就是用 gcc 将 src/目录下的 那些 .lo, .la目标对象链接起来, 同时, 也可以看到 src真的 存在这些对应的 la和.o文件:
-
在整个configure, make和make install的三部曲中, 前两部都是在 src中进行的, 都没有 去创建你配置的 prefix目录的, 只有在 安装的时候, make install的时候, 才真的去创建 prefix所指定的目录. 并将生成的目标文件, 如: libgstflump3dec.so 拷贝到指定的 目录: /usr/local/gst/lib/中. **而且文件 创建 / 拷贝完成后, 还 自动执行了 一次 ldconfig -n (但是没有更新ld.so.cache 库,处理了指定的目录) **
-
配置和编译的时候, 都是 "借用", 临时占用 "src"目录, 或旗下的 .lib目录来使用的
总之, 要使 Rhythmbox播放mp3 , 有两种方法, 一是, 安装 gstreamer /gstreamer1 包及其 附加插件bad,good, base, ugly, 及其处理audio等的 库: gstreamer-libav. 第二种方法是, 手动源码安装 fluendo提供的 : gst-fulendo-mp3-0.10.32.tar.gz, 首先还是要安装 gstreamer包 和 gstreamer-devel (开发包必须安装), 然后编译安装 libgstflump3dec.so 到 ~/.gstreamer-0.10/plugins/lib..flump3dec.so..
Sundry 编译过程?
-
libtool, 创建.a, .so的工具: (.a, .so都是.o的集合, 只是linked)
libtool 是帮助 gcc, 用来 创建 lib库, so/a的辅助工具: lib-tool. 因为gcc在编译生成 动态库so, 静态库.a等的过程, 需要程序员自己去处理一个非常麻烦的问题"解决库和库之间的依赖问题", 而libtool是 gcc(和其他编译器) 的抽象/包装, 将 库的依赖关系解决任务包揽了下来, 通过: lo和la文件来 解决 库依赖问题: lo文件: 由libtool生成的 .o文件(包含额外的libtool信息), .la是由libtool生成的 a文件,其实是记录的 跟.a中包含的对象文件 同名的 .o之间的 依赖关系 的一个 文本文件. -
不是直接用gcc, 而是用 libtool来编译, 让libtool去调用 gcc?? 但是并没有libtool这个命令, 在编译阶段才自动使用???
-
/usr/bin/install: copies files(often just compiled) into destination locations you choose.( place: 更具体的"地方", 抽象的"地方"是: location .
-
这个可能是 最好懂的 find 命令解释了: 参考: http://linux.chinaunix.net/techdoc/system/2008/03/17/983867.shtml
find的格式是: find [options] [path] [expressions]
如果什么都不带的话, 就会列出 当前目录 下的 所有文件 类似于ll+ rpm -ql格式的;
通常不会用到 options, 注意区别这个options跟后面的 expression中的option的不同. 所以 你可以认为fing 的格式是: find [path] [expression]
最主要的是 expression 表达式 , may consist of : operators(条件运算符), options, tests, actions. ( 表达式 总是以 单横线来表示, 不管是多少字符,如: -name, -type, -xtype -ok -delete -exec等等)
-
operators: 条件运算符: (decreasing precedence: 优先级递减: precedure: (商业/法律)程序; 步骤; 手术) : (EXPR) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2
EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1, EXPR2 (表示or有三种写法)
(operator操作符号的predicates包括: -name, -lname, -user, -group, -uid, -gid, -type, -xtype, 特别注意的是 这个 -empty: 空的, 这个表示查找 空的 文件或目录!) -
options, 选项,包括: -depth -maxdepth -mindepth指搜索的目录深度
-
tests 主要是指时间测试: 单位有 min 分钟, time 天数; 动作有: a表示access访问; c表示change文件状态改变; m表示modify文件内容发生改变: 即 amin N, atime N, cmin N, ctime N, mmin N, mtime N 都是表示N 分钟/N天 (不一定是之前, 要根据 +N, -N来判断, -N 表示 在 N分钟 N天之内的....) 发生" acess, change, modify" 的文件. N: +N 表示大于N; -N 表示 小于N
-
actions , 指 搜索后的动作 ; 包括两种: 一种是直接指明的动作, 如: -delete, -t, -printf, prin-fprintf, -ls -fls .... 另一种是使用 -exec 和 -ok,
注意 , 直接指明的动作, 只能是 指定的那些 predicates. (谓语, 述词), 比如: -ls 就只能是-ls 不能是 -ll 否则就会提示 是invalid pridicates. **但是command中, 可以带 选项的, 比如: 可以使用 find . -name 'foo*' -exec ls -l {} ; **
而: 使用 -exec(和ok)的时候, 后面 跟command和分号, 一定要跟分号, 因为 分号才 表示 command 是 -exec的参数 , 否则会提示 -exec 没有参数! 这个是语法要求. 可以将搜索结果作为 command 的 操作对象 , 这时用 {} 来表示/代替这个参数. 当然,你完全可以不使用这个搜索结果当参数, 那就不要这个{} 就行了. 注意是 {} , 中间不要留空格, 是一个单词!!
-
总之, find的语法使用 在 帮助中已经说得很详细很明显的了:
-
关于 -exec 后面的问题说明:
- exec后面的命令只能是 /usr/bin或/usr/sbin中的命令, 不能是 .bashrc中的 alias 别名, 会提示找不到. 需要澄清的是: export: 只能 向子shell中 输出 "变量", 而不能输出 : alias别名!!
- exec 老是提示 "missing argument to -exec", 是因为 没有最后的单词; 分号, 因为 分号是bash中的特殊字符, 需要转义即 ;
- {} 不需要转义, 中间不要留空, 代替前面的搜索结果. 而且 {} 和 后面的 ; 一定要 分开 , 否则
{}\;
会被当作一个整体, 一个单词, 这样, 即不表示{} 又没有分号, 更会出错. - 重要的是, 如果 command 加上 {}, 就表示 对 搜索结果进行操作, 否则, 就表示对 当前目录/ 路径 进行操作 ...
- 如何处理find中的 operators中的 小括号问题?
参考:https://segmentfault.com/a/1190000003847939 转义符号: 去掉 符号的特殊含义, 让shell把他们当作一般字符看待,不当作 特殊符号处理.
在bash中, 有三种方法进行转义: , 单引号和 双引号: 区别是: \ 可以让所有的符号转义,包括换行符; 单引号'', 可以阻止换行符立即执行,但是不能阻止换行; 单引号可以转义 反引号, 但是双引号不能阻止/转义 反引号.
bash中的通配符 主要有: 只有: *, ? , [a-z] 三种??
最重要的是, 这些特殊字符, 每一个字符 都要 和其他 字符 单独 分开, 不能 连起来写, 比如: find ./ '(' -name a.out -o -user foo \) -exec rm {} \;
这里面的 小括号就要 单独分开写. 同时 如果 把 某部分内容 , 全部 都 放在 一对 '', 或 一对 ""中, 则其中 的所有内容 都会被当作一个 没有任何意义的字符串来看待. 比如这里 将 "(-name a.out -o -user foo)", 则其中的 -name , -o等 都将失去operator的含义, 都只是一个字符串. 作为一个文件或目录来看待, 自然就会报错: no such file or directory
特殊符号主要有, 但不是所有的!!
* 任意个任意字符
? 一个任意字符
( ) 小括号, 表示 if中 的条件.
[..] []中的任意一个字符,这里也类似于正则表达式,中括号内可以是具体的一些字符,如[abcd]也可以是用-指定的一个范围,如[a-d]
# 注释
(空格) 参数分隔符 "空格 也是 特殊字符"!!!!
cmd 命令替换
| 管道
& 后台执行
; 命令分隔符(可以在同一行执行两个命令,用;分割) /// 所以, 在 -exec command {} \; 后面的分号一定要转义, 否则就不认为是分号本身!
~ 用户home目录
还要 很多, 比如: >, < 等等.
###################### 但是好像不包括 : {}.
最后记得,任何时候,你不确定自己是不是转义对了,或者是特殊字符用对了,记得可以在命令前面加上echo,来看看真实执行的命令是怎么样的.
使用 find + grep 进行全局搜索!
grep: 的参数: -H --with-filename(给出文件名), -a(给出文本), -n(--line-number) 给出行号: 即grep 的常用参数是: -Han 或 -Hna
find是linux下的文件查找工具, 比win下要好的多, 功能更强大的多: find, 可以直接指定查找路径 path, 方便的指定查找operator(条件表达式), 还可以直接对搜索结果进行操作: -actions:
使用 find+grep就可以对整个 系统/整个机器, 进行 全局查找了:
::: 是利用 grep本身就能 自带多个 参数 的特点 而使用的:
find ./ -name '*.php' -exec grep 'is_array' {} \;
这里 grep 'is_array'是搜索字符串, 而{} 正好作grep的输入参数.
find / -name "*.*" -o -name '.php' | xargs grep "wl0505" >>/home/filename
grep -rn wl0505 /etc/*
grep 的-i是ignore-case, -r : recursive
在使用 ctrl shift r时, 调出来的命令, 就时当前的一个 正式命令了, 你按 上下up/down, 就表示这条命令的上一条/下一条命令, 左右箭头left/right 就表示 移动光标!!!
- 只要系统中 能狗让Rhythmbox播放mp3了, 就能狗在ff中 在线 播放 单词的在线 发音, 在线读音.
要分页显示 长文件的内容, 直接就用命令 : more 或 less, 而不必 先 cat, 然后再 more, 或less
-
install和cp的区别: 第一, 在操作正在打开的/使用的 同名 文件时, cp是覆盖清空文件, 而install是 先删除旧文件, 然后再创建/打开新文件(产生新的文件句柄) , 避免文件操作出错;
第二, install会 自动将 拷贝生成的文件 的权限设置为 755, rwxr_xr_x. 而cp不会, 第三, install还会 自动设置新文件的 时间戳为当前时间: 即隐含执行 一次 touch xxx 命令.
所以, 虽然, install和cp都有拷贝的作用, 但是通常 install 是在Makefile中使用, 而cp是在普通环境下使用.
执行一次touch, 会将 文件的时间戳 设置为当前时间 -
/etc下的 cron: 有一个crontab文件, 里面是列表: 格式是 * * * * * user-name command : (5个*) 分别表示 * * * * * : min, hour, day, month, week (每月/每天/每时每份), 最后一个时间是按 一周之中的星期来看的.
然后有 : cron.d , cron.hourly, cron.daily, cron.weekly
locate是根据 /var/lib/mlocate/mlocate.db 这个数据库来 定位 /搜索 文件的. mlocate.db是由 crontab, cron.daily等文件作 "增量更新"的. 也可以用 : updatedb命令来 手动 更新!
所以locate 是通过 索引数据库 来搜索的, 所以 搜索比find 更快, 但是 没有 find 命令更灵活.
但是要注意, 这个 mlocate.db数据库并不是随时更新的, 说不定你在当前目录下, 刚刚创建一个 新文件, 使用 locate命令就搜索不到, 这是因为 mlocate.db数据库还没有更新, 收录你刚创建的文件, 可以使用updatedb命令 来强行 手动 更新mlocate.db
find 的operators中的 "条件运算符" 比如 -name, -lname,等, 后面的 内容, 为什么一定要用 引号 阔起来?
比如: find . -name foo* --exec print0
原因是: , ? [..] 本身是 metacharacters 元字符, 是能狗被 bash shell所解析的 , 并 expanded的! 如: foo 可以被expanded : foo1, foo2, foo3...; 而find 的 -name 后面只能接 一个 "pattern" 模式字符串. 所以就会出错 : find : paths must precede (领先, 在...之前, 是及物动词 ) expression: foo.lnk , 这里 是把foo.lnk当作 一个 path了...要放在 expr: -name foo.txt 之前...
所以, 虽然find 本身是能够 理解 和 接受 元字符 , ? [] 等的, 但是 这些 元字符(通配符) 不要事先 被 bash 所解析expanded. 即 要将 -name 后面的条件 用 引号进行转义 'foo' 作为一个 整体 传递给 find! 但是 要注意 : 这里的 -name 'foo*' 和前面 所说的 小括号 转义 '(', ')' 是稍有区别的!
关于find的 很好的 例子 , 参考: http://www.cnblogs.com/wanqieddy/archive/2011/06/09/2076785.html
- 按 权限来查找, 搜索, 使用 -perm 条件: find . -perm 777 -ls.
- 一般对于 大小, 时间等不能 精确表示的 条件, 最好使用 + 或- ,来表示 大于或小于条件, 比如: find . -size +50k M G
- 条件中的i表示ignore-case忽略大小写, 如: -ilname, -iname等等
- 还有很多条件, 如: -links, -nouser, -nogroup等...
- 对于1次不能带 多个参数的命令, 比如: rm(为了安全起见), 要批量操作, 可以使用 xargs命令, xargs本身就表示 前面的输入作参数了, 所以 后面就直接跟 命令就好了, 不再跟 {}什么的了