Reddit mentions: The best unix operating system books

We found 237 Reddit comments discussing the best unix operating system books. We ran sentiment analysis on each of these comments to determine how redditors feel about different products. We found 65 products and ranked them based on the amount of positive reactions they received. Here are the top 20.

1. Advanced Programming in the UNIX Environment, 3rd Edition

    Features:
  • No Starch Press
Advanced Programming in the UNIX Environment, 3rd Edition
Specs:
Height9.1 Inches
Length7.4 Inches
Number of items1
Weight3.61778571942 Pounds
Width2.5 Inches
▼ Read Reddit mentions

2. The Unix Programming Environment (Prentice-Hall Software Series)

The Unix Programming Environment (Prentice-Hall Software Series)
Specs:
Height9.25 Inches
Length7 Inches
Number of items1
Weight1.16183612074 Pounds
Width0.75 Inches
▼ Read Reddit mentions

3. Advanced Programming in the UNIX Environment, Second Edition (Addison-Wesley Professional Computing Series)

Advanced Programming in the UNIX Environment, Second Edition (Addison-Wesley Professional Computing Series)
Specs:
Height9.5 Inches
Length7.25 Inches
Number of items1
Weight3.4392112872 Pounds
Width2 Inches
▼ Read Reddit mentions

4. Unix Power Tools, Third Edition

    Features:
  • No Starch Press
Unix Power Tools, Third Edition
Specs:
ColorWhite
Height9.19 Inches
Length7 Inches
Number of items1
Weight4.10500731844 pounds
Width2.6 Inches
▼ Read Reddit mentions

5. Advanced Programming in the UNIX Environment (2nd Edition)

Advanced Programming in the UNIX Environment (2nd Edition)
Specs:
Height9.25 Inches
Length7.5 Inches
Number of items1
Weight3.89777279216 Pounds
Width2.5 Inches
▼ Read Reddit mentions

6. Writing GNU Emacs Extensions

Writing GNU Emacs Extensions
Specs:
Height9.19 Inches
Length7 Inches
Number of items1
Weight0.9700339528 Pounds
Width0.66 Inches
▼ Read Reddit mentions

7. Programming with POSIX Threads

    Features:
  • O Reilly Media
Programming with POSIX Threads
Specs:
Height0.87 Inches
Length9.22 Inches
Number of items1
Release dateMay 1997
Weight1.4770971554 Pounds
Width7.48 Inches
▼ Read Reddit mentions

8. Unix Shell Programming (3rd Edition)

Unix Shell Programming (3rd Edition)
Specs:
Height8.98 Inches
Length7.32 Inches
Number of items1
Release dateMarch 2003
Weight1.6314207388 Pounds
Width1.03 Inches
▼ Read Reddit mentions

10. UNIX Shells by Example (4th Edition)

UNIX Shells by Example (4th Edition)
Specs:
Height9 Inches
Length7 Inches
Number of items1
Weight3.747858454 Pounds
Width1.75 Inches
▼ Read Reddit mentions

13. Learning the vi and Vim Editors: Text Processing at Maximum Speed and Power

    Features:
  • O Reilly Media
Learning the vi and Vim Editors: Text Processing at Maximum Speed and Power
Specs:
Height9.19 Inches
Length7 Inches
Number of items1
Release dateJuly 2008
Weight1.72181026622 Pounds
Width1.1 Inches
▼ Read Reddit mentions

16. UNIX System Administration Handbook (3rd Edition)

    Features:
  • No Starch Press
UNIX System Administration Handbook (3rd Edition)
Specs:
Height9 Inches
Length6.75 Inches
Number of items1
Weight2.755778275 Pounds
Width1.25 Inches
▼ Read Reddit mentions

17. FreeBSD Device Drivers: A Guide for the Intrepid

Used Book in Good Condition
FreeBSD Device Drivers: A Guide for the Intrepid
Specs:
ColorMulticolor
Height9.25 Inches
Length7 Inches
Number of items1
Release dateMay 2012
Weight1.52 Pounds
Width0.86 Inches
▼ Read Reddit mentions

19. Learning Unix for OS X: Going Deep With the Terminal and Shell

O REILLY
Learning Unix for OS X: Going Deep With the Terminal and Shell
Specs:
Height9.19 Inches
Length7 Inches
Number of items1
Release dateFebruary 2016
Weight0.9038952742 Pounds
Width0.54 Inches
▼ Read Reddit mentions

20. A Quarter Century of UNIX

A Quarter Century of UNIX
Specs:
Height0.44 Inches
Length9.14 Inches
Number of items1
Weight0.8708259349 Pounds
Width6.24 Inches
▼ Read Reddit mentions

🎓 Reddit experts on unix operating system books

The comments and opinions expressed on this page are written exclusively by redditors. To provide you with the most relevant data, we sourced opinions from the most knowledgeable Reddit users based the total number of upvotes and downvotes received across comments on subreddits where unix operating system books are discussed. For your reference and for the sake of transparency, here are the specialists whose opinions mattered the most in our ranking.
Total score: 35
Number of comments: 2
Relevant subreddits: 1
Total score: 20
Number of comments: 4
Relevant subreddits: 1
Total score: 14
Number of comments: 3
Relevant subreddits: 1
Total score: 9
Number of comments: 3
Relevant subreddits: 1
Total score: 6
Number of comments: 4
Relevant subreddits: 2
Total score: 6
Number of comments: 2
Relevant subreddits: 1
Total score: 5
Number of comments: 3
Relevant subreddits: 2
Total score: 5
Number of comments: 2
Relevant subreddits: 1
Total score: 2
Number of comments: 2
Relevant subreddits: 1
Total score: 2
Number of comments: 2
Relevant subreddits: 1

idea-bulb Interested in what Redditors like? Check out our Shuffle feature

Shuffle: random products popular on Reddit

Top Reddit comments about Unix Operating System:

u/two-gun · 29 pointsr/linux4noobs

Sorry for getting all dramatic, but for me you're asking a red pill/blue pill question. I applaud your curiosity and can only recommend you follow your gut and take the red pill. The truth is by asking the question you already know what to do next. Just keep going. However I'll give you a few ideas because you got me excited.

  1. Get in touch with your osx terminal
  2. Get linux ASAP
  3. Learn the command line

    OSX Terminal


    Underneath the shiny GUI surface of your mac you have an incredible unix style OS just waiting to be played with and mastered. A few tips to get you going.


    Download iTerm 2. Press cmd-return, cmd-d and command-shift-d.


    Congrats. you now have a hollywood hacker style computer

    Copy and paste this line into your terminal and say yes to xcode.


    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

    Awesome you now have homebrew. A linux style package manager.

    May as well get cask too.


    brew install caskroom/cask/brew-cask

    Now you can install programs by typing a couple of words.

    try

    brew cask install virtualbox

    Get Linux ASAP


    Linux is relatively easy to get up and running and awesome fun. try any of these options

  • Download virtual box and install a 'virtual machine' to run linux on your mac (see above).
  • Buy a Raspberry Pi.
  • Create a bootable usb and install refind on your mac.
  • Take a friends old laptop and install linux on it from your live usb distro.

    If any of the above seems slightly daunting don't sweat it. Be confident and you may just surprise yourself at how much you can learn in such a short amount of time.

    Learn the command line


    The command line opens up the wonderfully powerful and creative world of unix. Push on.

  • Get the basics down with codecademy
  • Play with some books (this or this for eg)
  • Watch some youtube videos (this guy's good for webdev)
  • Learn a text editor (Try Vim. You already have it. Type 'vimtutor' in your terminal to get started)

    Play, Play, Play


    Do what gets you excited.

    I got a big kick out of learning ssh and then pranking my friends with commands like

    say hello friend, i am your computer. i think your friend two-gun is very handsome. Is he single?

    or

    open -a "Google Chrome" https://www.youtube.com/watch?v=X0uYvQ_aXKw

    Do what you find fun. Oh and check out Richard Stallman. He's a good egg.

    Enjoy.

    edit-0

    forgot iTerm link

    edit-1

    Wow! Gold! Ha! Thank you. This is so unexpected! I'd like to thank the academy, my agent, my mom...

u/osune · 12 pointsr/C_Programming

Hey,

I assume you have good grasp about the culture and ecosystem you want to work in by now. This means you're in a perfect situation to dig deeper.

My first advice would be to be more specific in your goal. Find a project which is interesting to you. This will help you to cut down the list of "things to learn", as you will concentrate on the tools the project uses.

In your tool belt should be at least:

    1. a programming language (including how to use the compiler, debugger)

    1. a build system suitable for the language

    1. a version control system

    1. a understanding for the platform you write code against

      Suitable answers can be:

    1. C , GCC and GDB

    1. GNU Make; as Cmake and Autotools generate Makefiles it is good to know the basics; it is mighty enough to support medium sized projects

    1. Git is what the cool kids use

    1. Linux and it's system calls / POSIX; your libc implementation

      This list is enough to keep you busy for a year easily.

      Here is a list of recommendations of resources which proved invaluable for me (based on the list above and more; this list contains free web resources and books):

    1. "The C programming Language", in my eyes the best book on C and pointers. It biggest drawback that it's a bit dated. Have a look at the different C standards (like C99/C11 etc) and look up whats new. Reference sites like this will normally mark features of newer versions. Read them for fun. For a more in depth look at pointers see Understanding and Using C Pointers. The different compiler options made sense to me first when I started to learn Make, this will come with time. No real recommendations for the debugger thou. I've learned by searching on the internet / documentation.

    1. the GNU Make manual is a great resource. But consider to have a look at Managing Projects with GNU Make, Third Edition which has a more practical approach and explains how to manage bigger projects.

    1. There is nothing better than the official Git Book. It covers everything, if something breaks your best bet is normally stackoverflow.
      Learn about GitFlow and the arguments against it. Write good commit messages. Understand different versioning schemes (https://semver.org/ ; http://calver.org/ ).

    1. man-pages, learn to love them (they deserve it). Where man-pages fall short is a clear explanation on why you might want to use an interface over the other. The best resource to fill this gap I found is The Linux Programming Interface. It covers nearly everything the operating system offers you, including background information. But you might want to get the e-book version as it is quite large/hard to search in paper. Getting to know your libc implementation, normally glibc, and its extensions is also important. Another good resource for some topics is Advanced Unix Programing, but it's clearly on the "further reading" list. Read it if you want to learn about "pseudo terminals" and how to be portable with other "Unixes".

    1. Misc: learn how to use the doxygen documentation tool

    1. As you mentioned in another comment that your goal is to work with the kernel directly: Linux Device Drivers is old, like grandpa old. But the core concepts it teaches still apply today.
      Unfortunately, apart from it, good resources on kernel programing are sparse. After working through this book your best bet are the drivers in mainline, the kernel documentation and google. Have a look at kernelnewbies for an introduction on how to get involved with mainline.

    1. Have a look at buildroot for an "easy" way to build custom systems for Qemu or your rasberrypi. Yocto is an alternative but can be quite intimidating starting out.

      Regarding your ideal schedule: I cannot answer this to be honest.

      /Rambling ahead/

      But: find a hobby project (e.g. implement a Z-machine) you want to realize in "a professional manner".
      What I mean by that is, strive to use all the tools you want to learn in a disciplined manner. Put your project out there on a public git host and assume you have real users who want to build your stuff on their own machines. Treat this project as your business card, don't be afraid but improve it constantly.

      There is always something you didn't know. You will always find things to improve, even it's only a improvement from a purist standpoint. But your "hobby" project is not done as soon as it works. It's a test bed, a record of what you've learned. It is a reference point for the future you to come back.

      Read blogs about development. Learn a object oriented language and see how you can apply these concepts in C (encapsulation, "object orientated design in C without classes"). Learn a functional language just to see something completely different (Haskell / a scheme / Common Lisp ). Realize that it's sometimes just a bad idea to use C for some projects / parts of a project.

      Consider to always learn the "core tool" first and then its "high level abstraction tool/helper". Eg: learn the basic usage of the gdb/git comandline tool before you dive into a graphical wrapper. Depending on your environment you wont have access to the wrapper, but the cli tool will be (hopefully) there. For example I use emacs (i know vim too) for git nowadays, but I'm not lost if I don't have access to it. Also it is always good to understand the core concepts.

      Read Linux Weekly News (access to the archive is free), have an eye on the Linux Kernel Mailing List. Bootlin.com has a ton of great learning material regarding embedded Linux, Driver programming, Yocto and buildroot.

      Don't be afraid to jump into an IRC channel / a mailing list, but be sure to do your homework first. They'll eat you alive if you didn't. (see http://www.catb.org/~esr/faqs/smart-questions.html)

      Be open but do your own research. Inform yourself on the pro and cons of everything. Don't believe in "silver bullets".

      It will be a steep learning curve in the beginning, but with every step you take it gets easier.

      Hope this helps you on your journey.

      Personal Info/Disclaimer: I'm a "professional" (i get paid) "embedded Linux" developer, writing system programs and kernel drivers for about 8 years. I still learn stuff every day. Recommendations are heavily based on my own experience and what I use still on a day to day basis. Regarding on what you want to do this list may lack information.

      edits: grammer, formatting, multiple additions in the first 2h
u/construkt · 4 pointsr/IWantToLearn

The best thing you can do is read (at least that is the way I learn the most, the fastest)! That being said, there are tons of free videos on youtube that go over networking and how it works. Figure out ways to apply your knowledge by setting up a network of your own and making it rad.

I think learning unix/linux is the way to go if you are into servers, but that is my bias. I am not a fan of Windows. In reality, you end up doing a lot of the same tasks when adminning, regardless of platform. Servers are just computers that run services (like http, ftp, nntp, email, etc). You basically just have to learn how to install, configure and run those services and learn best practices about installing and configuring the OS to do what you want it to do the best.

I highly recommend going into linux/unix adminning. I am not a huge windows fan. That being said, there are jobs there and if you can tolerate working with windows, it might not be a bad route to go if you want to be an admin for the rest of your life. I think nix admins end up doing more development work in the long run (which is more fun imo). As far as learning nix, I highly recommend unix power tools. I am sure there are tons of tutorials as well, but this book gives you a good idea about how to interact with the command line and gives you a great introduction to many of the tools available to you and when to use them. Setting up servers just means installing some services and getting them running in a smart way. There is usually a lot of documentation available for the service you are downloading and about how to configure it.

Regarding programming, pick a language and start using it for everything you can! When you install a service, pick a program that is made in that language to run on it (i.e., install/configure apache and then run a program written in python on it!). I highly recommend starting out with python, but choose whatever you want. Python has a ton of free documentation and ton of well-written apps available. Its syntax rules will force you into writing better looking code, which will carry over to other languages you will learn in the future. Learn python the hard way, dive into python, MIT OCW, Khan Academy. Pick an open source project and start helping out any way you can! At first, it might just be updating documentation, then you might fix some small/easy bugs and soon you will be fixing things and helping direct the way you want to see the project go (or perhaps start your own project!).

If it gives you any hope - I have worked it helpdesk, sys admin jobs, run IT departments and now work as a programmer, all without (much) formal training. I have taken courses over the years, but I think you can a lot just by reading, watching videos and then finding ways to apply that knowledge!

edit: I don't know where you live, but if you can, find local user groups to participate in and talk to locals. You may be able to find a job in the field and have a real way to apply that knowledge on a daily basis.

If you have any questions or need ideas about projects to start, please feel free to ask.

u/coned88 · 1 pointr/linux

While being a self taught sys admin is great, learning the internals of how things work can really extend your knowledge beyond what you may have considered possible. This starts to get more into the CS portion of things, but who cares. It's still great stuff to know, and if you know this you will really be set apart. Im not sure if it will help you directly as a sys admin, but may quench your thirst. Im both a programmer and unix admin, so I tend to like both. I own or have owned most of these and enjoy them greatly. You may also consider renting them or just downloading them. I can say that knowing how thing operate internally is great, it fills in a lot of holes.

OS Internals

While you obviously are successful at the running and maintaining of unix like systems. How much do you know about their internal functions? While reading source code is the best method, some great books will save you many hours of time and will be a bit more enjoyable. These books are Amazing
The Design and Implementation of the FreeBSD Operating System

Linux Kernel Development
Advanced Programming in the UNIX Environment

Networking

Learning the actual function of networking at the code level is really interesting. Theres a whole other world below implementation. You likely know a lot of this.
Computer Networks

TCP/IP Illustrated, Vol. 1: The Protocols

Unix Network Programming, Volume 1: The Sockets Networking API

Compilers/Low Level computer Function

Knowing how a computer actually works, from electricity, to EE principles , through assembly to compilers may also interest you.
Code: The Hidden Language of Computer Hardware and Software

Computer Systems: A Programmer's Perspective

Compilers: Principles, Techniques, and Tools

u/uriel · 2 pointsr/programming

> The marketing of Plan9 for the biggest part consist of snobish comments like yours, so i conclude you don't want more users. The Lisp guys are more open than you.

On this you are quite right, but then the Plan 9 user base very heterogeneous, in the end most people just don't care about marketing, they are happy to sit in a corner and do their thing and don't care much if the rest of the world jump from a cliff.

> Plan9 doesn't provide anything to non-programmers, they wouldn't get from UNIX and some things are better in UNIX.
Don't underestimate the intelligence of non-programmers, I know biologists, medicine students and even a law student that use Plan 9. I think the wonderful thing about the original Unix philosophy, and that is taken even further by Plan 9 is to allow people that are not programmers to use some really simple but also powerful tools to do their job. Of course it requires a bit more initiative and creativity, but at the same time you are much more free to take advantage of the system for tasks that it was not designed for.

The Unix Programming Environment is a book I think ever computer user should read, because it shows how everyone can easily learn to program their software environment... if that environment is built properly.

> For example Plan9 was praised for the beautiful fonts, when they invented utf8, but Apple surpassed them long ago.

I don't see what you mean by "surpassed", last I checked OS X still has trouble dealing with UTF-8 properly(I wont argue the details because I'm not a OS X user, I only report what I heard), as do every other Unix system I have ever tried. The Plan 9 UTF-8 code was written in 92', and has barely changed since, because it just works!

Anyway, the most important thing about Plan 9 is not just the code(which is worth admiring and studying by anyone interested in writing top quality software) and the innovative ideas(which are worth copying), but the philosophy, which is not too different from the original Unix philosophy... which unfortunately everyone forgot long ago. Programming is the art of managing complexity, and you don't fight complexity by adding extra complexity, you fight it with simplicity and clarity.

The cheapest, fastest, and most reliable components are those that aren't there. -- Gordon Bell

u/greengobblin911 · 1 pointr/linuxquestions

Many people may disagree with me, but as a Linux user on the younger side of the spectrum, I have to say there was one thing that really worked for me to finally switch for good- books.

There's tons of wikis and forums and of course Reddit to ask questions, but it is hard to get good answers. You may end up paying for books (unless you look on the internet for books) but it doesn't beat having a hard copy in front of you. It boils down to a time vs money trade off. The only wiki I would follow is one directly from the developers that act as documentation, not a community wiki. Also worth nothing certain wikis are more tied to linux and the kernel than others, meaning some are comparable/interchangable with the distro you may be using. Still, a novice would not easily put this together.

Forums are also useless unless you have the configuration mentioned in the post or that forum curates tutorials from a specific build they showcase and you as a user decided to build your system to their specifications. There's way too many variables trying to follow online guides, some of which may be out of date.

This i've realized is very true with things like Iommu grouping and PCI Passthrough for kernel based virtual machines. At that point you start modifying in your root directory, things like your kernel booting parameters and what drivers or hardware you're gonna bind or unbind from your system. While that does boil down to having the right hardware, you have to know what you're digging into your kernel for if you dont follow a guide with the same exact parts that are being passthrough or the cpus or chipsets are different.

Books are especially handy when you have a borked system, like you're in a bash prompt or an initramfs prompt or grub and need to get into a bootable part of the system. Linux takes practice. Sometimes its easier to page through a book than to search through forums.

Another thing about being an intermediate or expert Linux user is that you don't care much about distros or what other users or communities do. It wont matter as under the hood it's all the same, spare the desktop and the package managers. Once you're out of that mentality you just care about getting whatever you want done. I'm not one of those guys that's super gung-ho FOSS and open source. I just use what gets the job done. Also from a security perspective, yes Linux is in theory MORE secure but anything can be hardened or left vulnerable. It's more configuration tied than many uses and forums or threads lead it on to be.

My workload involves talking to servers and quite a bit of programming and scripting, in a variety of capacities. That's what led me to linux over the competitors, but I'm not so prudent to never ever want to use the competitor again or have a computer with it. With understanding Linux more, I use it more as a tool than to be part of the philosophy or community, though that enthusiasm pushes for new developments in the kernel.

I'm assuming you're a novice but comfortable enough in linux to get through certain things:

In any computer related thing, always TEST a deployment or feature first- From your linux system, use KVM or Virtualbox/vmware to spin up a few linux VMs, could even be a copy of your current image. This way any tweaks or things you want to test or try out is in an environment you can start over in.

The quickest way to "intermediate-expert" Linux IMO is learning system administration.

My go to book for this is "The Unix and Linux System Administration Handbook 5th edition"

https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/ref=sr_1_1?keywords=The+Unix+and+Linux+System+Administration+Handbook+5th+edition&qid=1564448656&s=books&sr=1-1

This edition is updated recently to cover newer kernel features such as could environments and virtualization. This book also helps when learning BSD based stuff such as MacOS or FreeBSD.

Another good read for a "quick and dirty" understanding of Linux is "Linux Basics for Hackers" It does focus on a very niche distro and talks about tools that are not on all Linux systems BUT it does a good concise overview of intermediate things related to Linux (despite being called a beginners book).

https://www.amazon.com/Linux-Basics-Hackers-Networking-Scripting/dp/1593278551/ref=sr_1_3?crid=396AV036T1Y0Q&keywords=linux+basics+for+hackers&qid=1564448845&s=books&sprefix=linux+bas%2Cstripbooks%2C119&sr=1-3

There's also "How Linux works" but I cannot vouch for this book from personal use, I see it posted across various threads often. Never read this particular one myself.

https://www.amazon.com/How-Linux-Works-2nd-Superuser/dp/1593275676/ref=pd_bxgy_14_img_2/137-6604082-4373447?_encoding=UTF8&pd_rd_i=1593275676&pd_rd_r=feffef24-d3c3-400d-a807-24d8fa39cd1e&pd_rd_w=8GX0o&pd_rd_wg=3AMRB&pf_rd_p=a2006322-0bc0-4db9-a08e-d168c18ce6f0&pf_rd_r=WBQKPADCVSABMCMSRRA1&psc=1&refRID=WBQKPADCVSABMCMSRRA1

​

If you want a more programming oriented approach, if you're confortable with the C language, then you can always look at these books:

The Linux Programming Interface

https://www.amazon.com/Linux-Programming-Interface-System-Handbook/dp/1593272200/ref=zg_bs_3866_1?_encoding=UTF8&psc=1&refRID=5YN3316W22YQ4TSMM967

Unix Network Programming VOL 1.

https://www.amazon.com/Unix-Network-Programming-Sockets-Networking/dp/0131411551/ref=sr_1_1?keywords=Unix+Network+Programming+VOL+1.&qid=1564448362&s=books&sr=1-1

Advanced Programming in the Unix Environment

https://www.amazon.com/Advanced-Programming-UNIX-Environment-3rd/dp/0321637739/ref=zg_bs_3866_2?_encoding=UTF8&psc=1&refRID=5YN3316W22YQ4TSMM967

These books would take you to understanding the kernel level processes and make your own and modify your own system.

As many have mentioned, you can go into these things with "Linux from scratch" but it's also feasible to do Linux from scratch by copy/pasting commands. Unless you tinker and fail at certain things (hence do it on a vm before doing it to the main system) you won't learn properly. I think the sysadmin approach is "safer" of the two options but to each their own.

u/vaiav · 2 pointsr/vim

As others have mentioned, trying to use Vim as an IDE is thinking about the problem or Vim in an inverse manner that will lead to frustration. The Acme Text Editor's model for composing tools to form an IDE is exactly how one uses Vim most effectively.

A concrete Vim specific example is programming Go in Vim: VimGo. Note how in the context of Go instead of subsuming the functionality of external tools, the external tools are instead leveraged and exposed through an interface or accessed through existing Vim functionality.

That is exactly how to wield Vim and external tools masterfully and with the most efficacy. The Unix as an IDE articles discuss this concept in depth also and are excellent. Separation of concerns is precisely how all tools should be designed, something which Plan 9 and Inferno OS display masterfully and irrefutably; note how well done, completely encapsulated abstractions enable a completely composable environment as a result, brilliant no?

That same pursuit is realized through the Go toolchain, much of Haskell, and increasingly through the Clang toolchain, which is very powerful and very freeing to create great, completely optimized workflows.

If you really want to grok the mindset and approach to wielding external tools effectively and why tools must be designed this way for maximum workflow efficacy, I highly recommend reading and understanding the literature written by Brian Stuart's Principles of Operating Systems: Design and Applications that covers Inferno OS's design very well, and W. Richard Stevens' Advanced Programming in the UNIX Environment, the latter of which is a classic CS text and very lucid. Cat-V has a lot of great articles which discuss various tools as well.

The workflows enabled through the UNIX Philosophy is so much more effecient that even when outside a UNIX environment I utilize the tools through a VM rather than being hamstrung in an environment which eschews that design completely.

And because these tools are ubiquitous I can avoid relearning how to accomplish the same thing over and over as a result, meaning that the initial opportunity cost is worthwhile in the long run. Linux is increasingly incorporating features in the kernel which improve upon previous implementations as well as in user space, so it is an exciting time for system programmers as well as other programmers.

u/snarledapus · 1 pointr/unix

First, you need to learn cd ls. And the UNIX filesystem. Here is a PDF for the filesystem. You need to know this: http://www.pathname.com/fhs/pub/fhs-2.3.pdf

cd is a shell command, not a program. It changes your current working directory. This is what you use like Windows Explorer or OS X Finder. When you login, you will start at /home/USERNAME. To see all of the users on the system's home directories do:

cd ..
ls

Odds are there aren't many users besides you. If you login as root (not advised, especially at first). Root's home directory is /root.

Some things to learn are how a Linux system starts. Unfortunately if you are using a newer Debian 8, it uses systemd which is much a much more complex booting system than previous versions. Honestly, I would recommend installing Debian 7 and learn how it starts, then move to Debian 8. systemd is new and a bit controversial because it is not very "unixy".

The reason I mention systemd, is that it is the first "user space" process that runs when linux starts. The older mechanism is called init.

The reason that I say go with the older system is because it uses a series of shell scripts which is a text file filled with various commands to get things started. This is a good place to learn how things are done when starting out. systemd is a very big and complex system that I believe is too complicated to start with, but it's good to learn eventually.

If all this is too much at first, install a very base system. Then go to /usr/bin and read the man page for each command. To read a man page, do man COMMAND_NAME. Sometimes, you may need to do man 1 COMMAND_NAME as the /usr/bin/ commands are in section 1 of the UNIX manual. To quit viewing the page, press q. You can use the up and down arrows and space to navigate like a web page. You can also use j for down and k to go up.

I would also suggest a book. I started out with http://www.amazon.com/UNIX-Impatient-Edition-Paul-Abrahams/dp/0201823764 It's $20 or so dollars. If you don't have the money, PM me and I'll buy it for you.

Learn the shell. Bash is a good enough one. zsh is very cool as well.

Oh, it's probably worth noting that UNIX is a multi user system, where root is "God" of the system. Root can do basically anything, and the other users have less permissions to do things. I would recommend using a real user at first, to learn the differences.

Linux is really fun. It has a very steep learning curve because it is so complex and powerful, and that power is why it has been #1 is doing stuff like powering the internet, being used for wifi routers, and it is the basis of over 90% of all cellphones as well. UNIX has evolved to be basically Linux nowadays. There are some commercial UNIXes left, but Linux is good enough.

Keep posting here if

u/SmoothB1983 · 5 pointsr/learnprogramming

Get a programming language, but also get some literature on the theories that programming uses. A book on algorithms and another on data structures would pretty much do the trick.

And why start with Python when you can start with C and then move onto java? I am sure you are a smart guy, and understanding those 2 languages will give you the lingua franca you need to comprehend the best textbooks/references on advanced programming concepts that will help you out.

I suggest:

1 Get this http://en.wikipedia.org/wiki/The_C_Programming_Language

2 Install linux (ubuntu probably is the way to go), you'll probably dual boot

3 Get this http://www.amazon.com/Unix-Programming-Environment-Prentice-Hall-Software/dp/013937681X

4 Learn your shell (the bash shell), learn how to use C, sed, awk, regex etc. These are all super-useful tools. This is an entirely approachable set of topics, don't be daunted.


After doing all of that it is time to get to java.

1: Pick up Head First Java (and download all of the book exercises from the publisher's website. This will be your first book in java.

2: Download all java docs from Oracle (so you can reference them).

3: Pick up Thinking in Java by Bruce Eckel (this will be your other Java book to learn from).


All of this should more than occupy your 6 months. After this you'll be ready to learn some more advanced concepts with these as your solid foundations. If you want to play with databases (a good idea) and integrate them into your programming then check out SQLLite.

http://sql.learncodethehardway.org/

u/clemera · 5 pointsr/emacs

I learned the basics of Lisp from this
book, which you can get online for free. Although it's about Common Lisp you
can translate most of it easily to Elisp, just (require 'cl-lib) and you will
be fine. For another quicker but great introduction to Lisp I recommend
reading the first three chapters of
PAIP

The old Writing Gnu Emacs Extensions
still serves as a good introduction to learn Emacs APIs. I also learned a lot
more about Elisp reading nullprogram.

Reading code of small packages which solve something you are interested in is
another great way to further improve your Elisp skills.


u/detaer · -2 pointsr/askscience

These books, third one optional are a great start to be a freedomm-beard / community troll like myself. I can't say its a glorious life but it pays the bills. Being able to throw together a cluster of computers for some interesting distributed database / model crunching is pretty damn cool. I would also suggest a copy of virtualbox and ubuntu for a beginner's linux desktop and debian for servers. Freebsd is pretty dame great, and cent/rhel is not a bad place to go either. Its also unix with a U not eunuch with an e.

http://www.amazon.com/Linux-Administration-Handbook-Evi-Nemeth/dp/0130084662
http://www.amazon.com/Practical-Guide-Commands-Editors-Programming/dp/0131367366/ref=pd_sim_b_2
http://www.amazon.com/Learning-Vim-Editors-Arnold-Robbins/dp/059652983X/ref=pd_sim_b_23

I understand this is not so much a scientist bit of content here, but having systems competency if you plan on doing research that does any model analysis is pretty valuable.

u/just-an0ther-guy · 2 pointsr/sysadmin

In that case...
You may want to wait for the 5th edition of UNIX and Linux System Administration, as it should release near the end of this year and they don't release new versions that often.

A good way to get started building a college library is to see what the curriculum for the school is and what books are required by professors. Often other colleges will list their book recommendations for the courses online to get an idea of where to start looking. (I know my school has an online bookstore that lists the books for each course and is open to the public)

At least one or two good books in each of those categories, to get a rough idea to start:

u/idboehman · 2 pointsr/devops

I'd make sure I have a really solid understanding of systems and networks, e.g. how Linux works. This book seems like a great overview and I love No Starch Press. There's also this book which is used by Carnegie Mellon's introductory systems course, though that might be a bit too deep to dive into straight away, more like something that could be used if you want a deeper understanding of how systems work. You should have some familiarity with C just as foundational knowledge. The guy who wrote Learn Python The Hard Way also wrote an intro to C, Learn C the Hard Way. He's added a lot more material than the last time I checked (~Dec 2012) which looks like it covers a lot of topics so it would be great to work through it.

Some more technical books on this subject that are well regarded and can be used as reference books are Advanced Programming in the Unix Environment, Unix Network Programming, and The Linux Programming Interface

Also in addition to Python I'd also suggest learning some Ruby (Practical Object-Oriented Design in Ruby and Programming Ruby 1.9 & 2.0 are two resources I'd recommend), it's what Chef is/was implemented in and is fairly nice to work with.

u/CSMastermind · 2 pointsr/AskComputerScience

Senior Level Software Engineer Reading List


Read This First


  1. Mastery: The Keys to Success and Long-Term Fulfillment

    Fundamentals


  2. Patterns of Enterprise Application Architecture
  3. Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions
  4. Enterprise Patterns and MDA: Building Better Software with Archetype Patterns and UML
  5. Systemantics: How Systems Work and Especially How They Fail
  6. Rework
  7. Writing Secure Code
  8. Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries

    Development Theory


  9. Growing Object-Oriented Software, Guided by Tests
  10. Object-Oriented Analysis and Design with Applications
  11. Introduction to Functional Programming
  12. Design Concepts in Programming Languages
  13. Code Reading: The Open Source Perspective
  14. Modern Operating Systems
  15. Extreme Programming Explained: Embrace Change
  16. The Elements of Computing Systems: Building a Modern Computer from First Principles
  17. Code: The Hidden Language of Computer Hardware and Software

    Philosophy of Programming


  18. Making Software: What Really Works, and Why We Believe It
  19. Beautiful Code: Leading Programmers Explain How They Think
  20. The Elements of Programming Style
  21. A Discipline of Programming
  22. The Practice of Programming
  23. Computer Systems: A Programmer's Perspective
  24. Object Thinking
  25. How to Solve It by Computer
  26. 97 Things Every Programmer Should Know: Collective Wisdom from the Experts

    Mentality


  27. Hackers and Painters: Big Ideas from the Computer Age
  28. The Intentional Stance
  29. Things That Make Us Smart: Defending Human Attributes In The Age Of The Machine
  30. The Back of the Napkin: Solving Problems and Selling Ideas with Pictures
  31. The Timeless Way of Building
  32. The Soul Of A New Machine
  33. WIZARDRY COMPILED
  34. YOUTH
  35. Understanding Comics: The Invisible Art

    Software Engineering Skill Sets


  36. Software Tools
  37. UML Distilled: A Brief Guide to the Standard Object Modeling Language
  38. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development
  39. Practical Parallel Programming
  40. Past, Present, Parallel: A Survey of Available Parallel Computer Systems
  41. Mastering Regular Expressions
  42. Compilers: Principles, Techniques, and Tools
  43. Computer Graphics: Principles and Practice in C
  44. Michael Abrash's Graphics Programming Black Book
  45. The Art of Deception: Controlling the Human Element of Security
  46. SOA in Practice: The Art of Distributed System Design
  47. Data Mining: Practical Machine Learning Tools and Techniques
  48. Data Crunching: Solve Everyday Problems Using Java, Python, and more.

    Design


  49. The Psychology Of Everyday Things
  50. About Face 3: The Essentials of Interaction Design
  51. Design for Hackers: Reverse Engineering Beauty
  52. The Non-Designer's Design Book

    History


  53. Micro-ISV: From Vision to Reality
  54. Death March
  55. Showstopper! the Breakneck Race to Create Windows NT and the Next Generation at Microsoft
  56. The PayPal Wars: Battles with eBay, the Media, the Mafia, and the Rest of Planet Earth
  57. The Business of Software: What Every Manager, Programmer, and Entrepreneur Must Know to Thrive and Survive in Good Times and Bad
  58. In the Beginning...was the Command Line

    Specialist Skills


  59. The Art of UNIX Programming
  60. Advanced Programming in the UNIX Environment
  61. Programming Windows
  62. Cocoa Programming for Mac OS X
  63. Starting Forth: An Introduction to the Forth Language and Operating System for Beginners and Professionals
  64. lex & yacc
  65. The TCP/IP Guide: A Comprehensive, Illustrated Internet Protocols Reference
  66. C Programming Language
  67. No Bugs!: Delivering Error Free Code in C and C++
  68. Modern C++ Design: Generic Programming and Design Patterns Applied
  69. Agile Principles, Patterns, and Practices in C#
  70. Pragmatic Unit Testing in C# with NUnit

    DevOps Reading List


  71. Time Management for System Administrators: Stop Working Late and Start Working Smart
  72. The Practice of Cloud System Administration: DevOps and SRE Practices for Web Services
  73. The Practice of System and Network Administration: DevOps and other Best Practices for Enterprise IT
  74. Effective DevOps: Building a Culture of Collaboration, Affinity, and Tooling at Scale
  75. DevOps: A Software Architect's Perspective
  76. The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations
  77. Site Reliability Engineering: How Google Runs Production Systems
  78. Cloud Native Java: Designing Resilient Systems with Spring Boot, Spring Cloud, and Cloud Foundry
  79. Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation
  80. Migrating Large-Scale Services to the Cloud
u/wadcann · 12 pointsr/linux

>Why does Linux limit itself to this file name size?

What should it be? Posix requires it to be capped at NAME_MAX. That could be anything, but on my Linux distro happens to be 255. You could increase that and recompile your libs and apps if you wanted, but the Posix folks happened to choose to put a compile-time constant length on things back when. They probably did that because it makes handling some things more convenient. I imagine that somewhere, there's code that statically-allocates stuff of NAME_MAX + 1 length, so jacking up NAME_MAX to, say, 1MB would probably cause some programs to use a lot of memory...so that hasn't been done.

As to why Linux uses 256 instead of NAME_MAX + 1 in the header, go look at your system headers. On my system, /usr/include/x86_64-linux-gnu/bits/dirent.h has the following:

char d_name[256]; / We must not include limits.h! /

I imagine that 256 is used rather than NAME_MAX + 1 because they don't want to have the kernel header depend on that other header; maybe it creates a dependency loop, where limits.h depends on dirent.h and visa versa to find various constants. I'm not sure which standard "owns" NAME_MAX, but perhaps it's something that the kernel provides and libc is responsible for setting based on the kernel. It does seem a bit odd that there isn't a constant defined in the kernel headers (that libc defines NAME_MAX to on Linux) that is also used here and anywhere else a filename might show up, but I expect that the kernel folks had a reason for that.

EDIT: note also that the Windows API has a similar such restriction:

>>What is the maximum length of a file name?
>
>Windows usually limits file names to 260 characters. But the file name must actually be shorter than that, since the complete path (such as C:\Program Files\filename.txt) is included in this character count. This is why you might occasionally encounter an error when copying a file with a very long file name to a location that has a longer path than its current location.

Huh...I thought that they had a maximum path length of 1024 characters (or bytes; don't recall) but then I haven't done Windows programming for a while now...seems that 260 is correct, though.

>As a side note: any links to really good resources or articles for Unix/Linux systems programming in C would be much appreciated.

Seems like a pretty broad range of material, if you just want articles. I mean...you might want to narrow down what you're looking for a bit. I think that Advanced Programming in the Unix Environment is probably a worthwhile book to go through, if you just want a "C on Unix" book.

u/JALsnipe · 6 pointsr/C_Programming

I'm a graduating senior studying computer science. Last semester I took an intense C course (Advanced Programming in C and C++ (Spring 2014 course page)). The majority of the class focused on C, with the last few weeks introducing C++ concepts such as the built-in data structures and templating. The hardest project was writing a web server in C, and although you probably won't be doing anything like that, I recommend you dive into these books alongside K&R:

Advanced Programming in the UNIX Environment, Third Edition. Can be pricy, but you may be able to find this online if you know where to look. I recommend you have a hard copy as a reference manual though.

Learn C The Hard Way. Say what you want about Zed Shaw, but I worked through this book alongside K&R just before I started Advanced Programming and really liked the way he takes you through the C fundamentals. The book is free in HTML form, or you can opt to buy the eBook.

Hope that helps!

u/fnord123 · 2 pointsr/linux

Which C++ book? If it's a Deitel book or 24 hours or whatever, just take it back. If you would like to learn C++, get Koenig's Accelerated C++.Also, I've never read a 'Dummies' book but if your Linux book is like the "Learn X in Y [unit of time]" then I would take it back. I think this is a good, albeit old, book. I'm sure others can recommend some more specific to your distribution.

As far as systems administration goes, C++ isn't very useful. As a system administrator, you will want to learn how to automate tedious tasks. UNIX Power Tools is a good book for learning the smattering of mini languages you will run into. This includes Awk, Sed, Bash, etc.

Aside from that, learning a language like Python will be useful. But I'd take it one step at a time. If you're trying to learn many things at once and don't have a teacher it might be tough trying to organize all the learning.

u/magkopian · 4 pointsr/linuxquestions

Linux or *nix programming in general basically means C programming using system calls. If you are interested in this kind of stuff one of the best books I've ever read on the subject was the Advanced UNIX Programming by Marc Rochkind. Obviously, you have to have a fairly strong C background in order to read this book, but if you want to get into Linux programming this is one of the best books out there in my opinion.

Shell scripting is fine to know (and probably you should) but that doesn't count as Linux programming, the shell is just a tool targeted to the user aka sysadmin to help them manage their system more effectively.

u/liaobaishan · 1 pointr/learnprogramming

I've been a web developer for two years and can tell you what I learned over time that led to me getting an internship at a software company. I didn't major in computer science but I did eventually go to a bootcamp.

I'll note that I'm not a huge fan of that flowchart, because it's backwards. You need to be familiar with what all those tools can accomplish, but I don't think anybody is capable of holding expert-level competence in so many areas at the same time. The key is getting to the point where you know or can figure out what tool will be required for any given task. For example, I don't really know much about Websockets, but I know that I'd probably need them if I wanted to build a chat application.

Anyway, here's my learning track in terms of programming

Pre-2011: Excel formulas

First programming I ever did for a bunch of random things, and at this time I didn't realize I wanted to be in software development yet.

2011-2013: SQL

Started with the DBA where I was working sending me a Word document with some common queries I could run in a SQL client so I could answer other people's questions and same him time. Over time I learned how to change the queries and then write my own. This book helped: https://www.amazon.com/SQL-Queries-Mere-Mortals-Hands/dp/0321444434/ref=sr_1_2?ie=UTF8&qid=1494701750&sr=8-2&keywords=sql+queries+for+mere+mortals

2013-2014: Java, shell scripting, other unix/linux related things

Took a programming class using Java and a shell scripting class in a local university's online program. Used these books:

https://www.amazon.com/Java-Introduction-Problem-Solving-Programming/dp/0132162709/ref=sr_1_14?ie=UTF8&qid=1494701761&sr=8-14&keywords=introduction+to+programming+with+java
https://www.amazon.com/Unix-Shell-Programming-Stephen-Kochan/dp/0672324903/ref=sr_1_6?ie=UTF8&qid=1494701778&sr=8-6&keywords=unix+programming

I think Java is a very good first object oriented language to learn, even though most bootcamps want to do either Ruby or Javascript. Ruby (and Rails) have a little too much syntax sugar and other shortcuts that make it hard for a beginner to understand, and JavaScript is just plain weird (along with its ecosystem, which requires knowing a little history of the language and why it is the way it is).

2015: Ruby, Rails, a little JS. Attended a bootcamp and got my first job.

2016: ReactJS, actually understanding JS

2017: More JS, and now learning Elixir and the Phoenix framework.



As I mentioned before, these languages and frameworks are just tools. The way I've learned has been to do projects, figure out what tools would be necessary to accomplish all the functionality, and then slowly make progress on learning how to use those tools, eg, copy/pasting, modifying code other people have written, and then finally taking the training wheels off.

u/WyomingShapedWaffle · 2 pointsr/linuxquestions

Not to dismiss the other book suggestions because they are also good but one of the most important, relevant, useful and famous books of all time about UNIX internal stuff is "Advanced Programming in the UNIX Environment" by Richard Stevens -- Amazon Link


It's not for the faint of heart and you'll need solid understanding of C-based languages... it's as gory as it can get. :)

u/cheeseprocedure · 9 pointsr/sysadmin
  1. Make sure you have backups that do not reside on the VPS. (Look into rsync/rdiff-backup if you're unfamiliar with them.)
  2. Don't run X on your production server ;)
  3. Keep up on security updates. If you're on Ubuntu, for example, you can subscribe to the relevant mailing lists (http://www.ubuntu.com/usn) and set up a cron entry to update your apt repository/email you with available updates (Google "ubuntu server update notification" for umpteen thousand helpful writeups).
  4. Ideally you'd have a testbed (whose OS/software configuration is the same as the VPS) where updates are applied and ensure services keep ticking along afterwards; that may be overkill, but it's good practice :)
  5. Keep your system configuration files in a source control system; etckeeper is a great option: http://evilrouters.net/2011/02/18/using-etckeeper-with-git-on-ubuntu
  6. Use keys for SSH login.
  7. Don't run services as root.
  8. Don't allow root to login via SSH.
  9. There's many tools for automatically parsing/acting upon syslogs; check out logwatch, fail2ban, and OSSEC.
  10. If you're running third-party Web packages (WordPress, PHPbb, etc.), keep them up to date. They're a big, fat, juicy target for script kiddies and botnets.
  11. Pick this up for some light reading: http://www.amazon.com/Power-Tools-Third-Shelley-Powers/dp/0596003307
u/[deleted] · 2 pointsr/linux

I recommend *BSDs as learning command line is easier there than Linux due to centralized documentation and consistent tools that doesn't change as much as Linux user land. For desktop use, I think all Free Unix-like machines suck regardless of DE. Read this: https://www.freebsd.org/doc/en/articles/explaining-bsd/article.html

  • FreeBSD: Focus on performance and robust/secure storage.
  • NetBSD: Aims to run on any architecture, focus on portability.
  • OpenBSD: Clean coding and secure practices.

    The difference is BSDs have separate userspace at /usr/local/<here>. Unlike Linux, BSDs are developed as a single OS, so it's not something like GNU+Linux+musl+busybox, it's just FreeBSD/OpenBSD/NetBSD. Remember, don't confuse these BSDs as Linux distros. Each of them are different OS, with different kernel. Also due to consistent nature you can't replace core system parts like NetworkManager, dhcp etc on runtime via package manager. If you install something later, it will be installed into /usr/local/bin/<here>... why.. because it's not part of FreeBSD where core system parts lies on /bin/, /usr/bin, /usr/sbin etc. Due to this design, your system remains more failsafe, less vulnerable to crash etc. I think you should start with FreeBSD Auto ZFS install. If you want to run FreeBSD on decent modern hardware, try TrueOS. But do not expect anything like Linux. Both are completely different. Also the community is full of technical people. There is no DE/distro war on BSD land (Because there is no such things there, btw still some Linux newcomers make noise sometimes). Nobody asks why X sucks.. etc :D Most of the BSD people are very experienced system programmers and some of them are also university professors. I still recommend using Linux at desktop if you are kinda Free Software guy. I am not, however I am fine with something as long as it is Open Source (may/mayn't be GPL etc). I also use tons of proprietary applications and I absolutely love them. Try FreeBSD on a VM, not on real hardware for now.

    Check this out, when this guy moved to BSD after being a long time Linux user: https://runbsd.info/people/fr0xk.html
    You will also enjoy this sort of stuff: https://www.freebsd.org/doc/en_US.ISO8859-1/articles/new-users/index.html

    What to learn:

  • Bourne shell (not bash, but sh)
  • cat, less, grep, sed, awk and vi
  • Unix group permission handling and user managements
  • Init and service management, what is init system, and how boot process works in BSDs/Linux etc
  • File system, what is data? What is journaling. How do you ensure data integrity etc.
  • Modern filesystems (btrfs, ZFS), and logial volume management (LVM). What are advantages/disadvantages of them.
  • Stack, Address Space Randomization, Process randomization, userspace vs kernel space.
  • Read books: https://www.amazon.in/FreeBSD-Device-Drivers-Guide-Intrepid/dp/1593272049 (If you are still reading this) xD

    I was a Linux noobs for 10+ years, until I started to study computer science as hobby (I am non-geek, non tech guy, and barely knew how to turn the smartTV on)
u/saranagati · 1 pointr/sysadmin

The Design of the UNIX Operating System

u/quantifiableNonsense · 3 pointsr/AskEngineers

Self taught professional software engineer here.

Which language you learn is not as important as learning about data structures and complexity analysis. Code organization is also very important.

Pick one high level scripting language (like Python, Ruby, Perl, etc) and one low level systems language (C, C++, Rust, etc) and learn them both inside out.

A couple of books I recommend:

  • Code Complete
  • SICP

    As far as practical skills go, you need to learn how to use git (or whatever VC system the companies you are interested in use). You need to learn how to use Unix systems. A great introduction is The UNIX Programming Environment. You need to learn how to read other peoples' code, open source projects are great for that.

    When you are getting ready to interview, there is no better resource than Cracking the Coding Interview.
u/J_M_B · 2 pointsr/emacs

;Default font:

(set-frame-font "Monaco Regular 18")

;Set the background to black:

(set-background-color "black")

You can copy those lines to your scratch buffer ,"C-x b *scratch*", place the cursor at the end of the line and hit "C-x C-e" and they should take immediate effect.

Steve Yegge did a nice post about emacs configuration that is a pretty good intro into how to organize all of your modes.

If you want to harness the true power of emacs, you will have to learn a little lisp. If you've never seen lisp before, I would recommend starting with John McCarthy's original introductory paper. The place to go from there would be
Glickstein's Writing GNU Emacs Extensions. Though some of the particular configuration information is a bit dated, it is a perfect introduction to programming in emacs lisp (elisp). Last but not least, there is the Programming in Emacs Lisp online resource at gnu.org. Hope that helps!

u/sanedave · 5 pointsr/unix

The approach I took is to start with commands and languages using regular expressions: find, grep, sed, awk, python or perl, etc. These are very powerful and useful commands.

Two books I highly recommend are [Unix Shells by Example] (http://www.amazon.com/UNIX-Shells-Example-4th-Edition/dp/013147572X/ref=sr_1_1?ie=UTF8&qid=1374157897&sr=8-1&keywords=unix+shells) and [A Practical Guide to Linux] (http://www.amazon.com/Practical-Guide-Commands-Editors-Programming/dp/013308504X/ref=sr_1_1?s=books&ie=UTF8&qid=1374157979&sr=1-1&keywords=practical+guide+to+linux)

Also check out (PDF warning!) [Advanced Bash Guide] (www.tldp.org/LDP/abs/abs-guide.pdf)

These all are excellent, and very useful.

u/lavidaesbella · -1 pointsr/learnprogramming

You should not look the source code of the libs if you want to learn how C works, their code it's full of complex concepts of C programming like a lot of preprocessor, abstract structures and complex algorithms (dynamic programming, divide and conquer, backtracking, etc).

If you don't know how UNIX programming works you should start there, like process control, file and dir management, threading, networking. A lot more useful to learn pure C than the standard libs implementations.

For UNIX programming read this: Stevens

To improve your knowledge in C: K&R and as a complement king.

If you insist in reading library implementation take a look at OpenBSD libs implementation (much clutter-less than GNU).

Oh, and also do yourself a big favor and learn Vim reading learning vim.

Knowing the basics of C language and UNIX programming is the way to become a true programmer/hacker.

u/whiteandpastry · 1 pointr/linuxmasterrace

I would start by running Linux in a VM (Virtual Machine) under Windows. Take a look at VMWare Player. This way you can try out different Linux distributions to familiarize yourself with them and decide which one you like best, all without compromising your ability to get your job/school work done.

Try to accomplish everything you need to within a Linux VM. Learn how to install and remove software with the package manager. Learn how to use the shell effectively (especially creating pipelines of commands). Learn how the filesystem works, mounting devices. Learn how to configure networking. Once you've figured out which distribution you like, and feel confident that you can do everything you need to, then install Linux as your primary OS.

Even then you could still set up dual boot or run Windows in a VM under Linux if you still really need Windows. For example, I worked somewhere that used Excel spreadsheets with lots of VBA/macros that just wouldn't work with OpenOffice. For me, games are the only reason I still keep Windows 7 around.

Google search is your friend, as well as here and linuxquestions.org. When I switched to Linux back in the late 1990's I relied on A Practical Guide to the UNIX System a lot. It's out of print, but if you can find a cheap used version it's worth picking up.

u/gtranbot · 3 pointsr/learnprogramming

For an intro to general Unix wizardry, I'd recommend Unix Power Tools. It covers all the basic Unix tools, and shows how they can be used together effectively.

To be a real Unix master, you should also learn Perl. If you want to go farther and master Perl you can't go wrong with that.

Once you know the basics of Perl, get the Perl Cookbook, which has many great recipes for doing things like in your list. In fact, if I recall, that very example might be in the book; if not, one very close to it is.

I always had a hard time learning from man pages. They're great for reference once you've already got your bearings, but in my opinion these books will serve you far better.

u/sbicknel · 3 pointsr/vim

Don't overlook the included user manual. :help usr_toc will take you there. It is based on the book "Vi IMproved--Vim," which is also available free in PDF format on the Internet because it is published under the Open Publication License. The book is dated, but the manual is up-to-date and tracks with the book very closely.

Derek Wyatt's tutorial videos are good, but there is another vim video tutorial set at Vimcasts.

If you would rather read, but don't want to dig into a five-hundred page book, "A Byte of Vim" may be more manageable. Several of these resources are listed in this subreddit's sidebar.

Several books are now available that cover Vim nicely: "Learning the Vi and Vim Editors," "vi and Vim Editors Pocket Reference," "Hacking Vim 7.2," "Practical Vim: Edit Text at the Speed of Thought," and a brand new book: "Pro Vim," all available on Amazon.

u/phao · 2 pointsr/C_Programming

Not as far as I know, but I've seen this book being recommended some times: http://www.amazon.com/Programming-POSIX-Threads-David-Butenhof/dp/0201633922/

I've never read it.

APUE is generally recommended (not specifically for multithreading though), and it has chapters on multithreading and multiprocess programming: http://www.amazon.com/Advanced-Programming-UNIX-Environment-Edition/dp/0321637739/

Obs.: People are talking about multithreading a lot, but there are other approaches. Multiprocess is another way to possibly take advantage of multiple cores on a CPU or multiple processors on a computer. Differences between the two approaches involve:

  • what your OS defines as a thread and as a process (processes and threads are commonly OS supported concepts, but I've read about multithreading that doesn't require specific OS support for threads [green threads - check http://c2.com/cgi/wiki?GreenVsNativeThreads], but I've never heard multiprocess programming without the assumption of the existence of an OS that supports the idea of a process and of multi processes running "at the same time" [it seems possible to me to extend the notion of green threads and come up with something like green processes, but I've never seen that done out there]);
  • what means through which threads can pass data around and what means through which processes can pass data around;
  • the amount of resources it gets utilized to create and destroy a thread and a process;
  • etc.

    Processes are generally heavier weight (they spend more resources) and are more isolated from each other, in comparison to threads.
u/attekojo · 2 pointsr/learnprogramming

It's not online and you have to *gasp* pay for it, but I've found the classic book UNIX Programming Environment to still be one of the best introductions to UNIX and C programming. It is also a great introduction to the UNIX mindset.

u/logic_programmer · 1 pointr/learnprogramming

> can someone give me a few suggestions of things to read up on in terms of linux shop debug workflow?

This book shows why some programmers love emacs so much:

http://www.amazon.com/Writing-GNU-Emacs-Extensions-Customizations-ebook/dp/B0043M56SW/ref=sr_1_2?ie=UTF8&qid=1427123072&sr=8-2&keywords=emacs+lisp

The info pages for gdb are good and there's plenty of websites giving short tutorials on how to debug with it.

This book is good for make:
http://www.amazon.com/Managing-Projects-Make-Nutshell-Handbooks/dp/0596006101/ref=sr_1_1?ie=UTF8&qid=1427123212&sr=8-1&keywords=make+oreilly

u/doublenns · 2 pointsr/linuxadmin

Read "The Linux Command Line" from cover to cover (it's free). You'll easily be a beginner shell scripter by then and probably a better Linux user overall. The book is also an easy read.

From there go into "Unix Shell Programming". If you reduce the gap between the 2 books, the 2nd book will also be an easy (yet somewhat dry) read.

Try to build some small projects while going thru the material. If you use it you'll be more apt to retain the info.

That's what I did. Took me 2 months of reading afterhours of my full time job. By the time the 2 months was up I surprisingly knew more shell scripting than most Linux Admins I've met since. (Admittedly, a lot of people in IT really don't know as much as they try to make it seem.) The only thing missing was experience and projects to use as practice.

Edit: You probably would do really well getting a LinuxAcademy subscription for a year and go thru as much as possible.

u/sreguera · 2 pointsr/programming

Mostly when he talks about the process/thread implementation and the process memory working set and page replacement algorithms. Also when he talks about the Unix security model (user|group|all). It is now a bit more elaborated than that, and you can use ACLs almost like in Windows. And at one point he asks when was the last time someone used pipes (|) for composing programs!

I would recommend this book, UNIX Internals: The New Frontiers, that explains the internal implementation of a variety of Unix systems in the mid nineties. Amazon says that a new edition is planned for January next year, good news!

u/techtravel7 · 1 pointr/cpp_questions

Geany might be a friendly alternative to VS. Otherwise GCC-G++ and make files are your friend. A decent book to read on how to utilize the power of Linux with c/c++ is Advanced Programming in the UNIX Environment :

https://www.amazon.com/Advanced-Programming-UNIX-Environment-3rd/dp/0321637739

It will teach you about headers you won't find on Windows and how to program the whole operating system using c. But this can always be extended to c++ since c++ is a superset of c.😂

u/WhackAMoleE · 5 pointsr/cscareerquestions

>I was just wondering if there would be any huge benefit to taking this class(and paying for it) as opposed to dicking around with it on my own

Here's one of my favorite books, because I'm impatient. It's called Unix for the Impatient.

http://www.amazon.com/UNIX-Impatient-Edition-Paul-Abrahams/dp/0201823764

Frankly I wouldn't pay too much for a class. You can install Linux for free (and if you have a Mac you already have a Unix system) and there's so much information online that the self-directed learner has many options and paths. But of course classes provide structure, and that's good too.

u/miyakohouou · 1 pointr/learnprogramming

As others have said, K&R is great for learning the C language. In addition to that, Algorithms in a Nutshell is a nice reference because it has sample code in C for a lot of major data structures and algorithms, so you can see how the language is used to implement CS concepts you might already be familiar with.

I would also highly recommend one or both of Advanced Programming in the Unix Environment or The Linux Programming Interface, which will get you up to speed on POSIX.

u/mioelnir · 5 pointsr/freebsd

I can't recommend that book enough. It will give you a great overview over the services the kernel provides, design decisions and data structures.

In addition to that, these resources might also be of interest to you:

u/leoc · 2 pointsr/programming

If you have access to Stevens and Rago at all, section 14.3 covers Unix locking well. (Johnson and Troan also has a nice Linux-centric guide.) I'm not at all a Unix pro, so mostly just summarising Stevens and Rago:

File (and file region) locking through system calls is pretty ubiquitous on modern Unix. Mandatory locking has been on Linux for a good while but:

  • it's not in the Single Unix Specification, and various BSDish Unices don't support it, including OS X 10.3.

  • it's a mount option on Linux, so it may not be available on any given mounted filesystem

  • not all Unix programs play well with it - for example, some versions of ed(1) "edit" files by unlinking the file at the specified filename and linking a new file there.
u/Truth_Be_Told · 1 pointr/C_Programming

First note that Career/Job/Market is quite different from Knowledge/Intellectual satisfaction. So you have to keep "earning money" separate from "gaining knowledge" but do both parallely. If you are one of the lucky few who has both aligned in a particular job, you have got it made. Mostly that is never the case and hence you have to work on your Motivation/Enthusiasm and keep hammering away at the difficult subjects. There are no shortcuts :-)

I prefer Books to the Internet for study since they are more coherent and less distracting, allowing you to focus better on a subject. Unless newer editions are reqd. buy used/older editions to save money and build a large library. So here is a selection from my library (in no particular order);

u/greginnj · 2 pointsr/linuxquestions

I have to say - Videos can't get into as much depth as books - they may feel more comfortable, but you're not learning as much.

That said, if you can tolerate books, start with a classic: The Unix Programming Environment. The coverage of system calls, in particular, will connect your userland knowledge with OS operations.

Oh wait, it's available online!


And Unix Systems Architecture is another classic that would be a great next step, but doesn't seem to be available online as a PDF ...

u/Drach88 · 4 pointsr/C_Programming

A note re: jumping into The Linux Kernel -- This is best tackled while simultaneously reading a book on the kernel like Linux Kernel Development (3rd Edition) by Robert Love and a book on general *nix fundamentals like Advanced Programming in the Unix Environment by Stevens and Rago.

u/too_many_puppies · 2 pointsr/linux

In college I took a class that used this book as the text book. I loved that class and my knowlege and love of linux/unix definately benefited.
http://www.amazon.com/Programming-Environment-Addison-Wesley-Professional-Computing/dp/0321525949/ref=sr_1_1?ie=UTF8&qid=1334773536&sr=8-1

u/berium · 3 pointsr/cpp

I haven't read the book but after attending his talk not surprised to hear this at all ;-)

I still find David Butenhof's Programming with POSIX Threads the best introduction to thread-based concurrency even through there is zero C++ (modern or otherwise). But once you understand the fundamentals (like why you need to hold the mutex when calling wait() on condvar), then all the APIs (like that of C++11) become fairly transparent.

u/SftwEngr · 2 pointsr/cscareerquestions

"Operating Systems" and "Software Tools and Systems Programming" were the most helpful to me. Both were difficult with difficult profs, but very interesting so I got a lot out of it. The Stevens' book was the text for "Software Tools" and all his books are very good.

u/mumux · 1 pointr/compsci

http://www.amazon.com/UNIX-Internals-The-New-Frontiers/dp/0131019082

I'm surprised this one hasn't been mentioned yet; it's arguably one of the best book on UNIX operating systems design. It gives a lot of valuable information on how to efficiently implement SMP kernels which is something missing from a lot of other books. Maybe not adequate if you're a complete beginner though.

u/guffenberg · 6 pointsr/linux

You definitely want this book for debian
The Debian Administrator's Handbook

You might also look for a book to teach you the basics of command line tools and system configuration files. I used to have a book I really liked but its too old to be found these days.

edit:
This is the one we used at university
UNIX System Administration Handbook
I'm not sure I would recommend it though as I'm not sure its the best. There is plenty others out there.


You should also try to compile your own kernel at some point just so you know how it is done and how you can tune a kernel if you need to.

u/pinchyfingers · 2 pointsr/emacs

You can install spacemacs and other custom configs as a way of discovering what's out there and how to do things, and then put the things you like and understand in your own init.el.

This is a good book to get started: Writing GNU Emacs Extensions: Editor Customizations and Creations with Lisp.

Just go slow, try out lots of configs for ideas, build up your customizations over time.

u/Jeff-J · 3 pointsr/Gentoo

Books that I find very useful:

Beginning Portable Shell Scripting: From Novice to Professional

From Bash to Z Shell: Conquering the Command Line

Unix Power Tools, Third Edition

The UNIX Programming Environment

Running Linux (mine is old, but still useful)

I have bought lots of other useful books from O'Reilly.

Anything written by Michael W Lucas.

u/joeshaw · 5 pointsr/golang

In addition, he co-wrote The UNIX Programming Environment and The Practice of Programming with Rob Pike and The Elements of Programming Style with PJ Plauger. I've never read the Practice of Programming (add it to the wish list) but the other two books are fantastic. The Elements of Programming Style is somewhat dated (code is in PL/I and Fortran, and it discourages things like goto which we all already know is bad) but a lot of it is still relevant and worth picking up a used copy if you can find it.

u/lostchicken · 2 pointsr/AskElectronics

The closest thing I can think of is Uresh Vahalia's book "UNIX Internals". It's more technical than Code, but it's really quite well written and clear. It's somewhat hard to find, though.

http://www.amazon.com/UNIX-Internals-The-New-Frontiers/dp/0131019082

u/dmh2000 · 2 pointsr/programming

i'd like to hear a comparison of this to Steven's http://www.amazon.com/Programming-Environment-Addison-Wesley-Professional-Computing/dp/0201433079 (2nd edition includes Linux) since that book is acknowledged to be a masterpiece.

u/forked_tongue · 3 pointsr/emacs

If you're serious about this, and want to do it right, I'd recommend locating a copy of Writing GNU Emacs Extensions by Bob Glickstein.

While it is a little out of date with respect to recent versions of emacs (some things are easier now, and a few "best practices" have changed), it is still an excellent overview of writing emacs extensions.

I'd be a little cautious about following it's tutorials due to the previously mentioned changes (you will still need to do some additional manual reading), but as far as a starting point and overview of what is involved, I can't think of a better resource.

u/eeeple · 1 pointr/cpp

If you're programming for POSIX environments, this book is an absolute reference. It's as old as pthreads, but still relevant, especially the explanation of various multi-threading paradigms, such as pipeline and worker group. Plus it's much better than OReilly's book on pthreads.
If you're developing for multiple platforms and want to stay 100% C++ /u/Meowiavelli 's recommendation is def. top notch.

u/RunninADorito · 1 pointr/cscareerquestions

Here's the one I was thinking of: http://www.amazon.com/Unix-Power-Tools-Third-Edition/dp/0596003307


You don't need the book, but I like learning from practical examples and then using that as a jumping off point. If you like starting with examples for learning - this is the book for you.

u/net_nomad · 1 pointr/learnprogramming

Just go straight to C++ then.

If not, http://shop.oreilly.com/product/9781565923065.do then https://www.amazon.com/Expert-Programming-Peter-van-Linden/dp/0131774298 then https://faculty.washington.edu/jstraub/dsa/Master_2_7a.pdf

I haven't read the last one, but I skimmed through it. You need that.

Hmm, what next? Ah, https://www.amazon.com/Advanced-Programming-UNIX-Environment-3rd/dp/0321637739 if that's your thing. You may find that online without having to buy it for the 2nd edition.

Oh, sockets... http://www.csd.uoc.gr/~hy556/material/tutorials/cs556-3rd-tutorial.pdf however, back when I studied those, I read beej's tutorial: http://beej.us/guide/bgnet/

You obviously don't need all of that. The first book I listed is enough, but maybe it'll be fun to work through them?

u/cdarwin · 5 pointsr/cpp

The first book you need is Advanced Programming in the UNIX Environment. This is the bible for socket programming (among other things).

This book is based on C. A good resource is The Indispensable Guide to C.

Hope this helps.

u/The_Imerfect_Mango · 2 pointsr/cscareerquestions

I just started learning it for my class in University. I am surprised at how much I like it and how much deeper my understanding of Linux has got. It might be annoying at first but trust me, you learn a lot. You should also give Advanced Programming in the UNIX Environment a read. It has taught me so many things already!

u/zubzub2 · 2 pointsr/AskReddit

>On a related note fuck tcsetpgrp.

Get yourself a copy of Advanced Programming in the Unix Environment, Second Edition. One of the few computer books I recommend reading.

It contains pretty concise (well, the book is big, but there's not much fluff) summaries of a lot of Unix systems stuff, including a lot of gotchas. Reading that earlier would have saved me a not insignificant amount of time on Unix systems later.

u/Skaar1222 · 3 pointsr/learnprogramming

I am currently taking my systems programming class for my CS degree. We use linux, with C and VIM, and have a couple of books that are actually really helpful.
This book will walk you through C and its syntax. I have read through most of it. Its pretty easy to follow and comprehend.

https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628

This book I havent cracked open yet but plan on it today. My teacher swears by it, however.

https://www.amazon.com/Unix-Programming-Environment-Prentice-Hall-Software/dp/013937681X

u/lilgreenwein · 1 pointr/unix

If you're looking for a book I highly recommend Unix Shells by Example:

http://www.amazon.com/UNIX-Shells-Example-4th-Edition/dp/013147572X/ref=la_B001H9RV1E_1_2?ie=UTF8&qid=1346897356&sr=1-2

I like it because it's light on the banter and explanation that's so common with tech books, and heavy on the examples. It's had a permanent spot on my work bookshelf for the last 10 years

u/AnthonyJBentley · 1 pointr/linux

A lot of Kernighan’s (co‐authored) books age surprisingly well. It’s a real testament to his writing style that they are still relevant today despite examples tending to be in PL/I or Fortran.

u/ablakok · 2 pointsr/linux

Well, there is The UNIX Programming Environment by Kernighan and Pike (K&P). It's a little dated but it covers sh and awk, including the use of grep, sed, lex, yacc, and the like. You might want to combine it with a more modern book to learn the latest enhancements to bash.

u/icantthinkofone · 1 pointr/C_Programming

Advanced Programming in the Unix Environment by Stevens Also the best book for everything else.

u/rbatra · 1 pointr/learnprogramming

UNIX Shells by Example by Ellie Quigley is a great text to pick up shell scripting.

u/nerd4code · 6 pointsr/C_Programming

It’s gonna be hard to give you much without picking a specific OS—details can vary widely even within a single OS family line—but an OS book is probably a good place to start. Tanenbaum’s book is the go-to.

Alternatively, there are books on specific techniques like garbage collection, or books more generally on programming for UNIX/POSIX/Linux or Windows (via Win16/32/64 API, not the six-mile-high shitheap piled atop), which would tell you some about how memory management works in down at least to whatever abstract hardware interface the kernel uses.

u/sbonds · 2 pointsr/linuxadmin

Tools like this show you what the system is doing for the application. If you don't know what applications want to do, the output is going to be hard to understand. Perhaps work on some UNIX programming to see what UNIX looks like from an app's point of view?

http://www.amazon.com/gp/product/0321637739

u/garion911 · 1 pointr/AskEngineers

Assuming you're using Linux/Unix/BSD, this book will be invaluable: http://www.amazon.com/Advanced-Programming-UNIX-Environment-Edition/dp/0321637739

To start with, read up on select(), as that will be your friend. Doing something like this will be really tricky to get right.

u/ends_ · 1 pointr/linux

This book is full of unix and linux tips. I suggest this book over all others I've read. It is an immense help for daily tasks as well as stuff you don't see too often.

http://www.amazon.com/UNIX-System-Administration-Handbook-3rd/dp/0130206016

u/olig1905 · 5 pointsr/C_Programming

I believe this book would be of interest, its big and bad, but from memory it is exactly what you are looking for, infact it basically gives you all you need to know to start implementing your own fully featured shell:https://www.amazon.co.uk/Advanced-Programming-UNIX-Environment-Addison-Wesley/dp/0201433079


EDIT: Seems there is a new edition, it is over 25 years old and has been updated multiple times to cover new standards so this one is probably better, https://www.amazon.co.uk/Programming-Environment-Addison-Wesley-Professional-Computing/dp/0321637739/ref=dp_ob_title_bk

u/rez9 · 1 pointr/linuxquestions

Reading something like UNIX Sys Admin Handbook couldn't hurt.

u/reginod · 1 pointr/netsec

You don't need a school for this.

Low Level Programming Languages

u/o0o · 1 pointr/BSD

I'm making my way through A Quarter Century of Unix - it's very interesting.

u/random_account_538 · 2 pointsr/MLPLounge

I've been slowly working my way back through this book to make sure I still remember everything. They have a newer edition out for it, so get that if you decide to pick it up. It's not a light read, and assumes you already know a fair bit about C, but it teaches things that are crucial to practical programming.

As for GTK+, there aren't too many good books on it unfortunately - at least that I've seen yet. I picked up a "Foundations of GTK+ development" book when I first started learning it. It gets you going, but leaves out a lot of what I would consider important details for more advanced things. For example printing is only very breifly covered. If there's one thing users are going to want it's printing support..

u/shunbit · 1 pointr/C_Programming

I found this to be a useful starter.
https://www.amazon.com/dp/0201633922

u/BrotherChe · 3 pointsr/Unexpected

Just because textbooks and reference books can be dry doesn't mean they're not creative.

Here's another and another. O'Reilly published books have a couple clever or "funny" ones.

u/mpasteven · 1 pointr/programming

Buy this book: <https://www.amazon.com/Unix-Shell-Programming-Stephen-Kochan/dp/0672324903> and learn how the POSIX shell can make your life easier.

u/InAQuietCorner · 7 pointsr/learnprogramming

I like this cheatsheet and this book: Learning the vi and Vim Editors.

Edit: I forgot about Vim Adventures!

u/hyc_symas · 24 pointsr/Monero

You must be on x86_64 Linux. Extract the tarball into a directory of your choice. Set the environment variable LD_LIBRARY_PATH to include that directory. Then run randprog in that directory. If you don't understand what I just wrote, go away and learn before coming back. This book will help you https://www.amazon.com/Unix-Programming-Environment-Prentice-Hall-Software/dp/013937681X

u/sree_1983 · 3 pointsr/india

Why don't you start reading this?

Should help u a lot with Unix Internals and system calls.

u/crackez · 1 pointr/unix

I just have a copy of Kernighan & Pike's Unix Programming Environment for my 1 year old. He seems to like it as much as the other books he has.

u/FameInducedApathy · 3 pointsr/emacs

I'd recommend watching Writing Games in Emacs for a simple tic-tac-toe mode and then reading Writing GNU Emacs Extensions which culminates in a crossword mode.

u/solid7 · 1 pointr/learnprogramming

It will teach you the semantics of the posix interface and introduce you to some canonical utilities. That information is relevant today (we still use sed, make, etc..). Given the choice, I'd probably opt for a book specific to linux, freebsd, etc.. kernels alongside something like unix power tools.

u/nsgf · 6 pointsr/programming

Same here (but also got a copy of "Advanced Programming in the UNIX Environment" by W. Richard Stevens, Stephen A. Rago
http://www.amazon.com/Programming-Environment-Addison-Wesley-Professional-Computing/dp/0321525949).

u/turtleface78 · 0 pointsr/learnprogramming

Advanced Programming in the UNIX Environment, 3rd Edition

https://www.amazon.com/Advanced-Programming-UNIX-Environment-3rd/dp/0321637739

u/reverendj1 · 3 pointsr/linux4noobs

I like to use nano for simple file editing, such as changing a config. For programming, I switched from Gedit to Atom to Vim. This book is what finally made Vim click for me. Following along with that book, after a week, I was just as productive in Vim as I had been in Atom, after using it for 1-2 yrs. My main reason for switching to Vim is that Vi/Vim are a pretty standard default install on most distros, so you're pretty much guaranteed to have it everywhere. I've never tried using emacs, so I can't say anything good or bad about it.

u/0theus · 1 pointr/linux

> Is there some sort of golden rule book whose laws must not be violated?

Yes. The Design of the UNIX operating system and there's The UNIX Programming Environment :\^)

u/hyperbolist · 4 pointsr/vim

And here are links to buy "Learning the vi and Vim Editors" from O'Reilly and from Amazon, in case you don't want to steal some learning material.

u/ucsdrake · 3 pointsr/linuxquestions

I realize this has more than the OP was looking for (ie the other shells). but UNIX Shells By Example is by far my favourite book I've come across in terms of learning scripting, might want to check it out.

u/Thibpyl · 2 pointsr/freebsd

Self-directed teaching has its limitations. For example, misreading or misunderstanding the system documentation. Debugging would have been less useful here because the program blows up after you make a system call -- a typical indication of programmer error. One tool you can use in such a situation is more documentation, especially one with additional examples and discussion. Take a look at Advanced Programming UNIX Environment, 3rd edition to get more information on system programming. It helps you build up a foundation and serves as a solid reference.

u/wggn · 5 pointsr/learnprogramming

Unix for the Impatient was mandatory when I went to uni

u/goomba870 · 2 pointsr/linuxmasterrace

> unix power tools book

This?

u/tclark · 1 pointr/linux

You should probably have a look at Peter Salus' A Quarter Century of Unix.

u/wyatt8740 · 2 pointsr/linux

Unix Shell Programming (3rd Edition), by Stephen Kochan (old bell labs employee):

http://www.amazon.com/Unix-Shell-Programming-3rd-Edition/dp/0672324903

u/batman_carlos · 2 pointsr/linuxmasterrace

Install ubuntu. Then read this, the same than anyone else for the last 3 or 4 decades:

https://www.amazon.es/UNIX-Programming-Environment-Prentice-Hall-Software/dp/013937681X

u/smellsmoist · 2 pointsr/learnprogramming

My school is still using this text http://www.amazon.com/UNIX-Impatient-Edition-Paul-Abrahams/dp/0201823764. It's a bit outdated in parts..

u/Mansaber · 18 pointsr/unix

If you're new to C, read K&R.

Once you've done that (or if you already know C) then read THE book on Unix programming

u/lattera · 6 pointsr/BSD
u/mcguire · 2 pointsr/programming

Or,

u/joedonut · 1 pointr/linuxadmin

UNIX Shells by Example by Ellie Quigley. Reviews here.

u/IvyMike · 21 pointsr/reddit.com

To be fair, only one of them appears to be reading the UNIX book; the other girl is reading a paperback novel.

Worse yet, it's not even a very good UNIX book. Wake me up when you've got a photo of a hot chick reading Stevens. Gotta have standards.

u/FooBarWidget · 0 pointsr/programming

"Created its own problem"? The problem is documented in detail in two Unix operating systems books, as explained in the blog post. We didn't create the problem -- this problem is fundamental to how Unix works, and using Docker doesn't suddenly make it go away.

If you don't believe me, go read Operating Systems Concepts by Silberschatz et al, or Advanced Programming in the UNIX Environment by Stevens et al. Look up what they have to say about PID 1 and zombie processes.

Heck, even Solomon Shykes, founder of Docker inc, recognizes this problem. But it pains me that I have to appeal to authority even though the facts are out there.

u/ben174 · 1 pointr/vim

Same problem here. No idea on how to fix, unfortunately. I grabbed the O'Reilly book, then played vimgolf religiously for a couple weeks, then forced myself to use vim as my only IDE/text editor for a month, and now it feels more natural to me than any other editor I've used.

u/bcopy · 1 pointr/C_Programming

You'll want APUE 3rd Ed for something like this.

I personally consider it a must-have.

Other things to note, you may/may not want to setrlimit for core dumps if you have sensitive information in the daemon. Calling fork() and then killing the parent is considered standard as is calling setsid(), closing all file handles and opening 0/1/2 to /dev/null.

u/Damienov · 3 pointsr/Ubuntu

"The Unix Programming Environment"

there lies your problem, Unix is not linux. Also, I'm guessing this is the book you are using? If so, that is from 1983.

u/Amperture · 1 pointr/TwoBestFriendsPlay

So, this was a thought frequently at the back of my mind, but I never did bother to investigate why the fuck O'Reilly uses pencil sketches of ugly animals as their book covers.

So I went to their website, and a few things stuck out to me.

  • The Horrid Little Monkey is actually the primary logo for their website
  • The Horrid Little Monkey is their mascot for their book to learn how to use vim which coincidentally is my favorite text editor
  • They have a page dedicated to explaining why they use ugly animals as mascots, and the explanation boils down to the cover designer is basically just Plague

    >And, as I investigated the attributes of the real animals, I quickly discovered that there were intriguing correspondences between specific technologies and specific animals. That resonance grew and expanded as I learned more about both the technologies and the animals.

    >I was so energized and inspired that I spent an entire weekend working on the covers without much sleep.

    >At the end of the weekend, I gave several sketches to my neighbor to take into the office.